Создание инфоблока - techart/bitrix.tao GitHub Wiki

Для работы с инфоблоками через Bitrix.TAO нужно создать соответствующий класс. Через него будет организован доступ к API, а так же будет отрабатывать Schema для инфоблоков. Schema позволяет управлять настройками инфоблока через изменение его класса. Это нужно, в основном, для переноса изменений в инфоблоке с локальной машины на хостинг, а так же отображения этих изменений в git.

Создание инфоблоков реализовано через систему бандлов. Т.е. перед добавлением нового инфоблока бандл уже должен быть создан.

Минимальная файловая структура бандла при создании инфоблока будет выглядеть следующим образом:

  • /MyBundle/
    • /lib/
      • MyBundle.php
      • /Infoblock/
        • NameInfoblock.php
    • /views/
      • item.phtml
      • list.phtml
  1. Если бандл не создан, создаем его (описание в ст. Бандлы ).

  2. В папке /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(
        );
    }
}
  1. Регистрируем его в системе. Делаем это в классе 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');
            
    	}
    ...
}
  1. Или можно применить отложенную инициализацию.

Для этого применяется метод cachedInit(). Инициализация загрузки функционала будет производиться не каждый раз, а только при изменении файла класса.

Например, инициализация типов инфоблоков.

// local/bundles/MyBundle/lib/Bundle.php
 
namespace App\Bundle\MyBundle;

class Bundle extends \TAO\Bundle
{
    public function cachedInit()
        {
            $this->infoblockType('news', 'Новости');
        }
}