Для модулей, которые работают со страницами, эта страница является детальной.
Приведем пример:
Модуль мероприятия должен иметь детальную страницу мероприятия:
| Детальное мероприятие | Заголовок страницы |
| /activity/event-detail/ | Адрес страницы |
Дальнейшая демонстрация будет производится на примере модуля Activity
Для того, чтобы наш модуль мог создавать подобные страницы при установке, нам необходимо открыть объект Saver()
используя редактор: /extensions/Modules/Activity/Panel/Models/Saver.php
Нужно подключить:
use Prologue\Framework\Translit\Translit;use Prologue\Uni\AppPagesAppEntitiesRelations\AppPagesAppEntitiesRelations;
В методе save() инициализировать метод pageSync() - передав в него параметры
public static function save($params)
{
TDD::debug($params, 'params', 'Инициализируем параметры');
if (!$params['id']) {
$params['id'] = self::createTmpEntity();
}
self::save__updateDatabaseRecord($params);
self::removeTmpEntity();
self::pageSync($params);
Platform::CRUDEpilogue();
return $params['id'];
}
Опишем метод:
public static function pageSync($params)
{
$parentRelation = AppPagesAppEntitiesRelations::getRelation(
[
'entity' => self::entity,
'app_entity_item_id' => 0,
]
);
$link = '/activity/' . Translit::url($params['fields']['name']) . '/';
AppPagesAppEntitiesRelations::saveRelation(
[
'name' => $params['fields']['name'],
'parent_id' => $parentRelation['app_page_item_id'],
'link' => $link,
'show_in_menu' => 1,
'is_publish' => 1,
'sorting_index' => $params['id'],
'entity' => self::entity,
'app_entity_item_id' => $params['id']
]
);
}
На данном этапе нас интересуют параметры:
| name | Название страницы |
| parent_id | Id родительской страницы |
| link | Адрес страницы |
| show_in_menu | Отображать в меню 1/0 |
| is_publish | Опубликовать 1/0 |
| sorting_index | Порядковый номер страницы |
| entity | Связанная сущность |
При запуске модуля, будет создана страница связанная с сущностью модуля.
Удаление связи
После того, как сущность удаляется, нам необходимо удалить связь и страницу
Откройте файл в редакторе: /extensions/Modules/Activity/Panel/Models/Remover.php
Подключите:
use Prologue\Uni\AppPagesAppEntitiesRelations\AppPagesAppEntitiesRelations;
В метод remove() ( перед Platform::CRUDEpilogue() ) вставьте код:
AppPagesAppEntitiesRelations::removeRelation(
[
'entity' => self::entity,
'pageId' => 0,
'entityId' => $params['id']
]
);
Метод removeRelation() - удалит связь и страницу.