Как содержимое «блокировка» обрабатывается в пользовательских компонентах?

com_content ядра ядра имеет встроенную систему, которая, когда конкретная статья редактируется пользователем, становится «заблокированной», поэтому другой пользователь не может редактировать ее одновременно. Если пользователь закрывает окно или позволяет завершить сеанс без надлежащего закрытия этой статьи (например, нажав на «сохранить» или «отменить»), этот контент будет «проверен», а значок блокировки будет отображаться в бэкэнд рядом с ним, которые суперадмин должен будет разблокировать.

Мой вопрос : как это добавляется к настраиваемому компоненту, который имеет свои собственные таблицы контента? Насколько мне удалось найти, мне кажется, что до тех пор, пока вы используете JTable для управления этим контентом, это происходит как встроенная функция для методов в этом классе ... это правильно? Или мне нужно использовать что-то вроде JTableContent? Нужно ли добавлять что-то в таблицы, используемые для хранения контента (любые конкретные столбцы)?

8 голосов | спросил Isidro Baquero 21 52014vEurope/Moscow11bEurope/MoscowFri, 21 Nov 2014 19:16:32 +0300 2014, 19:16:32

2 ответа


3

Вы правы, но вам не нужно переходить к JTable, если вы следуете методу Joomla и используете JControllerForm в качестве основы для вашего представления контроллер, например

class MycomponentControllerMycontent extends JControllerForm {}

и используя JModelAdmin в качестве основы для ваших компонентов Model, например.

class MycomponentModelMycontent extends JModelAdmin {}

Расширение JControllerForm дает встроенный метод edit(), который настраивает вашу модель и таблицу для вас и проверяет доступ к рассматриваемой записи, а также как в таблице поддерживается проверка (проверка наличия столбца checked_out). Если это так, он пытается выполнить checkout() запись через модель.

Расширяя JModelAdmin, вы наследуете его методы getItem(), checkIn() и checkOut(). Как уже упоминалось, модель вызывает checkout() (, который она наследует от JModelForm ), и удостоверяется, что в дополнение к checked_out, в вашей таблице также есть один код checked_out_time.

В этот момент произойдет одно из двух событий, если любой из этих столбцов не существует, JModelForm подделывает его и возвращает true (с указанием выполненной работы). В противном случае он будет захватывать текущих пользователей, а затем приступить к попытке проверить сначала проверку, если она уже проверена другим пользователем. На этом этапе, если, наконец, вызывается реализация JTable кода checkOut () (если вы не переопределили его с помощью собственного определения таблицы, которое в J3 обычно не требуется) .

checkOut() выполняет точно такие же проверки столбцов, и если все хорошо (т.е. имеет действительный идентификатор), обновляет столбцы JTable и checked_out для редактируемой записи.

В качестве побочного примечания, когда вы вызываете checked_out_time, вызывается edit(), он загружает запись через getItem() (т.е. он выполняет JTable, за которым следует getTable(). (В этот момент load($pk) также запускает ваш onBeforeLoad и onAfterLoad для плагинов, которые хороши)

Запись возвращается к вашей версии JTable, которая преобразует ее в базовый объект JModelAdmin (он используется как stdClass в раз прошлое). Если запись (теперь объект) содержит столбец /атрибут JObject, он преобразует это в объект params для легкого доступа.

Итак, вы получаете много полезных вещей бесплатно, используя способ Joomla. :)

ответил Craig 24 12014vEurope/Moscow11bEurope/MoscowMon, 24 Nov 2014 00:33:20 +0300 2014, 00:33:20
2

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

Поскольку я изучаю Joomla 3+, я использую Создатель компонентов , чтобы создать чрезвычайно простой компонент с единственная таблица и только функция Joomla, которой я интересуюсь. Сгенерированный код очень хорош и легко отслеживается без всех сложностей обычных компонентов.

ответил GDP 21 52014vEurope/Moscow11bEurope/MoscowFri, 21 Nov 2014 19:25:52 +0300 2014, 19:25:52

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132