在我的自定义模块中,我的主题结构如下:
/modules/mod_ab_art/tmpl/default/default.php
/modules/mod_ab_art/tmpl/arz/default.php
我可以选择让用户从管理部分选择一个主题,如下所示:
<field
name="theme"
type="list"
default="default"
label="MOD_AB_ART_THEME_LABEL"
description="MOD_AB_ART_THEME_DESC">
<option value="default">MOD_AB_ART_THEME_DEFAULT</option>
<option value="arz">MOD_AB_ART_FIELD_ARZ</option>
</field>
我还有一个替代布局选项,如下所示,但这不会在下拉列表中显示任何内容。我认为这应该在下拉列表中显示Default
。是因为tmpl
目录中的主题子目录吗?替代布局是否仅适用于单个主题?
<field name="altlayout"
type="modulelayout"
label="JFIELD_ALT_LAYOUT_LABEL"
description="JFIELD_ALT_MODULE_LAYOUT_DESC" />
答案 0 :(得分:3)
尽管David的回答是100%正确的,但我想澄清模板覆盖与模块打包的多个布局文件之间的区别。最后,他们都完成了同样的事情。这取决于您是否需要/需要完全封装在模块中的备用布局。
无论如何,您需要删除额外的目录,就像David上面解释的那样。所以你的tmpl目录中将包含default.php和arz.php文件。
第二件事是改变模块入口点中的代码以捕获'theme'参数并在渲染布局时使用它:
require JModuleHelper::getLayoutPath('mod_ab_art', $params->get('theme', 'default'));
您会注意到这几乎与同一行代码的所有核心模块执行完全相同,除了它拉出'layout'参数,该参数是特定模块的活动模板中的布局覆盖列表。 / p>
答案 1 :(得分:2)
Joomla不希望tmpl
下的文件夹用于模块。它只希望完整的布局是一个文件,每个文件都被命名为一个不同的名称来表示布局。所以你可能最好有这样的布局文件:
/modules/mod_ab_art/tmpl/default.php
/modules/mod_ab_art/tmpl/arz.php
您可以在tmpl
文件夹中包含尽可能多的不同文件,甚至包含主题中的不同文件(通常位于templates/*template_name*/html/mod_ab_art/override.php
)。