https://github.com/DigitalWand/digitalwand.admin_helper
Основные преимущества
Модуль реализует подход шаблона проектирования MVC в создании страниц для панели управления Битрикса.
Если у вас есть модель, написанная на ORM 1C-Битрикс, вы за считанные минуты сможете сделать раздел для управления данными этой модели, ничем не уступающему по своим возможностям и внешнему виду интерфейсу управления элементами инфоблоков. Внешний вид полей и логика работы легко кастомизируется и дорабатывается разработчиками.
Решение разработано совместно компаниями DigitalWand и агенством Notamedia и активно используется в их проектах.
Решение хорошо показало себя на крупных и ответственных государственных проектах своей надёжностью и гибкостью.
Кастомизируйте различные поля с помощью так называемых "виджетов". Отображение каждого поля кастомизируется, как Вам заблагорассудится.
Экономьте время на разворачивании и поддержке страниц админки. Прописывайте только то, что действительно относится к вашим страницам и не копируйте макароны с кодом. Оцените, например, страницу редактирования категорий на одном из проектов:
Установите composer, если Вы ещё не сделали этого.
Как это правильно сделать в 1С-Битрикс читайте в статье.
Подключите зависимость "digitalwand/digitalwand.admin_helper"
и укажите версию.
composer require digitalwand/digitalwand.admin_helper
Создайте модуль, например local/modules/demo.adminhelper
.
Обратите внимание, что все классы должны начинаться с неймспейса Demo\AdminHelper, чтобы работала автозагрузка классов.
Создайте сущность в модуле.
В каталоге lib вашего модуля создайте каталог под сущность новостей: demo.adminhelper/lib/news
. В нём мы будем размещать всё, что так или иначе связано с сущностью новостей.
А всё относящееся к интерфейсу панели управления Битрикса — положим в каталог demo.adminhelper/lib/news/admininterface
.
Создадим модель на базе 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'
),
);
}
}
<?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'
);
}
}
<?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';
}