Что лучше добавить новые представления или макеты одного представления для компонента Joomla? - PullRequest
0 голосов
/ 18 апреля 2020

Я разрабатываю компонент для Joomla! 3. Он имеет вид «контакт», отображающий три ссылки, которые ведут к:

  1. списку всех доступных контактных книг.
  2. форма для добавления контакта в некоторую доступную книгу.
  3. страница, на которую можно импортировать ваши контакты.

Эта страница отображается с помощью макета с именем default.php вида "contact" . Как мне реализовать эти 3 страницы? Лучше ли отображать их в одном и том же виде с помощью отдельных макетов или правильнее создать три отдельных вида для каждого из упомянутых страниц? Все эти три страницы посвящены работе с контактами.

1 Ответ

1 голос
/ 18 апреля 2020

Вы можете сделать это, используя тот же view, используя разные layouts. Скажем, у вас есть три макета -

  1. макет по умолчанию , в котором отображаются все доступные контактные книги.
  2. макет формы , в котором вы показываете форма для добавления контакта.
  3. макет импорта , где отображается страница импорта контактов.

Затем создайте три макета на

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 условно.

Надеюсь, это поможет вам.

...