Joomla добавить вид в другой вид - PullRequest
3 голосов
/ 30 января 2012

Я использую joomla MVC, и я хочу создать форму с разными вкладками, представляющими собой разные разделы формы с входными данными в ней. Есть несколько вкладок, которые являются общими для других форм, которые мне нужно включить.

Я хотел бы иметь возможность загружать это общее содержимое из отдельного файла или представления, чтобы у меня не было дублирующегося кода, плюс это проще, когда мне нужно внести изменения в форму, поэтому мне не нужно делать это во всех формы. Это похоже на отображение вида внутри другого вида.

Есть ли способ сделать это?

Ответы [ 2 ]

9 голосов
/ 31 января 2012

A Joomla!предоставляет метод loadTemplate для просмотра.

Так что, если вы в данный момент tmpl файл загружен для макета edit (т.е. tmpl/edit.php), вы можете вызвать $this->loadTemplate('tab1'); и Joomla!загрузит файл tmpl/edit_tab1.php в том же виде, что и ваш edit.php.

В том же представлении, если вы хотите включить, скажем, tmpl/other_tab1.php, вам придется временно установить макет на other , напримерв одном из наших компонентов во время шаблона 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');

Примечание: последний бит, который я не успел проверить, но он должен работать.

0 голосов
/ 08 января 2014

Вы можете загрузить другой файл шаблона для другого представления вручную, просто потребовав его.Ниже приведено представление «nameofotherview» с макетом «layoutname».Если это для административного представления, используйте JPATH_COMPONENT_ADMINSTRATOR.

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

Помните, что данные, заданные в классе представления, должны быть совместимы с основным макетом, а также с макетом, из которого вы загружаетев другом месте.

Побочным эффектом этого является то, что переопределения шаблонов не будут работать.Функция loadTemplate выполняет требование, но сначала проверяет пути шаблонов для переопределений.

...