phact-cmf-modules / admin
Admin module for phact CMF
Installs: 7 575
Dependents: 3
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 3
Open Issues: 0
Requires
- php: ^7.1.3 | ^8.0
- phact-cmf/phact: ^4.0.0
README
Стандартный вывод модели в админ-панель
Допустим, выводим в админ-панель модель Book
Пример модели:
class Book extends Model { public static function getFields() { return [ 'name' => [ 'class' => CharField::class, 'label' => 'Наименование' ], ]; } }
Добавляем в свой модуль папку Admin, создаем файл BookAdmin.php
Именование файла не имеет ограничений, можно назвать его, к примеру, и BookMyAdmin.php
class BookAdmin extends Admin { public function getSearchColumns() { return ['name']; } public function getModel() { return new Book(); } public static function getName() { return 'Книги'; } public static function getItemName() { return 'Книга'; } }
Атрибуты и методы:
getSearchColumns - массив со списком атрбутов для поиска по моделям
getModel - модель, с которой работает данная "админка"
getName - именование "админки" (пункт в меню, хлебные крошки)
getItemName - именование отдельного элемента "админки"
Подключение собственных форм
Установим свою форму для редактирования и создания моделей
Форма должна работать с моделью Book и быть унаследована от ModelForm
class BookAdmin extends Admin { ... public function getForm() { return new BookAdminForm(); } ... }
Если нам необходимо указать отдельные формы для редактирования и создания моделей, указываем ее следующим образом:
class BookAdmin extends Admin { ... public function getForm() { return new BookAdminCreateForm(); } public function getUpdateForm() { return new BookAdminUpdateForm(); } ... }
Атрибуты и методы:
getForm - указание формы для создания и редактирования моделей
getUpdateForm - указание отдельной формы для редактирования моделей
Связанные админ-панели (RelatedAdmin)
Связанные админ-панели помогают организовать удобное создание и редактирование моделей, связанных c текущей моделю через ForeignKey. Например в нашем случае с книгами это будут ее издания (Release)
Пример модели Release:
class Release extends Model { public static function getFields() { return [ 'book' => [ 'class' => ForeignField::class, 'modelClass' => Book::class, 'label' => 'Книга' ], 'year' => [ 'class' => CharField::class, 'label' => 'Год' ], 'position' => [ 'class' => PositionField::class, 'editable' => false, 'default' => 0, 'relations' => [ 'book' ] ] ]; } public function __toString() { return (string) $this->year; } }
Создаем для нее следующую "админку" ReleaseAdmin
class ReleaseAdmin extends Admin { public static $ownerAttribute = 'book'; public function getSearchColumns() { return ['year']; } public function getModel() { return new Release(); } public static function getName() { return 'Издания'; } public static function getItemName() { return 'Издание'; } }
Как можно увидеть, от стандартной "админки" она отличается только атрибутом $ownerAttribute, который указывает на связь в модели, через которую данная "админка" будет поключатся к другим.
И модифицируем BookAdmin:
class BookAdmin extends Admin { ... public function getRelatedAdmins() { return [ 'releases' => ReleaseAdmin::class ]; } ... }
Теперь ReleaseAdmin будут выводится внутри BookAdmin
Атрибуты и методы:
static $ownerAttribute - указание связи для дочерних "админок", через которую данная "админка" будет подключена к родительской
getRelatedAdmins - определение дочерних "админок" внутри родительской