Blog
Pubblicato in Cakephp, trucchi, 1 settimana fa , Commenti | Lascia un commento
Recentemente mi è capitato di dover tradurre tutte le stringhe di un sito scritto in CakePHP, ma solo in inglese. Un autentico lavoraccio visto che il sito aveva una miriade di pagine e di funzionalità.
Dalla mia c'era il fatto, e chi usa CakePHP lo sa, che gli strumenti che questo fantasmagorico framework offre sono infiniti.
Fortunatamente il sito era già predisposto per la traduzione, quindi bastava preparare il file .po ed inserirvi le traduzioni. Lo strumento di cui mi sono servito, anche questa volta, è la potentissima console di CakePHP, che con il comando
/var/www/ilmiosito/app$ ./Console/cake i18n
ha cercato (da sola!!) tutte le stringhe traducibili in tutte le sottodirectory dell'applicazione "ilmiosito" (quelle scritte in modo simile a __('Traducimi', true), per intenderci) ed ha salvato il tutto, comodamente, nella directory ./app/Locale nella forma di un file con sintassi gettext, cioè qualcosa di simile a questo:
msgid "Translate me"
msgstr "Traducimi"
... naturalmente, inserire la traduzione nella stringa msgstr rimane compito di chi scrive, non tutto è così automatizzato :)
Comodo, no?
Pubblicato in Cakephp, Segnalazioni, 6 mesi fa , Commenti | Lascia un commento
Una doverosa premessa
Fin da quando sono entrato nel colorato e caramelloso mondo multiforme dell'informatica ho sempre prediletto blog e siti tematici; ho un brutto rapporto con manuali, libri e quant'altro riguardante la programmazione: ne ho acquistati alcuni insieme a riviste o per conto mio, ma immancabilmente la loro fine è quella di essere riposti in uno scaffale il giorno stesso o di restare sul tavolo in attesa di decidere cosa farne.
Qualche tempo fa sono stato contattato per recensire "CakePHP 1.3 Application Development Cookbook", di Mariano Iglesias. Conosco di fama Mariano Iglesias perchè diverse volte, cercando informazioni su come-fare-cosa su CakePHP mi sono imbattuto in alcuni suoi contributi, così, vista la mia stima nei suoi confronti, pur senza averci mai avuto a che fare direttamente, mi sono incuriosito e ho deciso di provare a farne una recensione.
Il libro
Il libro, che mi è arrivato in formato elettronico, è sostanzialmente un incrocio fra un manuale "pratico" ed un libro di ricette. Cookbook è un nome perfettamente azzeccato, e come tale è consigliabile leggerlo: se per esempio avessi bisogno di sapere cosa sono e come funzionano i Test, argomento su cui ho sempre avuto molte lacune e su cui non sono mai riuscito a trovare qualcosa di realmente utile a riguardo, mi basterebbe aprire il libro su quel capitolo per scoprire cosa sono, come funzionano e trovare degli esempi pratici su come usarli. Esempi che non sono mai banali...
Leggi il resto del postPubblicato in Cakephp, 1 anno fa , Commenti | Lascia un commento
Premessa:
Gli editor WYSIWYG sono una figata, e sono anche un ottimo strumento da dare in mano ad un cliente affinchè possa creare una pagina sapendo, almeno per sommi capi, cosa sta facendo.
Il problema sorge quando si inizia a testarli, questi editor, e personalmente mi sono imbattuto in:
TinyMCE: un editor semplice da usare, abbastanza funzionale, ma in generale lo trovo... scomodo. La licenza professionale ha un costo ma non so di quanto sia.
Ckeditor: più carino esteticamente (a mio gusto). Funzionale al punto giusto, ha un solo grande difetto per me: la licenza costa decisamente troppo per un progetto come il mio, dovrei ricaricare troppo sui clienti e questo non mi va.
Recentemente mi sono imbattuto in elRTE, un progetto open source basato su jQuery (il che da solo me lo fa preferire ad altri editor). È anche fornito di un ottimo file manager, molto potente e molto personalizzabile.
Ok, proviamolo
Siccome sono tremendamente curioso e mi piace provare tutto ciò che ha la parvenza di essere usabile, ho deciso subito di provarlo.
L'installazione su CakePHP non è difficile, ma non essendoci ancora documentazione in giro su come ottenerne l'integrazione ho avuto alcune difficoltà. Questi sono i passaggi che devi fare:
- Scarica elRTE e elFinder e scompatta entrambi in .app/webroot/js/elrte/
- Scarica il file .zip che ho allegato in fondo a questa pagina, e poi salva il file elrte.ctp in .app/views/elements/ e il file connector.php in...
Leggi il resto del postPubblicato in Cakephp, Segnalazioni, 2 anni fa , Commenti | Lascia un commento
Un progetto molto simile era in cantiere da diverso tempo sul forum di cakephp-it.org, ma qualcuno ci ha battuti sul tempo (non che ci volesse molto visto il nostro stato dei lavori
)
questa la presentazione:
Assume nothing: Authsome requires that you have some kind of user model, but that's it. It doesn't care if you use a database, passwords or religious ceremonies for verifying your member logins.
Touch nothing: Authsome does not interact with your application at all. No login redirects, no permissions checks, nothing. You never have to worry about the underlaying magic, it will never get into your way.
Always available: Authsome is there for you when you need it. You can do stuff like Authsome::get('id') from anywhere in your project. If you have MVC OCD, you can also use Authsome as a regular component: $this->Authsome->get('id')
http://github.com/felixge/cakephp-authsome
Leggendo la presentazione sembra un gran bel pezzo di codice, al più presto proverò ad implementarlo in qualche progetto... ma il bello arriverà più avanti, nel 2010:
Next on the radar is Righteful: Acl for people who hate the Acl component. We hope to have it ready at some point early next year.
http://debuggable.com/posts/cakephp-aut … 76cbdd56cb
ACL è un complesso sistema di gestione delle autenticazioni, come molti sviluppatori (e non solo su cakephp) sapranno... l'unica difficoltà, che molti sviluppatori (soprattutto su cakephp)...
Leggi il resto del postPubblicato in Cakephp, 2 anni fa , Commenti | Lascia un commento
Gestire le date con cakephp non è mai stata una cosa semplice, senza parlare poi della situazione in cui si utilizza un hosting oltreoceano...
Un piccolo helper potrebbe venirci in aiuto:
<?php
// ./app/views/helpers/date.php
/**
* Formattazione date e ore con Cakephp
*
* @author ToX - http://emanuele.itoscano.com - toss82 - at - gmail.com
*
*
*
* @installazione:
* Nella funzione daymonthyear e monthdayyear ricordati di cambiare la lingua di setlocale con ciò che ti serve (default: it_IT)
*
*/
Class DateHelper extends AppHelper{
function nicedate($date)
{
if(empty($date)) {
return "No date provided";
}
$singular = array("secondo", "minuto", "ora", "giorno", "settimana", "mese", "anno", "decade");
$plural = array("secondi", "minuti", "ore", "giorni", "settimane", "mesi", "anni", "decadi");
$lengths = array("60","60","24","7","4.35","12","10");
$now = time();
$unix_date = strtotime($date);
// check validity of date
if(empty($unix_date)) {
return "N/A";
}
// is it future date or past date
if($now > $unix_date) {
$difference = $now - $unix_date;
$tense = "fa";
} else {
Leggi il resto del postPubblicato in Cakephp, 2 anni fa , Commenti | Lascia un commento
Uno dei problemi che si possono presentare a chi lavora su cakephp è quello di avere uno stesso progetto utilizzato da clienti diversi, con esigenze diverse, sia di temi grafici che di formalità nel lessico.
Immagina di avere la stessa piattaforma per due siti, uno molto formale (cliente Pierluigi) e uno giocherellone (cliente Ciccio). È ovvio che se entrambi vogliono una stringa di benvenuto sul sito questa non possa essere la stessa, ma dovrebbe essere personalizzata... Cakephp ci ha fornito uno strumento utilissimo che sono i locales, dei files in cui inserire le stringhe da tradurre, con relativa traduzione
Se ad esempio nella mia view uso qualcosa tipo __('Saluti', true), cakephp si occupa di andare a cercare la relativa stringa nel file app/locale/ita/LC_MESSAGES/default.po
msgid "Saluti"
msgstr "Ciao"
oppure, se la lingua è impostata sull'inglese, nel file app/locale/eng/LC_MESSAGES/default.po
msgid "Saluti"
msgstr "Hello"
Ma come fare se, tornando al problema iniziale, vogliamo che per il cliente Pierluigi ci sia un saluto formale, e per Ciccio un saluto informale, sempre in italiano? Cakephp ci ha fornito una comodissima soluzione, che se utilizzata insieme alla funzionalità theme fa perfettamente al caso nostro...
__d($this->theme, 'Saluti', true)
Notato la sottile differenza? Con questa sintassi cakephp va a prendere il nome del tema in uso e cercherà il relativo file .po nelle directory che abbiamo nominato sopra.
Se...
Leggi il resto del postPubblicato in Cakephp, 2 anni fa , Commenti | Lascia un commento
L'integrazione del sistema di gestione commenti disqus è un lavoro piuttosto semplice e veloce. Per renderlo ancora più semplice, e più in stile cake, ho creato un piccolo helper che si occupa di fare tutto il lavoro sporco.
Innanzitutto è necessario un account disqus. Puoi prenderne uno qua:
http://disqus.com/comments/register/
Poi, copia-incolla il codice sottostante nel file ./app/views/helpers/disqus.php
Helper Class:
<?php
// ./app/views/helpers/disqus.php
/**
* Disqus comment system integration Helper
*
* @author ToX - http://emanuele.itoscano.com - toss82 - at - gmail.com
*
*
*
* @help:
* In function makeRepliable, I set the projectName somewhere in my configuration files,
* remember to change this variable to something that suits your needs.
*
*/
class DisqusHelper extends Helper {
var $helpers = array('Html', 'Javascript');
function repliesLinkCounter() {
$projectName = Configure::read('Disqus.projectName');
$createJS = "
(function() {
var links = document.getElementsByTagName('a');
var query = '?';
for(var i = 0; i < links.length; i++) {
if(links.href.indexOf('#disqus_thread') >= 0) {
query += 'url' + i + '=' + encodeURIComponent(links.href) + '&';
Leggi il resto del post