Вы можете сделать это, используя тот же view
, используя разные layouts
. Скажем, у вас есть три макета -
- макет по умолчанию , в котором отображаются все доступные контактные книги.
- макет формы , в котором вы показываете форма для добавления контакта.
- макет импорта , где отображается страница импорта контактов.
Затем создайте три макета на
component/com_yourcomponent/views/contact/tmpl/default.php
component/com_yourcomponent/views/contact/tmpl/default_form.php
component/com_yourcomponent/views/contact/tmpl/default_import.php
Теперь вы можете получить доступ к макетам, используя запрос layout
по URL. Скажем, чтобы показать макет form
, вы должны нажать на URL-
http://yoursite.com/index.php?option=com_yourcomponent&view=contact&layout=form
Если я хочу получить доступ к макетам из меню.
Да, если вы хотите получить к ним доступ из меню, вам нужно сделать еще кое-что. Вам нужно создать еще три файла в каталоге tmpl
того же представления вместе с файлами макета .php
. Путь к файлам будет -
component/com_yourcomponent/views/contact/tmpl/default.xml
component/com_yourcomponent/views/contact/tmpl/form.xml
component/com_yourcomponent/views/contact/tmpl/import.xml
И пример файла .xml
(скажем, form.xml
) будет выглядеть так:
<?xml version="1.0" encoding="utf-8"?>
<metadata>
<fields name="params">
<fieldset name="basic" label="Basic">
<!-- Your menu settings params are here-->
</fieldset>
</fields>
<layout title="COM_YOURCOMPONENT_FORM_VIEW_DEFAULT_TITLE" option="COM_YOURCOMPONENT_FORM_VIEW_DEFAULT_OPTION">
<help
key = "JHELP_MENUS_MENU_ITEM_CONTACT_FORM"
/>
<message>
<![CDATA[COM_YOURCOMPONENT_FORM_VIEW_DEFAULT_DESC]]>
</message>
</layout>
</metadata>
И вам придется проделать дополнительную работу в component/com_yourcomponent/views/contact/view.html.php
, то есть, установите макет из меню функции display()
.
$this->layout_type = str_replace(':_', '', $layout);
$this->setLayout($this->layout_type);
Помните
Существует только одно место для манипулирования данными для всех макетов представления. , Таким образом, вы можете поймать имя макета с помощью $this->layout_type
и применить свою бизнес-логику c условно.
Надеюсь, это поможет вам.