【问题标题】:Joomla module development: How to use template and alternative layouts?Joomla 模块开发:如何使用模板和替代布局?
【发布时间】:2014-03-31 16:01:09
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

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

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

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

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

    【讨论】:

      【解决方案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)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2014-07-14
        • 1970-01-01
        • 1970-01-01
        • 2011-03-03
        • 1970-01-01
        • 2011-08-04
        • 2011-07-12
        相关资源
        最近更新 更多