joomla将视图添加到另一个视图中

时间:2012-01-30 18:16:58

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

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

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

有没有办法实现这个目标?

3 个答案:

答案 0 :(得分:9)

Joomla!为视图提供loadTemplate方法。

因此,如果您当前正在为tmpl加载edit文件(即tmpl/edit.php),则可以拨打$this->loadTemplate('tab1');和Joomla!会将tmpl/edit_tab1.php文件加载到与edit.php相同的视图中。

在同一视图中,如果您想要包括说tmpl/other_tab1.php,则必须暂时将布局设置为其他,例如。在运行模板中的一个组件中,我们需要来自编辑模板的选项卡,因此我们使用:

<?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');

注意:最后一点我没有时间去测试,但它应该有用。

答案 1 :(得分:0)

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

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

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

执行此操作的副作用是模板覆盖不起作用。 loadTemplate函数正在执行require,但它首先检查模板路径是否有覆盖。

答案 2 :(得分:0)

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