web-dev-qa-db-ja.com

Joomlaモジュールを特定のレイアウトオーバーライドで強制的に表示する

私のウェブサイトのメインナビゲーションとしてドロップダウンメニューがあり、レスポンシブデザインの目的で、ドロップダウンメニュー項目と同じメニュー項目を表示するオフキャンバスメニューを作成したいと考えています。

ドロップダウンメニュー項目には異なるcssクラスがあるため、「offcanvas」というmod_menuをオーバーライドするテンプレートを作成しました。

私の質問は、「offcanvas」オーバーライドをモジュールに強制することができるので、モジュールがoffcanvas位置で呼び出されたときに、「offcanvas」オーバーライドを使用します。

このようなものを探しています

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

ありがとう

2
webchun

レイアウトの上書きに関する詳細情報: 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でstyleを変更する必要はありません

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

スタイルに関する詳細情報https://docs.joomla.org/Customising_the_way_modules_are_displayed

「offcanvas」のようなカスタム出力を定義するには、テンプレートPATH_TO_JOOMLA/templates/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>";
    }
}

これは、モジュールの出力の前、後、または周囲に挿入されるものを定義します。

これはテストされていませんが、私はこのようなものがそれを行うと思います:

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

個人的にはモジュール設定でレイアウトを設定するだけだと思いますが、それは速くなります:)

1
Seth Warburton