Visite: 2887

L'override del template è la tecnica che permette di modificare il modo con cui Joomla! presenta i dati. La tecnica è tanto semplice quanto potente, ciò implica che bisogna avere un certo grado di accortezza nella sua applicazione affinché non si perda la coerenza del paradigma MVC sul quale si basa Joomla!

L'obiettivo dell'esempio, che sfrutterò per esporre la tecnica dell'override del template, nasce da una esigenza manifestata all'interno della Community Porte Aperte sul Web. La necessità è quella di avere di fianco ad ogni circolare lo stato firmato o non firmato. Più in generale l'obiettivo è quello di modificare la modalità di presentazione degli articoli nella vista Articoli > Lista di singola categoria. Il template utilizzato è Accessible Template di Alessandro Pasotti. In questo template il file che dobbiamo modificare, /components/com_content/views/category/default_articles.php, è già soggetto di override, quindi già presente nella cartella html/com_content/category/

Salviamo il file default_articles.php, che ci servirà in un secondo momento, e passiamo alla sua modifica. Il template presenta i dati sotto forma di tabella, quindi sarà necessario inserire una nuova colonna. 

Di seguito il codice per inserire l'intestazione di colonna, che lasceremo vuota:

101:                <?php if ($this->params->get('list_show_hits',1)) : ?>
102:                <th scope="col" class="list-hits" id="tableOrdering4">
103:                    <?php echo JHtml::_('grid.sort', 'JGLOBAL_HITS', 'a.hits', $listDirn, $listOrder); ?>
104:                </th>
105:                <?php endif; ?>
106:
107:                <th></th>
108:            </tr>
109:        </thead>
110:        <?php endif; ?>

I dati relativi allo stato della firma saranno inseriti con il seguente codice:

180:                    </td>
181:                <?php endif; ?>
182:
183:                    <td>
184:                    <?php
185:                        if (!isset($article->asset_id))
186:                        {
187:                            $a = JTable::getInstance('Content');
188:                            $a->load($article->id);
189:                            $article->asset_id = $a->asset_id;
190:                        }
191:
192:                        $buttons = array();
193:                        foreach(ButtonsHelper::getToolbars($article, 'both') as $article->catid)
194:                        {
195:                            $toolbar = JTable::getInstance('Category');
196:                            $toolbar->load($article->catid);
197:                            $tparams = new JRegistry;
198:                            $tparams->loadString($toolbar->params);
199:                            $cparams = clone($article->params);
200:                            $cparams->merge($tparams);
201:                            $buttons[] = ButtonsHelper::getToolbar($article->catid, $article->asset_id, JFactory::getUser()->id, false, 'text');
202:                        }
203:                        echo implode (', ', array_filter($buttons));
204:                     ?>
205:                    </td>
206:                </tr>
207:        <?php endforeach; ?>
208:        </tbody>

Qualora si voglia una rappresentazione grafica si dovranno sostuire le seguenti righe

201:                            $buttons[] = ButtonsHelper::getToolbar($article->catid, $article->asset_id, JFactory::getUser()->id, false, 'buttons');
202:                        }
203:                        echo implode (' ', array_filter($buttons));
Torna su