Joomla模块开发:如何使用模板和替代布局?

时间:2014-02-27 22:20:22

标签: joomla joomla2.5 joomla-extensions joomla3.0 joomla-module

在我的自定义模块中,我的主题结构如下:

/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" />

2 个答案:

答案 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)。