私のウェブサイトのメインナビゲーションとしてドロップダウンメニューがあり、レスポンシブデザインの目的で、ドロップダウンメニュー項目と同じメニュー項目を表示するオフキャンバスメニューを作成したいと考えています。
ドロップダウンメニュー項目には異なるcssクラスがあるため、「offcanvas」というmod_menuをオーバーライドするテンプレートを作成しました。
私の質問は、「offcanvas」オーバーライドをモジュールに強制することができるので、モジュールがoffcanvas位置で呼び出されたときに、「offcanvas」オーバーライドを使用します。
このようなものを探しています
<jdoc:include type="modules" name="menuposition" layout="offcanvas"/>
ありがとう
レイアウトの上書きに関する詳細情報: 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; ?>
個人的にはモジュール設定でレイアウトを設定するだけだと思いますが、それは速くなります:)