Принуждение модуля Joomla для отображения в определенном макете

У меня есть раскрывающееся меню в качестве основной навигации по моему веб-сайту, и я хочу создать меню offcanvas, отображающее те же элементы меню, что и выпадающие меню, для гибкого дизайна.

Поскольку выпадающие меню имеют разные классы css, я создал шаблон, переопределяющий mod_menu, называемый «offcanvas».

Мой вопрос в том, можно ли принудительно отключить переопределение «offcanvas» в модуле, поэтому, когда модуль вызывает в offcanvas possipt, он будет использовать переопределение «offcanvas».

Я ищу что-то вроде этого

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

Спасибо

2 голоса | спросил webchun 26 J0000006Europe/Moscow 2015, 07:47:46

3 ответа


1

Дополнительная информация о переопределении макета: https://docs.joomla.org/How_to_override_the_output_from_the_Joomla!_core

Если вы хотите изменить способ отображения модуля mod_menu, вы должны скопировать:

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

и измените файл в шаблоне

Вы также можете использовать Управление шаблонами для создания переопределений https: //docs. joomla.org/J3.x:How_to_use_the_Template_Manager/en#Creating_Overrides

Вам не нужно модифицировать стиль в jdoc: include

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

Дополнительная информация о стиле https://docs.joomla.org/Customising_the_way_modules_are_displayed

Чтобы определить пользовательский вывод, например «offcanvas», вы должны изменить этот файл в своем шаблоне PATH_TO_JOOMLA /шаблоны /TEMPLATE_NAME /html /modules.php.

Вот пример пользовательского вывода. Важно, имя функции должно быть 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>";
    }
}

Определяет, который вставлен до, после или вокруг вывода модуля.

ответил Pierre-André Vullioud 26 J0000006Europe/Moscow 2015, 10:00:56
1

Это не проверено, но я думаю, что что-то вроде этого:

<?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; ?>

Хотя лично я думаю, что просто установил макет в настройках модуля, он будет быстрее :)

ответил Seth Warburton 26 J0000006Europe/Moscow 2015, 11:22:11
-1

Мне удалось найти решение, вот код:

<?php
      jimport( 'joomla.application.module.helper' );
      $module = JModuleHelper::getModule( 'mod_menu' );
      $attribs = array('style' => 'raw');
      $module->params = "menutype=mainmenu\nlayout=offcanvas\nshowAllChildren=1";
      echo JModuleHelper::renderModule($module, $attribs);
    ?>
ответил webchun 26 J0000006Europe/Moscow 2015, 12:41:39

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132