joomla add view into another view

早过忘川 提交于 2019-12-10 22:05:51

问题


Im using joomla MVC and I want to build a form that has different tabs which are different sections of the form with inputs in it. There are some tabs that are common to other forms that I need to include.

I would like to be able to load this common content from a separate file or view so i dont have duplicate code, plus is easier when I need to do a change to the form so I dont have to do it in all the forms. It's like displaying a view inside another view.

Is there a way to accomplish this?


回答1:


A Joomla! provides the loadTemplate method to views.

So if you're currently in a tmpl file loaded for layout edit (ie. tmpl/edit.php ) you can call $this->loadTemplate('tab1'); and Joomla! will load the tmpl/edit_tab1.php file in the same view as your edit.php.

In that same view if you wanted to include say tmpl/other_tab1.php you would have to temporarily set the layout to other, eg. in one of our components during the Run template we need a tab from the Edit template, so we use:

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

To load a template from another view alltogether, I think you would have to temporarily over-ride the view value, load the template then restore the view. eg.

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

NB: this last bit I haven't had time to test but it should work.




回答2:


You can load a different template file for a different view manually, by simply requiring it. The following is for a view called "nameofotherview" with the layout "layoutname". If this is for an admin view use JPATH_COMPONENT_ADMINSTRATOR instead.

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

Remember that the data set up in the view class needs to be compatible with the main layout as well as the layout you're loading from elsewhere.

A side effect of doing this is that template overrides won't work. The loadTemplate function is doing a require but it checks the template paths for overrides first.



来源:https://stackoverflow.com/questions/9068661/joomla-add-view-into-another-view

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!