Override joomla du template 'category' lié à un menu

11431 vues
05 novembre 2014
Cyril
joomla-templates

 

Dans nos formations sur le templating Joomla! nous abordons naturellement des exemples comme overrider le template Joomla de liste blog de ma catégorie 'actualité', qui est appelée par mon menu principal (en cliquant sur l'onglet 'actualités')

Quiet comme un moine, je me rend à la gestion des catégories dans mon back office, j'édite la catégorie 'actualités', je set l'option  Alternative Layout du nom de mon template overridé et je raffraichis ma page... stupeur ! rien ne se passe ! après moult insultes et imprécations, je check dans le code, et ho surprise ! je vois ceci :
 view.html.php de components/com_content/views/category

// Check for layout override only if this is not the active menu item
        // If it is the active menu item, then the view and category id will match
        $active    = $app->getMenu()->getActive();
        if ((!$active) || ((strpos($active->link, 'view=category') === false) || (strpos($active->link, '&id=' . (string) $category->id) === false))) {
            // Get the layout from the merged category params
            if ($layout = $category->params->get('category_layout')) {
                $this->setLayout($layout);
            }
        }
        // At this point, we are in a menu item, so we don't override the layout
        elseif (isset($active->query['layout'])) {
            // We need to set the layout from the query in case this is an alternative menu item (with an alternative layout)
            $this->setLayout($active->query['layout']);
        }

Peste et fichtre ! Il ne va chercher l'override de la catégorie que s'il n'est pas lié à un lien de menu !!!

Ma catégorie n'est pas overridable aussi facilement, car on y accède via un lien de menu direct... ce qui est tout de même assez balo, because que ce fonctionnement oblige de rajouter des fichiers dans le com_content/views/category/tmpl, donc n'est plus 100% full override (il aurait été mieux de ne devoir toucher qu'aux fichiers de situés dans le dossier template)

Alors en fait, pour surcharger un layout d'un lien de menu :

il faut :

1-aller dans administrator/language/fr-FR/fr-FR.com_content.sys.ini et rajouter le type de lien

COM_CONTENT_CATEGORY_VIEW_BLOG_TITLE_ACTUALITE="Blog d'une catégorie (actualite)"

_______________________________________________________________________________
2-aller dans components/com_content/views/category/tmpl/ rajouter ton template modele-actualite-liste.php ET son fichier XML modele-actualite-liste.xml (copié sur blog.xml)
Remplacer la variable layout du fichier XML par

       layout title="COM_CONTENT_CATEGORY_VIEW_BLOG_TITLE_ACTUALITE" option="COM_CONTENT_CATEGORY_VIEW_BLOG_OPTION">
       help  key = "JHELP_MENUS_MENU_ITEM_ARTICLE_CATEGORY_BLOG"
________________________________________________________________________________
3-définir dans administrator/language/fr-FR/fr-FR.ini la variable suivante :

JHELP_MENUS_MENU_ITEM_ARTICLE_CATEGORY_BLOG_ACTUALITE="Menus_Menu_Item_Article_Category_Modele-actualite-liste" (qui est le chemin du template)
_______________________________________________________________________________
4-mettre les deux layouts modele-actualite-liste.php et modele-actualite-liste_item.php dans le template : templates/yoo_avenue(ou tout autre)/html/com_content/category
_________________________________________________________________________________
et enfin

5-Assigner ce type de lien à son menu 'actualites'
_________________________________________________________________________________
et gnoila !

N'oubliez pas de me suivre sur mon compte google +

https://plus.google.com/u/0/111173509958661808617