https://github.com/DigitalWand/digitalwand.admin_helper
Основные преимущества
Модуль реализует подход шаблона проектирования MVC в создании страниц для панели управления Битрикса.
Если у вас есть модель, написанная на ORM 1C-Битрикс, вы за считанные минуты сможете сделать раздел для управления данными этой модели, ничем не уступающему по своим возможностям и внешнему виду интерфейсу управления элементами инфоблоков.
Внешний вид полей и логика работы легко кастомизируется и дорабатывается разработчиками.
Решение разработано совместно компаниями DigitalWand и агенством Notamedia и активно используется в их проектах.
Решение хорошо показало себя на крупных и ответственных государственных проектах своей надёжностью и гибкостью.
Кастомизируйте различные поля с помощью так называемых "виджетов". Отображение каждого поля кастомизируется, как Вам заблагорассудится.
Экономьте время на разворачивании и поддержке страниц админки. Прописывайте только то, что действительно относится к вашим страницам и не копируйте макароны с кодом. Оцените, например, страницу редактирования категорий на одном из проектов:
1. Установите composer, если Вы ещё не сделали этого.
Как это правильно сделать в 1С-Битрикс читайте в статье.
2. Подключите зависимость "digitalwand/digitalwand.admin_helper"
и укажите версию.
composer require digitalwand/digitalwand.admin_helper
3. Создайте модуль, например local/modules/demo.adminhelper
.
Обратите внимание, что все классы должны начинаться с неймспейса Demo\AdminHelper, чтобы работала автозагрузка классов.
4. Создайте сущность в модуле.
В каталоге lib вашего модуля создайте каталог под сущность новостей: demo.adminhelper/lib/news
. В нём мы будем размещать всё, что так или иначе связано с сущностью новостей.
А всё относящееся к интерфейсу панели управления Битрикса — положим в каталог demo.adminhelper/lib/news/admininterface
.
5. Создадим модель на базе ORM 1С-Битрикс:
<?php namespace Demo\AdminHelper\News; use Bitrix\Main\Entity\DataManager; use Bitrix\Main\Localization\Loc; use Bitrix\Main\Type\DateTime; Loc::loadMessages(__FILE__); /** * Модель новостей. */ class NewsTable extends DataManager { /** * {@inheritdoc} */ public static function getTableName() { return 'd_ah_news'; } /** * {@inheritdoc} */ public static function getMap() { return array( 'ID' => array( 'data_type' => 'integer', 'primary' => true, 'autocomplete' => true, ), 'TITLE' => array( 'data_type' => 'string', 'title' => Loc::getMessage('DEMO_AH_NEWS_TITLE') ), 'TEXT' => array( 'data_type' => 'text', 'title' => Loc::getMessage('DEMO_AH_NEWS_TEXT') ), // Для всех полей, используемых визивигом, нужно создавать в таблице атрибут с суффиксом _TEXT_TYPE. // В нём будет храниться информация о типе сохранённого контента (ХТМЛ или обычный текст). 'TEXT_TEXT_TYPE' => array( 'data_type' => 'string' ), ); } }
6. Пропишем табы и отображение полей, отнаследовавшись от базового класса.
Также укажем, с помощью какого виджета отображать каждое из полей. Виджеты, в данном случае, - это специальные классы, отвечающие за отображение полей. Вы можете отнаследоваться от любого из существующих и отобразить, например, число в виде слайдера.
<?php namespace Demo\AdminHelper\News\AdminInterface; use Bitrix\Main\Localization\Loc; use DigitalWand\AdminHelper\Helper\AdminInterface; use DigitalWand\AdminHelper\Widget\DateTimeWidget; use DigitalWand\AdminHelper\Widget\FileWidget; use DigitalWand\AdminHelper\Widget\NumberWidget; use DigitalWand\AdminHelper\Widget\StringWidget; use DigitalWand\AdminHelper\Widget\UrlWidget; use DigitalWand\AdminHelper\Widget\UserWidget; use DigitalWand\AdminHelper\Widget\VisualEditorWidget; Loc::loadMessages(__FILE__); /** * Описание интерфейса (табок и полей) админки новостей. * * {@inheritdoc} */ class NewsAdminInterface extends AdminInterface { /** * {@inheritdoc} */ public function fields() { return array( 'MAIN' => array( 'NAME' => Loc::getMessage('DEMO_AH_NEWS'), 'FIELDS' => array( 'ID' => array( 'WIDGET' => new NumberWidget(), 'READONLY' => true, 'FILTER' => true, 'HIDE_WHEN_CREATE' => true ), 'TITLE' => array( 'WIDGET' => new StringWidget(), 'SIZE' => '80', 'FILTER' => '%', 'REQUIRED' => true ), 'TEXT' => array( 'WIDGET' => new VisualEditorWidget(), 'HEADER' => false ), ) ); } /** * {@inheritdoc} */ public function helpers() { return array( '\Demo\AdminHelper\News\AdminInterface\NewsListHelper', '\Demo\AdminHelper\News\AdminInterface\NewsEditHelper' ); } }
7. Создадим страницы списка новостей и редактирования отдельной новости.
<?php namespace Demo\AdminHelper\News\AdminInterface; use DigitalWand\AdminHelper\Helper\AdminListHelper; /** * Хелпер описывает интерфейс, выводящий список новостей. * Обратите внимание, что нам достаточно прописать только класс, с которым будет работать список новостей - всё остальное модуль сделает сам! * * {@inheritdoc} */ class NewsListHelper extends AdminListHelper { protected static $model = '\Demo\AdminHelper\News\NewsTable'; }
<?php namespace Demo\AdminHelper\News\AdminInterface; use DigitalWand\AdminHelper\Helper\AdminEditHelper; /** * Хелпер описывает интерфейс, выводящий форму редактирования новости. * * {@inheritdoc} */ class NewsEditHelper extends AdminEditHelper { protected static $model = '\Demo\AdminHelper\News\NewsTable'; }
8. Наслаждайтесь собой!
За считанные минуты вы создали "тонкую" админку, которую легко кастомизировать и которой легко управлять. Ключевые файлы малы и легки в понимании, а сэкономленное время при поддержке решения (Вам теперь не придётся читать простыни кода!) Вы можете потратить с большей пользой.