Quando creiamo una nuova voce di menu (menu item) di tipo Categoria blog in Joomla, ci accorgiamo come non sia possibile impostare un layout alternativo per il singolo articolo collegato a quel menu (a differenza di quanto avviene nell'ambito dei moduli).
Per cambiare il layout di una pagina generata da una voce di menu, infatti, bisogna creare un tipo di menu item alternativo. Questa possibilità risolve però solo l'esigenza di avere un'impaginazione differente in caso di articolo collegato direttamente al menu (tipo Singolo articolo), ma non nel caso in cui si voglia creare una voce di menu di tipo Categoria blog. In tal caso, il menu item alternativo sarà specifico della visualizzazione blog, mentre non avremo opzioni per intervenire sulla visualizzazione del singolo articolo (articolo esteso).
Ecco allora come risolvere l'esigenza di cambiare il layout del singolo articolo in base alla voce di menu di appartenenza (considerando l'alias del menu):
- eseguire l'override dell'impaginazione di default del singolo articolo, creando il seguente file php all'interno del template in uso:
templates/<template>/html/com_content/article/default.php; - in tale default.php, incollare e modificare (in base all'alias del menu da personalizzare e al nome del layout alternativo) il seguente codice PHP:
<?php
defined('_JEXEC') or die;
// Single article page Layout Switcher
$app = JFactory::getApplication();
$menu = $app->getMenu();
$option = JRequest::getCmd('option');
$view = JRequest::getCmd('view');
$Itemid = JRequest::getString('Itemid'); // menu id
if (empty($Itemid))
{
$menuItem = $menu->getActive();
$menuItemGiven = false;
}
else
{
$menuItem = $menu->getItem($Itemid);
$menuItemGiven = true;
}
if ($option == 'com_content' && $view == 'article' && $menuItem->alias == 'alias-da-personalizzare')
{
include JPATH_SITE.'/templates/'.$app->getTemplate().'/html/com_content/article/personalizzato.php';
}
else // DEFAULT FULL ARTICLE
{
include JPATH_SITE.'/components/com_content/views/article/tmpl/default.php';
}
?>
Una breve spiegazione... Nel codice di esempio, se l'alias del menu corrisponde alla stringa 'alias-da-personalizzare'
utilizzeremo il layout personalizzato.php, altrimenti, utilizzeremo il layout standard di Joomla tramite l'inclusione del relativo file PHP originale.