【问题标题】:joomla add view into another viewjoomla 将视图添加到另一个视图中
【发布时间】:2012-02-22 12:42:59
【问题描述】:

我正在使用 joomla MVC,我想构建一个具有不同选项卡的表单,这些选项卡是表单的不同部分,其中包含输入。我需要包含一些其他表单共有的选项卡。

我希望能够从单独的文件或视图中加载这些常见的内容,这样我就没有重复的代码,而且当我需要更改表单时更容易,所以我不必在所有文件中都这样做形式。这就像在另一个视图中显示一个视图。

有没有办法做到这一点?

【问题讨论】:

    标签: model-view-controller view joomla joomla1.7


    【解决方案1】:

    Joomla!为视图提供loadTemplate 方法。

    因此,如果您当前位于为布局 edit 加载的 tmpl 文件中(即 tmpl/edit.php ),您可以调用 $this->loadTemplate('tab1'); 和 Joomla!将在与您的edit.php 相同的视图中加载tmpl/edit_tab1.php 文件。

    在同一个视图中,如果您想包含tmpl/other_tab1.php,则必须将布局临时设置为其他,例如。在 Run 模板期间我们的一个组件中,我们需要一个来自 Edit 模板的选项卡,因此我们使用:

    <?php $this->setLayout('edit'); // This is ugly
          echo $this->loadTemplate('plan');
          $this->setLayout('run'); ?>
    

    要从另一个视图一起加载模板,我认为您必须暂时覆盖view 值,加载模板然后恢复视图。例如。

    $jinput =  JFactory::getApplication()->input;
    $jinput->set('view', 'other');
    $this->loadTemplate('tab2');
    $jinput->set('view', 'original');
    

    注意:这最后一点我没有时间测试,但它应该可以工作。

    【讨论】:

    • 感谢 cppl,这就是我要找的答案!
    • 它适用于tmpl中的兄弟视图,但它不适用于不同的视图
    • 不要忘记 ECHO $this->loadTemplate
    【解决方案2】:

    您可以手动为不同的视图加载不同的模板文件,只需要求它。以下是一个名为“nameofotherview”的视图,其布局为“layoutname”。如果这是用于管理员视图,请改用 JPATH_COMPONENT_ADMINSTRATOR

    require(JPATH_COMPONENT_SITE . '/views/nameofotherview/tmpl/layoutname.php');
    

    请记住,视图类中设置的数据需要与主布局以及您从其他地方加载的布局兼容。

    这样做的副作用是模板覆盖不起作用。 loadTemplate 函数正在执行要求,但它首先检查模板路径是否有覆盖。

    【讨论】:

      【解决方案3】:

      您可以在 Joomla 文档中描述的其他视图中使用 vews:Sharing layouts across views or extensions with JLayout

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-04-27
        • 1970-01-01
        • 1970-01-01
        • 2016-09-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-03-21
        相关资源
        最近更新 更多