Каковы различия между типами моделей Joomla?

Я пытаюсь справиться с мощью структуры Joomla (3.x).

Я заметил, что есть несколько типов моделей, которые можно использовать в компоненте:


JModelAdmin

Модель прототипа admin. Действует как класс Factory для конкретных приложений и предоставляет множество поддерживающих функций API.

JModelLegacy

Базовый класс для модели Joomla Действует как класс Factory для конкретных приложений и предоставляет множество поддерживающих функций API.

JModelList

Модельный класс для обработки списков элементов. Действует как класс Factory для конкретных приложений и предоставляет множество поддерживающих функций API.

JModelForm

Модель прототипа. Действует как класс Factory для конкретных приложений и предоставляет множество поддерживающих функций API.

JModelItem

Модель элемента прототипа.


Я понимаю, что JModelLegacy кажется основным классом. Мои модели расширяли JModelLegacy по умолчанию, однако мне было интересно, могу ли я потенциально использовать преимущества других классов.

Если бы кто-то знал об этих моделях, я был бы признателен за объяснение того, что такое различия между этими типовыми классами, и предполагаемый сценарий, в котором вы использовали бы его над другими.

Ответ 1

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

\libraries\legacy\model\

Classes

Также важно понимать, что эти классы должны использоваться (в общем случае) в связи с соответствующими контроллерами: JControllerLegacy, JControllerForm и JControllerAdmin.

JModelLegacy - базовый класс для модели Joomla (модель, как в MVC). Он будет в основном работать как класс Factory путем инициализации объекта драйвера базы данных и объекта таблицы.

Вы можете расширить этот класс, если хотите просто выполнить базовые SQL-запросы (любую работу с JDatabase) и написать другую бизнес-логику.

Все модели будут расширяться JModelLegacy.


JModelList - это класс для обработки списков элементов. Он обеспечивает разбиение на страницы и фильтрацию. В основном везде вы показываете список элементов, вы можете использовать JModelList. Все основные компоненты полагаются на JModelList.

JModelLegacy example


JModelForm и JModelAdmin обычно связаны с формами. Формами могут быть форма регистрации пользователя или создание и редактирование записи. Формы в Joomla определены в файлах XML. JModelForm загрузит эти файлы в виде объектов JForm, загрузит данные формы, предварительно обработает форму и проверит ее.

Это один из самых мощных классов, которые вы можете использовать. Они сделают тяжелый подъем. Когда вам не нравится конкретное поведение, вы можете переопределить его, выполнив свой собственный код.

JModelAdmin добавляет дополнительные функции администратора в форму:

  • выполнять пакетные операции над записями.
  • проведет ACL проверку записей.

JModelAdmin обычно используется при редактировании записи или для пакетных операций, особенно в бэкэнд.


JModelItem - очень маловероятно, что вам это понадобится. Он предоставляет только метод getStoreId() и два свойства. Вам не понадобится этот класс, если только в качестве именования, вместо использования JModelLegacy вы хотите расширить его, когда делаете что-то основное, например, показывая запись. (мое личное понимание вещей).


Вывод: Выше приведено общее введение в эти классы, как я их вижу. Мое предложение - детально изучить, как Joomla использует их, какие методы раскрываются и как их использовать. Они очень мощные классы, и особенно для операций CRUD они помогут вам справиться с тяжелым подъемом. После того, как вы поймете, что они делают, вы можете использовать их и переопределить их при необходимости.