web-dev-qa-db-fra.com

Forcer l'affichage du module Joomla dans des modifications spécifiques de la présentation

J'ai un menu déroulant comme navigation principale de mon site Web et je veux créer un menu offcanvas affichant les mêmes éléments de menu que les éléments de menu déroulants, à des fins de conception adaptative.

Comme les éléments du menu déroulant ont différentes classes CSS, j'ai créé un modèle remplaçant pour mod_menu appelé "offcanvas".

Ma question est la suivante: est-il possible de forcer le remplacement de "offcanvas" sur le module afin que, lorsque le module appelle dans la position offcanvas, il utilise mon remplacement "offcanvas"?.

Je cherche quelque chose comme ça

<jdoc:include type="modules" name="menuposition" layout="offcanvas"/>

Merci

2
webchun

Plus d'informations sur le remplacement de la présentation: https://docs.joomla.org/How_to_override_the_output_from_the_Joomla!_core

Si vous souhaitez modifier l'affichage du module mod_menu, vous devez copier:

PATH_TO_JOOMLA/modules/mod_menu/tmpl/default.php
to
TEMPLATE_NAME/html/mod_menu/default.php

et modifiez le fichier dans votre modèle

Vous pouvez également utiliser le modèle de gestion pour créer des remplacements https://docs.joomla.org/J3.x:How_to_use_the_Template_Manager/en#Creating_Overrides

Vous n'êtes pas obligé de modifier le style dans votre jdoc: include

<jdoc:include type="modules" name="menuposition" style="xhtml" />

Plus d'infos sur un style https://docs.joomla.org/Customising_the_way_modules_are_displayed

Pour définir une sortie personnalisée telle que "offcanvas", vous devez modifier ce fichier dans votre modèle PATH_TO_JOOMLA/templates/TEMPLATE_NAME/html/modules.php.

Voici un exemple de sortie personnalisée. Important, le nom de la fonction doit être modChrome_offcanvas

function modChrome_offcanvas($module, &$params, &$attribs)
{
    if ($module->content)
    {
        echo "<div class=\"module mod" . $module->id . " " . htmlspecialchars($params->get('moduleclass_sfx')) . "\">";
        if ($module->showtitle)
        {
            echo "<h3 class=\"module-header\">" . $module->title . "</h3>";
        }
        echo $module->content;    
        echo "</div>";
    }
}

Il définit ce qui est inséré avant, après ou autour de la sortie d'un module.

2

Ceci n’a pas été testé, mais je pense que quelque chose comme cela le ferait:

<?php
// Find modules by position name
$offcanvasModules  = JModuleHelper::getModules('menuposition');

// Pass module render options
$moduleOptions = array('layout' => 'offcanvas');
?>

<?php foreach ($offcanvasModules as $module) :
    echo JModuleHelper::renderModule($module, $moduleOptions);
endforeach; ?>

Personnellement, je pense que je définirais simplement la mise en page dans les paramètres du module, ce serait plus rapide :)

1
Seth Warburton