Создание инфоблока - techart/bitrix.tao GitHub Wiki
Для работы с инфоблоками через Bitrix.TAO нужно создать соответствующий класс. Через него будет организован доступ к API, а так же будет отрабатывать Schema для инфоблоков. Schema позволяет управлять настройками инфоблока через изменение его класса. Это нужно, в основном, для переноса изменений в инфоблоке с локальной машины на хостинг, а так же отображения этих изменений в git.
Создание инфоблоков реализовано через систему бандлов. Т.е. перед добавлением нового инфоблока бандл уже должен быть создан.
Минимальная файловая структура бандла при создании инфоблока будет выглядеть следующим образом:
- /MyBundle/
- /lib/
- MyBundle.php
- /Infoblock/
- NameInfoblock.php
- /views/
- item.phtml
- list.phtml
- /lib/
-
Если бандл не создан, создаем его (описание в ст. Бандлы ).
-
В папке /Infoblock/ заводим файл NameInfoblock.php, в котором описываем одноименный класс, наследуем его от класса Infoblock. Этот файл можно сгенерировать автоматически - после установки bTAO в админке в меню появляется пункт TAO. Работать он будет при соответствующих изменениях в htaccess. Если перейти на него, то там будет возможность выбрать инфоблок и для него будет сформирован класс инфоблока. Он потребует минимальной модификации для использования. Для внесения изменений в инфоблоке в дальнейшем так же можно использовать этот механизм.
// /local/bundles/News/lib/Infoblock
namespace App\Bundle\News\Infoblock;
use TAO\Infoblock;
class News extends Infoblock
{
public function title()
{
return 'Новости';
}
public function data()
{
return array(
'LIST_PAGE_URL' => '/news/',
'DETAIL_PAGE_URL' => '/news/#ID#/',
);
}
public function messages()
{
return array(
'ELEMENT_NAME' => 'Новость',
'ELEMENTS_NAME' => 'Новости',
'ELEMENT_ADD' => 'Добавить новость',
'ELEMENT_EDIT' => 'Изменить новость',
'ELEMENT_DELETE' => 'Удалить новость',
);
}
public function properties()
{
return array(
);
}
}
- Регистрируем его в системе. Делаем это в классе Bundle в init() с использованием метода infoblockSchema().
// /local/bundles/News/lib/Bundle.php
namespace App\Bundle\News;
class Bundle extends \TAO\Bundle
{
public function init()
{
$this->infoblockSchema('news', 'news', 'News');
}
...
}
- Или можно применить отложенную инициализацию.
Для этого применяется метод cachedInit(). Инициализация загрузки функционала будет производиться не каждый раз, а только при изменении файла класса.
Например, инициализация типов инфоблоков.
// local/bundles/MyBundle/lib/Bundle.php
namespace App\Bundle\MyBundle;
class Bundle extends \TAO\Bundle
{
public function cachedInit()
{
$this->infoblockType('news', 'Новости');
}
}