我正在使用joomla MVC,我想构建一个具有不同选项卡的表单,这些选项卡是表单的不同部分,其中包含输入。我需要包含一些与其他表单相同的选项卡。
我希望能够从单独的文件或视图加载这个常见内容,所以我没有重复的代码,当我需要对表单进行更改时更容易,所以我不必在所有的内容中执行此操作形式。这就像在另一个视图中显示视图一样。
有没有办法实现这个目标?
答案 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