Ciao, rieccomi di nuovo qui su Joomla.it, per parlarti dell'override in maniera più approfondita! Si, è passato un bel pò di tempo dal mio ultimo articolo, mea culpa! Oggi, per farmi perdonare, ti voglio parlare di un bel malloppo di file per gestire le Categorie; è vero , nel precedente articolo parlavo di categorie, ma era limitato alla sola lista delle stesse. Invece, qui tratteremo gli articoli presenti, le sottocategorie, paginazione etc: pronto a spulciare il codice, riga per riga? Ci vediamo al traguardo!!!
Funziona su
In Joomla è possibile visualizzare l'elenco degli articoli appartenenti ad una categoria, in due modalità:
- Blog
Molto comoda per la stragrande maggior parte dei casi, dove bisogna mediare tra numero di articoli linkati per pagina, ed una loro descrizione. Personalmente ritengo uno stile standard, adatto a qualsiasi tipo di situazione. Ovviamente è solo un mio parere! - Lista
In caso vuoi mostrare un semplice elenco di articoli, con poche informazioni e renderli ordinabili secondo alcuni canoni.Utilissimo per la sezione archivi, oppure per presentare un elenco ordinato di lezioni del vostro hobby preferito.
Aree tematiche
Per entrambe le metodologie i file non sono pochi, pertanto questo articolo risulterà "parecchio" lungo; non disperare: qui sotto ti riporto un piccolo elenco di link, per raggiungere velocemente le aree di tuo interesse:
- Di cosa stiamo parlando?
- Si, ma io cosa vedo?
- Quale cartella devo considerare e dove devo copiarla?
- Chi sono e cosa fanno questi file?
- Blog
- Elenco File
- Suddivisione schematica dell'output Blog
- blog.php
- Le prime 14 righe
- Div blog e intestazione (heading)
- Titolo categoria e sottointestazione
- Dettagli categoria
- Articoli principali
- Articoli introduttivi
- Link introduttivi
- Sottocategorie
- blog_items.php
- Le prime 20 righe
- Unpublished e titolo articolo
- Icone
- Dopo il titolo e prima dell'articolo
- Dettagli articolo
- Immagine e testo introduttivo
- Link leggi tutto
- Ultime righe
- blog_links.php
- blog_children.php
1. Di cosa stiamo parlando?
Joomla gestisce molti contenuti, tra cui gli articoli: per una organizzazione ottimale, dalla 1.6 l'accoppiata "sezioni-categorie" è stata soppiantata dalla possibilità di strutturare categorie su categorie, senza limite; ovvero si è passati da una struttura di due livelli di profondità, ad enne (in teoria infiniti). Aperta parentesi: se ti sei perso i cambiamenti dalla 1.5 alla 1.6, eccoti un bell'articolo scritto da frascan "Che cosa bisogna sapere su Joomla 1.6 Parte 2: le categorie". Per tua cultura, sarebbe il caso di dargli una letta, giusto per comprendere meglio questo retaggio, partito dalla 1.6 e mantenuto sia nella 1.7 che nella 2.5 (1.8), chiusa parentesi.
Quindi, vien da sè comprendere l'importanza di una buona impostazione grafica, per visualizzare al meglio i contenuti delle categorie, visualizzando correttamente gli articoli con le relative informazioni di pubblicazione, voto, autore, e tutto ciò che si vuole visualizzare!
Torna al menu
1.1. Si, ma io cosa vedo?
Le due disposizioni sono nettamente diverse: se per Blog abbiamo un approccio più "esplorativo", per Lista dobbiamo giocoforza (sicuro?) cliccare sul titolo dell'articolo, per visualizzarne il contenuto; se il primo permette la visualizzazione "limitata" a pochi articoli alla volta, con il secondo possiamo visualizzarne anche 200 senza troppo sforzo. Ad ogni parte del vostro portale, scegliete una di queste due!
Attenzione: il motore di ricerca ha una sua "pagina" dedicata, pertanto non lasciarti ingannare dalla ricerca per filtro di Lista.
Torna al menu
Blog | Lista |
Clicca sulle immagini per ingrandirle | |
1.2. Quali sono i file che devo considerare?
Consideriamo con root (radice), la cartella in cui avete installato/estratto Joomla.
Visto il numero dei file da considerare, voliamo in:
root/components/com_content/views/category/tmpl
e copiamo tutto il contenuto in questa cartella, all'interno del template che stiamo elaborando
root/templates/mio_template/html/com_content/category
D'ora in avanti, facciamo riferimento solo a questi ultimi file: modificare direttamente il core, o qualunque altro file presentato dalla versione standard, è a nostro rischio e pericolo (venire sul forum e piagnucolare aiuto perchè hai modificato file intoccabili, è controproducente per la tua figura professionale e deludente per chi urla a lettere cubitali avvertimenti molto importanti).
Non tutti i file che hai copiato sono necessari: alcuni vanno rimossi (prosegui con il punto 1.2).
Torna al menu
1.3 Chi sono e cosa fanno questi file?
Nella nostra cartella root/templates/mio_template/html/com_content/category dobbiamo avere solo questi file presenti, tutti gli altri vanno eliminati:
- index.html
È il file visualizzato in caso di navigazioni "errate" (nocive o meno). - blog.php
Questo è il file da cui "parte tutto" per la visualizzazione in modalità Blog. Contiene una prima struttura di quello che verrà visualizzato al posto del tag content presente nel template. - blog_item.php
Grazie a questo file, visualizziamo gli articoli principali ed introduttivi, secondo le impostazioni del backend. - blog_links.php
Invocando questo file, gestiamo la visualizzazione delle categorie incluse nell'attuale. Attenzione, stiamo preparando solo la struttura, ovvero con blog_links.php scorriamo l'elenco di categorie da visualizzare e passiamo a blog_children.php il compito di visualizzarne il contenuto. - blog_children.php
Questo file visualizza il contenuto per ogni sottocategoria di quella attuale, mostrando titolo, descrizione ed altri piccoli parametri impostati da backend. - default.php
Grazie a default.php, puoi visualizzare i tuoi articoli con una lista, in cui ne visualiziamo alcune e informazioni. - default_articles.php
Visualizziamo la tabella con i nostri articoli, pronti per essere cliccati. - default_children.php
Stampiamo le sottocategorie, presenti in quella corrente, visualizzandone titolo, descrizione ed altro, secondo i parametri impostati nel backend.
2 Blog
2.1 Elenco File Blog
Per gestire la visualizzazione "Blog", dobbiamo lavorare su 4 file: blog.php, blog_item.php,blog_links.php e blog_children.php.
Torna al menu
2.2 Suddivisione schematica dell'output Blog
Per sapere cosa modificare, bisogna vedere quale tipo di output abbiamo. Essenzialmente, una categoria visualizzata in modalità "Blog", è schematizzabile in 6 punti chiave:
- Intestazione
Presenteremo qui le informazioni relative alla categoria, come la sua descrizione, immagine e tutto ciò che vogliamo visualizzare. - Articoli Principali
Sono gli articoli di particolare interesse, quindi meritano un occhio di riguardo. Conviene dedicarvi una struttura apposita, cosi il lettore del vostro portale associerà ad un certo layout, le ultime notizie disponibili. - Articoli Introduttivi
Meno recenti, meno freschi ma comunque sufficientemente interessanti da meritare una visualizzazione, ridotta e con un layout più di massa che di riguardo. - Link Introduttivi
Qualunque cosa che non meriti di stare in prima pagina con una descrizione, ma abbastanza da meritarsi un "briciolo" di riferimento. - Sottocategorie
Indichiamo qui le sottocategorie contenute in quella attuale. - Paginazione
Altre pagine, strutturate nello stesso modo, ma ovviamente con articoli diversi.
2.3 blog.php
Questo è il primo file, funziona da crocevia per gli altri 3 dedicati alla visualizzazione degli articoli, in modalità blog.
Torna al menu
2.3.1 Le prime 14 righe
Come sempre, le prime 14 righe indicano tutte le informazioni relative al file ed alle sue finalità;
<?php /** * @package Joomla.Site * @subpackage com_content * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // no direct access defined('_JEXEC') or die; JHtml::addIncludePath(JPATH_COMPONENT.'/helpers'); ?>Torna al menu
2.3.2 Div Blog e intestazione (heading)
Apriamo il div e verifichiamo i parametri relativi all'intestazione, se fornita alla pagina (settabile nel menù, alla voce «Opzioni visualizzazione pagina/Intestazione pagina» e settare su Si «Mostra intestazione pagina») . Molto utile per dare un tocco unico alla pagina, in quanto page_heading dipende dal menù.
<?php if ($this->params->get('show_page_heading')) : ?> <h1> <?php echo $this->escape($this->params->get('page_heading')); ?> </h1> <?php endif; ?>Torna al menu
2.3.3 Titolo Categoria e sottointestazione
Visualizziamo il nome della categoria, anticipato da un eventuale sottotitolo aggiuntivo (le sue impostazioni sono presenti nella categoria, alla voce «Opzioni categoria/Sottotitolo Pagina»). page_subheading, indica la parte impostata nella categoria, mentre title visualizza il titolo della categoria. L'if iniziale, verifica che sia stata impostata la visualizzazione della sottointestazione (subheading), mentre il secondo if verifica se la page_subheading debba o meno essere visualizzata.
<?php if ($this->params->get('show_category_title', 1) or $this->params->get('page_subheading')) : ?> <h2> <?php echo $this->escape($this->params->get('page_subheading')); ?> <?php if ($this->params->get('show_category_title')) : ?> <span class="subheading-category"><?php echo $this->category->title;?></span> <?php endif; ?> </h2> <?php endif; ?>Con una buona modifica, si potrebbe indicare il nome della categoria, seguita da un chiarimento: quest'ultimo è legato alla categoria e non al menù.
Torna al menu
2.3.4 Dettagli categoria
Finalmente parliamo dei dettagli dell'attuale categoria; ovviamente, il primo if controlla se possiamo visualizzare la descrizione o almeno l'immagine assegnata alla categoria. Il secondo if verifica che effettivamente ci sia l'immagine e la sua descrizione; in caso contrario, usciamo dal secondo if e procederemo con il secondo. Altrimenti, verrà visualizzata l'immagine.
Subito dopo il primo endif, troviamo un terzo if dove verifichiamo se è presente una descrizione della categoria e se abbiamo abilitato la sua visualizzazione. In caso positivo ad entrambi, visualizzeremo la descrizione della categoria, altrimenti no.
Quindi, possiamo visualizzare l'immagine con la descrizione, una delle due oppure nessuna di queste.
<?php if ($this->params->get('show_description', 1) || $this->params->def('show_description_image', 1)) : ?> <div class="category-desc"> <?php if ($this->params->get('show_description_image') && $this->category->getParams()->get('image')) : ?> <img src="<?php echo $this->category->getParams()->get('image'); ?>"/> <?php endif; ?> <?php if ($this->params->get('show_description') && $this->category->description) : ?> <?php echo JHtml::_('content.prepare', $this->category->description, '', 'com_content.category'); ?> <?php endif; ?> <div class="clr"></div> </div> <?php endif; ?>Torna al menu
2.3.5 Articoli principali
Bene, siamo arrivati ad una prima visualizzazione degli articoli (yeah, che bello!); leadingcount è un contatore, utilizzato per idnicare ogni articolo con una propria classe personalizzata. Infatti avremo class-0,class-1,class-2 e via dicendo.
Il primo if verifica, ovviamente, se esistono articoli da stampare come "articoli principali". Per la categoria i settaggi si trovano nel pannello «Opzioni blog/Articoli Principali» indicando il numero di articoli da visualizzare. Oppure, nel medesimo pannello, ma nelle impostazioni generali.
Grazie al foreach, visualizziamo ogni articolo per mezzo dell'oggetto item e subito verifichiamo che questi non abbia particolarità per la classe. Infatti con item->state verifichiamo se è necessario inserire la classe system-unpublished; cosi facendo indichiamo l'articolo come "non pubblicato".
Cosa è item? Semplice, viene chiamato il file blog_item.php e questi si prende la responsabilità di visualizzare i contenuti dell'articolo (visualizzati nella pagina). Quindi, tutti i dettagli relativi alla data articolo, autore, descrizione, etc... vengono elaborati in blog_item.php.
<?php $leadingcount=0 ; ?> <?php if (!empty($this->lead_items)) : ?> <div class="items-leading"> <?php foreach ($this->lead_items as &$item) : ?> <div class="leading-<?php echo $leadingcount; ?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?>"> <?php $this->item = &$item; echo $this->loadTemplate('item'); ?> </div> <?php $leadingcount++; ?> <?php endforeach; ?> </div> <?php endif; ?>Torna al menu
2.3.6 Articoli Introduttivi
Ovviamente, questa parte di codice è dedicata all'incolonnamento degli articoli, secondo i settaggi impostati in nel menu all'interno del pannello Opzioni blog. Come funzionano i calcoli? Ti mostro un semplice esempio, che puoi verificare tranquillamente usando i dati d'esempio di una qualunque installazione di Joomla. Guarda questa tabella: è divisa in due parti
Variabili | Due colonne | Tre colonne | |||||||||||||||||||||||||||||||||||||||||||||||||||||||
|
|
|
Cosa vuol dire? Semplicemente, $rowcount indica la posizione dell'articolo all'interno della riga, $row, considerato solo in valori interi e non decimali, indica la riga. Quindi, per il 5 articolo a Tre Colonne, sarà posto nella seconda riga (valore 1), posizionato come secondo articolo dei tre. Semplice, vero?
Quindi, una volta aver controllato che vi siano articoli da visualizzare, per ogni $item, viene impostata la sua posizione all'interno della riga. Tutto questo, permette di impostare a backend dinamicamente, il numero delle colonne; per un template da distrubuire, mantenere inalterati questi piccoli script, sono un punto di forza. Altrimenti, se state lavorando per un template dedicato che evolverà lentamente (una volta installato, le modifiche hanno frequenza trimestrale), beh allora questo script potrebbe anche non interessarti. Come si suol dire, fai tu: la scelta spetta a te!
<?php $introcount=(count($this->intro_items)); $counter=0; ?> <?php if (!empty($this->intro_items)) : ?> <?php foreach ($this->intro_items as $key => &$item) : ?> <?php $key= ($key-$leadingcount)+1; $rowcount=( ((int)$key-1) % (int) $this->columns) +1; $row = $counter / $this->columns ; if ($rowcount==1) : ?> <div class="items-row cols-<?php echo (int) $this->columns;?> <?php echo 'row-'.$row ; ?>"> <?php endif; ?> <div class="item column-<?php echo $rowcount;?><?php echo $item->state == 0 ? ' system-unpublished' : null; ?>"> <?php $this->item = &$item; echo $this->loadTemplate('item'); ?> </div> <?php $counter++; ?> <?php if (($rowcount == $this->columns) or ($counter ==$introcount)): ?> <span class="row-separator"></span> </div> <?php endif; ?> <?php endforeach; ?> <?php endif; ?>Torna al menu
2.3.7 Link Introduttivi
Molto semplice, si verifica l'effettiva esistenza di qualcosa da visualizzare, ed in caso affermativo, et voilà si passa tutto al file blog_links.php.
<?php if (!empty($this->link_items)) : ?> <?php echo $this->loadTemplate('links'); ?> <?php endif; ?>Torna al menu
2.3.8 Sottocategorie
Il primo if verifica due parametri: il primo verifica che non ci siano categorie figlie, mentre il secondo identifica il livello di profondità della nostra categoria. Con questi due valori possiamo determinare con precisione se c'è qualcosa da visualizzare o meno.
Con il tag h3 visualizziamo il messaggio Sottocategorie, a seconda della lingua impostata. Il grosso della visualizzazione viene passato al file blog_children.php
<?php if (!empty($this->children[$this->category->id])&& $this->maxLevel != 0) : ?> <div class="cat-children"> <h3> <?php echo JTEXT::_('JGLOBAL_SUBCATEGORIES'); ?> </h3> <?php echo $this->loadTemplate('children'); ?> </div> <?php endif; ?>{geshi}<a href="#SubMenuTop">Torna al menu</a></p> <h5>2.3.9 Paginazione</h5> <p>Il primo if verifica che ci siano ancora articoli da visualizzare: pertanto pages.total indica il numero di pagine da visualizzare ( num pagine>1, in quanto la 1° è considerata pagina 1); inoltre show_pagination, verifica le impostazioni fornite nel backend.</p> <p>Nel tag paragrafo di classe counter, viene visualizzato il messaggio Pagina 1 di 2. Mentre i link alle altre pagine, viene gestito da getPagesLinks().<pre xml:php><?php if (($this->params->def('show_pagination', 1) == 1 || ($this->params->get('show_pagination') == 2)) && ($this->pagination->get('pages.total') > 1)) : ?> <div class="pagination"> <?php if ($this->params->def('show_pagination_results', 1)) : ?> <p class="counter"> <?php echo $this->pagination->getPagesCounter(); ?> </p> <?php endif; ?> <?php echo $this->pagination->getPagesLinks(); ?> </div> <?php endif; ?> </div>L'ultimo tag, riguarda la chiusura del div aperto nelle prime 14 righe.
Torna al menu
2.4 blog_item.php
Con questo file, gestiamo l'anteprima degli articoli visualizzati in categoria.
Torna al menu
2.4.1 Le prime 20 righe
Per ogni articolo, vengono preparate tre variabili:
- $params
Tutti i parametri che riguardano i dettagli dell'articolo, chi possa visualizzarlo ed alcuni riguardanti la categoria stessa in cui è contenuto. Grazie a questa variabile, viene gestita la lettura dell'articolo. - $images
Ogni articolo dispone di Immagini e link, gestiti interamente con questa variabile. Tali informazioni sono editabili durante la stesura dell'articolo stesso, nel pannello Immagini e link. - $canEdit
Questa variabile svolge unicamente un solo compito: verifica se siamo degli utenti con poteri di scrittura sull'articolo. Compito molto delicato, fai attenzione alle modifiche che vuoi apportare riguardanti questa funzionalità.
Questo è quanto scritto nel codice
<?php /** * @package Joomla.Site * @subpackage com_content * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // no direct access defined('_JEXEC') or die; // Create a shortcut for params. $params = &$this->item->params; $images = json_decode($this->item->images); $canEdit = $this->item->params->get('access-edit'); JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html'); JHtml::_('behavior.tooltip'); JHtml::_('behavior.framework'); ?>Torna al menu
2.4.2 Unpublished e Titolo articolo
Può capitare che da frontend, vi siano articoli ultimati, ma non ancora pubblicati: questi vengono posti in stato 0 (Sospeso), pertanto dichiarati come unpublished, non pubblicati. Il primo if fa proprio questo: valuta lo stato dell'articolo, rendendolo invisibile all'utente registrato, quello pubblico, l'autore che non è proprietario dell'articolo. Mentre chi è editore, publisher, vedrà l'articolo immerso nel div.
Il secondo if è molto più semplice: verifica l'impostazione per la visualizzazione del titolo dell'articolo; con il terzo if invece vengono verificati i parametri, ovvero se il titolo deve essere cliccabile e se l'utente possa o meno accedere a tale risorsa. Altrimenti, in qualunque altro caso viene visualizzato il titolo come semplice testo.
<?php if ($this->item->state == 0) : ?> <div class="system-unpublished"> <?php endif; ?> <?php if ($params->get('show_title')) : ?> <h2> <?php if ($params->get('link_titles') && $params->get('access-view')) : ?> <a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid)); ?>"> <?php echo $this->escape($this->item->title); ?></a> <?php else : ?> <?php echo $this->escape($this->item->title); ?> <?php endif; ?> </h2> <?php endif; ?>Torna al menu
2.4.3 Icone
Per ogni articolo vi sono 2 icone standard ed una terza "speciale". Le prime due sono per la stampa e l'email, mentre la terza è per editarlo (verificati i requisiti dell'utente, ovviamente). Il primo if verifica che almeno una di queste debba essere visualizzata; nel backend è possibile eliminare questa opzione, per tutte e tre le icone in due punti diversi: «Menù Categoria/Opzioni Visualizzazione» oppure «Modifica Articolo/OpzioniVisualizzazione» alle voci «Icone, Icone Stampa, Icona Email».
<?php if ($params->get('show_print_icon') || $params->get('show_email_icon') || $canEdit) : ?> <ul class="actions"> <?php if ($params->get('show_print_icon')) : ?> <li class="print-icon"> <?php echo JHtml::_('icon.print_popup', $this->item, $params); ?> </li> <?php endif; ?> <?php if ($params->get('show_email_icon')) : ?> <li class="email-icon"> <?php echo JHtml::_('icon.email', $this->item, $params); ?> </li> <?php endif; ?> <?php if ($canEdit) : ?> <li class="edit-icon"> <?php echo JHtml::_('icon.edit', $this->item, $params); ?> </li> <?php endif; ?> </ul> <?php endif; ?>Torna al menu
2.4.4 Dopo il titolo e prima dell'articolo
Questi sono due punti di riferimento per i plugin: per esempio, i socialbutton vengono visualizzati qui. Quindi, valuta bene le modifiche che vuoi attuare, perchè puoi compromettere il funzionamento di alcuni plugin.
<?php if (!$params->get('show_intro')) : ?> <?php echo $this->item->event->afterDisplayTitle; ?> <?php endif; ?> <?php echo $this->item->event->beforeDisplayContent; ?>Torna al menu
2.4.5 Dettagli articolo
Quanto segue può sembrare un pò criptico, difficile da leggere ma la sua funzionalità è molto semplice. Il primo if, verifica che ci sia effettivamente qualcosa da visualizzare tra autore, categoria, categoria padre, visualizzazioni date di creazione, pubblicazione e modifica. La visualizzazione di queste informazioni, è editabile in «Menù Categoria/Opzioni Visualizzazione» oppure «Modifica Articolo/OpzioniVisualizzazione».
COM_CONTENT_ARTICLE_INFO visualizza la parola "Dettagli", a seconda della lingua scelta. In ordine riscontriamo diverse informazioni visualizzate dopo aver verificato le impostazioni da backend:
- parent_title /link_parent_category
Visualizzazione della categoria padre, di quella in cui è contenuto l'articolo. - category_title/link_category
Visualizzazione della categoria a cui appartiene l'articolo. - create_dat/modify_date/publish_date
Le tre tipologie di date associate all'articolo. Creazione, modifica e pubblicazione: scegliete voi cosa visualizzare nel template. - show_author/$this->item->author
Dettagli sull'autore, ma sopratutto se renderlo linkabile al suo profilo. Se sei realizzi Blog e vuoi usare Joomla, presta attenzione a questo dato e valuta bene come trattarlo; si sa, in blog con più autori, è sempre cruciale il trattamento di più profili, specialmente per l'inserimento dei dati. - show_hits
Visualizza quante volte è stato letto un articolo.
Per le date, ci sono dei formati un pò particolari: guarda quando ho parlato per modificare un articolo - Data tipo e formato.
<?php if (($params->get('show_author')) or ($params->get('show_category')) or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date')) or ($params->get('show_parent_category')) or ($params->get('show_hits'))) : ?> <dl class="article-info"> <dt class="article-info-term"><?php echo JText::_('COM_CONTENT_ARTICLE_INFO'); ?></dt> <?php endif; ?> <?php if ($params->get('show_parent_category') && $this->item->parent_id != 1) : ?> <dd class="parent-category-name"> <?php $title = $this->escape($this->item->parent_title); $url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->parent_id)) . '">' . $title . '</a>'; ?> <?php if ($params->get('link_parent_category')) : ?> <?php echo JText::sprintf('COM_CONTENT_PARENT', $url); ?> <?php else : ?> <?php echo JText::sprintf('COM_CONTENT_PARENT', $title); ?> <?php endif; ?> </dd> <?php endif; ?> <?php if ($params->get('show_category')) : ?> <dd class="category-name"> <?php $title = $this->escape($this->item->category_title); $url = '<a href="' . JRoute::_(ContentHelperRoute::getCategoryRoute($this->item->catid)) . '">' . $title . '</a>'; ?> <?php if ($params->get('link_category')) : ?> <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $url); ?> <?php else : ?> <?php echo JText::sprintf('COM_CONTENT_CATEGORY', $title); ?> <?php endif; ?> </dd> <?php endif; ?> <?php if ($params->get('show_create_date')) : ?> <dd class="create"> <?php echo JText::sprintf('COM_CONTENT_CREATED_DATE_ON', JHtml::_('date', $this->item->created, JText::_('DATE_FORMAT_LC2'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_modify_date')) : ?> <dd class="modified"> <?php echo JText::sprintf('COM_CONTENT_LAST_UPDATED', JHtml::_('date', $this->item->modified, JText::_('DATE_FORMAT_LC2'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_publish_date')) : ?> <dd class="published"> <?php echo JText::sprintf('COM_CONTENT_PUBLISHED_DATE_ON', JHtml::_('date', $this->item->publish_up, JText::_('DATE_FORMAT_LC2'))); ?> </dd> <?php endif; ?> <?php if ($params->get('show_author') && !empty($this->item->author )) : ?> <dd class="createdby"> <?php $author = $this->item->author; ?> <?php $author = ($this->item->created_by_alias ? $this->item->created_by_alias : $author);?> <?php if (!empty($this->item->contactid ) && $params->get('link_author') == true):?> <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY' , JHtml::_('link', JRoute::_('index.php?option=com_contact&view=contact&id='.$this->item->contactid), $author)); ?> <?php else :?> <?php echo JText::sprintf('COM_CONTENT_WRITTEN_BY', $author); ?> <?php endif; ?> </dd> <?php endif; ?> <?php if ($params->get('show_hits')) : ?> <dd class="hits"> <?php echo JText::sprintf('COM_CONTENT_ARTICLE_HITS', $this->item->hits); ?> </dd> <?php endif; ?> <?php if (($params->get('show_author')) or ($params->get('show_category')) or ($params->get('show_create_date')) or ($params->get('show_modify_date')) or ($params->get('show_publish_date')) or ($params->get('show_parent_category')) or ($params->get('show_hits'))) :?> </dl> <?php endif; ?>Torna al menu
2.4.6 Immagine e testo introduttivo
Personalmente penso che Joomla riveli il proprio potere in queste piccinerie (per qualcuno): con il codice riportato qui sotto, puoi visualizzare una immagine d'accompagnamento con didascalia (entrambi separati), visualizzati solamente durante la modalità "intro" dell'articolo. Una volta che l'articolo è visualizzato per intero, puoi sostituire l'immagine con un altra. Per me non è affatto poco, se pensi che puoi usare la stessa immagine, ma con risoluzioni diverse. In fin dei conti, è la stessa cosa che potresti fare con qualunque altro cms, ma joomla è uno di quei cms che compie tutto ciò senza plugin di sorta. Comodo, senza problemi di compatibilità.
Controlliamo se c'è l'immagine da visualizzare e se è stato scelto nel backend (nel pannello «Immagini e link/Immagini intro»), di visualizzare o meno. Rispettando le decisioni prese nel backend, dopo il primo if, si verifica se abbiamo impostato l'allineamento dell'immagine ed eventualmente viene visualizzata con tutti i parametri indicati.
Ultima riga, troviamo l'introduzione
<?php if (isset($images->image_intro) and !empty($images->image_intro)) : ?> <?php $imgfloat = (empty($images->float_intro)) ? $params->get('float_intro') : $images->float_intro; ?> <div class="img-intro-<?php echo htmlspecialchars($imgfloat); ?>"> <img <?php if ($images->image_intro_caption): echo 'class="caption"'.' title="' .htmlspecialchars($images->image_intro_caption) .'"'; endif; ?> src="<?php echo htmlspecialchars($images->image_intro); ?>" alt="<?php echo htmlspecialchars($images->image_intro_alt); ?>"/> </div> <?php endif; ?> <?php echo $this->item->introtext; ?>Torna al menu
2.4.7 Link leggi tutto
A fine introduzione dell'articolo, c'è la possibilità di visualizzare il link "leggi tutto" o "read more". Verificate le impostazioni con il primo if, con il secondo si determinata la capacità di visualizzare dell'utente; personalmente non trovo di grande utilità la modifica di questa parte dello script.
<?php if ($params->get('show_readmore') && $this->item->readmore) : if ($params->get('access-view')) : $link = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid)); else : $menu = JFactory::getApplication()->getMenu(); $active = $menu->getActive(); $itemId = $active->id; $link1 = JRoute::_('index.php?option=com_users&view=login&Itemid=' . $itemId); $returnURL = JRoute::_(ContentHelperRoute::getArticleRoute($this->item->slug, $this->item->catid)); $link = new JURI($link1); $link->setVar('return', base64_encode($returnURL)); endif; ?> <p class="readmore"> <a href="<?php echo $link; ?>"> <?php if (!$params->get('access-view')) : echo JText::_('COM_CONTENT_REGISTER_TO_READ_MORE'); elseif ($readmore = $this->item->alternative_readmore) : echo $readmore; if ($params->get('show_readmore_title', 0) != 0) : echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit')); endif; elseif ($params->get('show_readmore_title', 0) == 0) : echo JText::sprintf('COM_CONTENT_READ_MORE_TITLE'); else : echo JText::_('COM_CONTENT_READ_MORE'); echo JHtml::_('string.truncate', ($this->item->title), $params->get('readmore_limit')); endif; ?></a> </p> <?php endif; ?>Torna al menu
2.4.8 Ultime righe
L'if riguarda la chiusura del div aperto in 2.4.1; inveceafterDisplayContent è un ulteriore punto di riferimento, utilizzato dai plugin per lavorare sulla fine dell'articolo.
<?php if ($this->item->state == 0) : ?> </div> <?php endif; ?> <div class="item-separator"></div> <?php echo $this->item->event->afterDisplayContent; ?>Torna al menu
2.5 blog_links.php
Grazie a questo file possiamo visualizzare i linki agli altri articoli.
2.5.1 Le prime 16 righe e titolo
Codice molto semplice, definiamo un div ed all'interno visualizziamo il titolo Altri articoli nel tag h3.
<?php /** * @package Joomla.Site * @subpackage com_content * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // no direct access defined('_JEXEC') or die; ?> <div class="items-more"> <h3><?php echo JText::_('COM_CONTENT_MORE_ARTICLES'); ?></h3>Torna al menu
2.5.2 Elenco di tuti gli altri articoli
Per ogni item, vi è un link, con il titolo dell'articolo. Molto semplice!
<?php foreach ($this->link_items as &$item) : ?> <li> <a href="<?php echo JRoute::_(ContentHelperRoute::getArticleRoute($item->slug, $item->catid)); ?>"> <?php echo $item->title; ?></a> </li> <?php endforeach; ?> </ol> </div>Torna al menu
2.6 blog_children.php
Grazie a quest'ultimo file, visualizziamo le categorie figlie di quella attuale.
Torna al menu
2.6.1 Le prime 15 righe
Verifichiamo il numero di categorie figlie da visualizzare. Ovvero, solo quando è maggiore di 0. Quindi, apriamo l'elenco
<?php /** * @package Joomla.Site * @subpackage com_content * @copyright Copyright (C) 2005 - 2012 Open Source Matters, Inc. All rights reserved. * @license GNU General Public License version 2 or later; see LICENSE.txt */ // no direct access defined('_JEXEC') or die; $class = ' class="first"'; ?> <?php if (count($this->children[$this->category->id]) > 0) : ?> <ul>Torna al menu
2.6.2 Foreach e parametri
Controlliamo i parametri: la categoria ha delle sottocategorie? Inoltre, se vi sono categorie vuote, o categorie di categorie, etc, ed in aggiunta siamo alla fine delle categorie figlie, allora viene assegnata la classe last.
<?php foreach($this->children[$this->category->id] as $id => $child) : ?> <?php if ($this->params->get('show_empty_categories') || $child->numitems || count($child->getChildren())) : if (!isset($this->children[$this->category->id][$id + 1])) : $class = ' class="last"'; endif; ?>Torna al menu
2.6.3 Inizializzazione sottocategoria
Inilizzazione è un brutta parola, però rende l'idea: con questo script inizia l'impostazione della sottocategoria, con il suo titolo, renderlo linkabile e verificare o meno se visualizzare la descrizione.
<li<?php echo $class; ?>> <?php $class = ''; ?> <span class="item-title"><a href="<?php echo JRoute::_(ContentHelperRoute::getCategoryRoute($child->id));?>"> <?php echo $this->escape($child->title); ?></a> </span> <?php if ($this->params->get('show_subcat_desc') == 1) :?> <?php if ($child->description) : ?> <div class="category-desc"> <?php echo JHtml::_('content.prepare', $child->description, '', 'com_content.category'); ?> </div> <?php endif; ?> <?php endif; ?>Torna al menu
2.6.4 Numero articoli per ogni sottocategoria
Come da titolo, con questo script visualizziamo il numero di articoli per ogni categoria. Questo numero è preceduto da COM_CONTENT_NUM_INTEMS e corrisponde alla frase "Conteggio articoli :". Due punti compresi.
<?php if ( $this->params->get('show_cat_num_articles', 1)) : ?> <dl> <dt> <?php echo JText::_('COM_CONTENT_NUM_ITEMS') ; ?> </dt> <dd> <?php echo $child->getNumItems(true); ?> </dd> </dl> <?php endif ; ?>Torna al menu
2.6.5 Tutte le categorie figlie, di qualunque generazione
Per ricorsione, riusciamo a leggere tutte le sottocategorie, di qualunque livello di profondità/generazione siano. maxLevel serve per controllare che nulla possa influenzare la ricorsione. Ad ogni "giro" chiama in causa se stesso con loadTemple: simpatico, vero?
<?php if (count($child->getChildren()) > 0): $this->children[$child->id] = $child->getChildren(); $this->category = $child; $this->maxLevel--; if ($this->maxLevel != 0) : echo $this->loadTemplate('children'); endif; $this->category = $child->getParent(); $this->maxLevel++; endif; ?> </li> <?php endif; ?> <?php endforeach; ?> </ul> <?php endif;?>Torna al menu
Fine prima parte
Nel prossimo articolo ti parlerò della modalità Lista: spero che questo articolo ti sia piaciuto e possa tornarti utile!
Commenta questo articolo sul forum