Questa pagina è una specie di prontuario che raccoglie molti frammenti di codice, servono a risolvere alcuni piccoli difetti del CMS Contao. Sono tutti trucchi che dipendono dalla mia esperienza lavorativa e dal mio gusto personale, quindi non è detto che dobbiate seguire questi consigli.
Le istruzioni sono valide per la versione Contao 3.
Se abilitiamo il rewrite (impostazioni generali), Contao simula un sito statico ed imposta i percorsi delle pagine con l'alias, e ci aggiunge ".html". Questo è bene per SEO, ma abbiamo un problema. Se creiamo un modulo menu, la voce che punta alla home page ha il link con l'alias, ad esempio "home.html". Avremmo quindi un duplicato nelle statistiche di Analytics e di Webmaster Tools per una pagina che di fatto è la stessa: "http://www.nomesito.it/it/home.html" ed anche "http://www.nomesito.it/it/".
Questo voglio evitarlo perché oltre al fatto che Google potrebbe penalizzarci, in ogni caso dividiamo in due i risultati e quindi il ranking.
(Edit giugno 2013: ho scoperto che si può evitare questo problema facilmente, basta scrivere "index" come alias della pagina, in questo caso Contao corregge da solo il link)
La cosa da fare è inserire il seguente codice nel file .htaccess, alla fine del mod_rewrite. Ho messo due varianti a scelta.
## # Redirect to prevent duplicate content of the home page # uncomment the version you prefere ## ## Keeping the current directory path RedirectMatch 301 (.*)/home.html $1 ## Straight to the website root # RedirectMatch 301 /home.html /
Il template default del menu di Contao prevede che le voci attive siano senza link, ed abbiano invece uno <span>. Questa pratica è condivisa da altri ma a me non piace. Ritengo che il menu debba sempre contenere tutti i link delle pagine.
Per fare questo basta creare un nuovo template "nav_default" e rimuovere la condizione "if", il codice che ne risulta è il seguente.
<ul class="<?php echo $this->level; ?>"> <?php foreach ($this->items as $item): ?> <li<?php if ($item['class']): ?> class="<?php echo $item['class']; ?>"<?php endif; ?>><a href="<?php echo $item['href']; ?>" title="<?php echo $item['pageTitle'] ? $item['pageTitle'] : $item['title']; ?>"<?php if ($item['class']): ?> class="<?php echo $item['class']; ?>"<?php endif; ?><?php if ($item['accesskey'] != ''): ?> accesskey="<?php echo $item['accesskey']; ?>"<?php endif; ?><?php if ($item['tabindex']): ?> tabindex="<?php echo $item['tabindex']; ?>"<?php endif; ?><?php if ($item['nofollow']): ?> rel="nofollow"<?php endif; ?><?php echo $item['target']; ?>><?php echo $item['link']; ?></a><?php echo $item['subitems']; ?></li> <?php endforeach; ?> </ul>
Il template "cal_default" ha per tutti gli eventi un class del tipo "event", poi "cal_x" dove la x è l'id dell'archivio eventi (utile nel caso volessi distinguere gli eventi in base alla categoria a cui appartengono), ed infine un class "current" che secondo me è di troppo, si confonde con il current del menu, e se non sto attento coi selettori mi potrebbe impostare erroneamente attivi tutti gli eventi.
Sarebbe meglio avere solo class="event cal_x". Il codice quindi è il seguente.
<div class="event cal_<?php echo $event['parent']; ?><?php echo $event['class']; ?>"> diventa... <div class="event cal_<?php echo $event['parent']; ?>">
Oltre a questa correzione per il calendario grande ce ne sono anche altre che riguardano il mini calendar come spiegato in questo articolo. Nello stesso articolo spiego come evitare i contenuti duplicati (sempre motivi SEO), aggiungere l'immagine nei template degli eventi (che di default manca), ed ho incluso anche il codice css di riferimento per stilizzare un piccolo calendario.
L'iscrizione alla newsletter in Contao può avvenire in due modi: uno rapido e spartano, e uno più completo.
Rapido e spartano: gli utenti forniscono solo una email, e si iscrivono direttamente nella lista della newsletter, quando si cancellano eliminano la loro email dalla lista. E' necessario creare queste cose:
Metodo più completo: gli utenti sono registrati come membri, con un'anagrafica più completa, poi eventualmente con username e password, ed area riservata con accesso front-end. Gli utenti possono cancellarsi dalla newsletter restando membri, o rimuovere totalmente il loro account. La procedura è simile ma con alcune differenze.
I membri possono iscriversi a più di una newsletter, per semplicità ho scelto un unico gruppo con un'unica newsletter (è anche il caso più comune).
Veniamo al punto: la form di iscrizione in front-end presenta un campo checkbox dove l'utente dovrebbe scegliere la newsletter a cui iscriversi. Questo campo però è superfluo se l'iscrizione è intesa per una sola newsletter fin da principio, sarebbe meglio quindi se fosse nascosto. Purtroppo da back end non si può configurare quindi dobbiamo fare un trucco. Quello più facile e rapido è via javascript, per attivare il checkbox e nasconderlo, propongo questi due script: uno per Mootools ed uno per Jquery, basta inserire quello che vi serve nella pagina in cui avete la form.
Script per Mootools <script type="text/javascript"> window.addEvent('domready', function(){ $('ctrl_newsletter').getElement('.checkbox').setAttribute('checked','checked'); $('ctrl_newsletter').setStyle('display', 'none'); }); </script> Script per JQuery <script type="text/javascript"> $(document).ready(function() { $('#ctrl_newsletter').find('.checkbox').attr('checked', true); $('#ctrl_newsletter').css({'display':'none'}); }); </script>
Anche questa è una operazione SEO. Nel mio caso avevo un vecchio sito Joomla che aveva gli URL non ottimizzati, con "index.php?....ecc...ecc..." eppure era ben posizionato.
Non mi sono preoccupato troppo se perdevo ranking, perché ero indicizzato comunque con keywords che non desideravo (articoli obsoleti, o per Joomla che non tratto più, o per Flash...). Tuttavia mi dispiaceva vedere tutti quegli errori in Webmaster Tools, quindi ho voluto redirigere almeno parte delle pagine verso il nuovo sito Contao 3.
Nel file .htaccess, subito dopo la Rewritebase ho inserito quindi il seguente codice:
#reindirizzo tutti i vecchi url RewriteRule ^demo/wbl-demo/(.*)$ it/? [R=301,L] RewriteRule ^demo/alphadiv/(.*)$ it/? [R=301,L] RewriteRule ^demo/positionfixed/(.*)$ it/? [R=301,L] RewriteCond %{QUERY_STRING} ^.*option=com_content.*?$ [OR] RewriteCond %{QUERY_STRING} ^.*option=com_contact.*?$ [OR] RewriteCond %{QUERY_STRING} ^.*option=com_rss.*?$ [OR] RewriteCond %{QUERY_STRING} ^.*option=com_akocomment.*?$ [OR] RewriteCond %{QUERY_STRING} ^.*option=com_frontpage.*?$ [OR] RewriteCond %{QUERY_STRING} ^.*option=com_search.*?$ RewriteRule ^(.*)$ it/? [R=301,L]
In pratica le prime tre RewriteRule erano delle cartelle con delle demo, erano probabilmente cose molto visitate perché i file avevano parecchi accessi. Ho mandato tutte le richieste alla versione italiana "/it/" del mio nuovo sito.
Poi ho fatto una serie di RewriteCond per intercettare particolari parametri della Querystring, come ho già detto non avevo altra pagina che la index.php. Ho preso quindi i parametri più ricorrenti del sito (contenuto, commenti, ricerche interne...) e ho girato tutto ancora su /it/.
Ho visto sul sito dello sviluppatore di Colorbox che questa correzione nel css è già stata fatta. Tuttavia Contao (almeno fino la 3.0.3) ha una versione non aggiornata della plugin, e presenta il bug.
Avete due opzioni, o aggiornate Colorbox, oppure sistemate il css come spiego in questo articolo.
Placeholder è una funzionalità HTML5, Contao l'ha implementata e la possiamo trovare nel generatore delle form.
Tuttavia se abilitiamo i commenti notiamo che il template della form non è ancora provvisto di placeholder (forse devono finire di aggiornare tutti i template delle form front-end). Comunque possiamo farlo noi con dei template custom come spiego in questo articolo.
Commento di Andrea Bizioli
Mercoledì 03 Luglio 2013Ottimi consigli: quello dell'alias "index" per la home-page è una chicca tanto semplice quanto utile.
Aggiungi un commento