0

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

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

2 回答 2

3

尽管 David 的回答是 100% 正确的,但我想澄清一下模板覆盖和与您的模块一起打包的多个布局文件之间的区别。最后,他们都完成了同样的事情。这仅取决于您是否想要/需要完全封装在模块中的替代布局。

无论如何,您都需要像上面 David 解释的那样删除额外的目录。因此,您的 tmpl 目录中将同时包含 default.php 和 arz.php 文件。

第二件事是更改模块入口点中的代码以捕获“主题”参数并在呈现布局时使用它:

require JModuleHelper::getLayoutPath('mod_ab_art', $params->get('theme', 'default'));

您会注意到这与几乎所有执行同一行代码的核心模块相同,除了它拉取“布局”参数,这是特定模块的活动模板中的布局覆盖列表。

于 2014-02-28T01:35:57.373 回答
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)。

于 2014-02-28T00:17:17.553 回答