Class bitrix highloadblock highloadblocktable not found

Эта статья будет состоять из примеров задач с использованием highload-инфоблоков CMS 1c-Bitrix и соответственно решения этих задач с применением API D7.
Работать буду с highload-блоком

имеющий поля

записи

Содержание:

Начало

Подготовим подключение пространства имен, модуля хайлоад блоков и функцию, которая создаёт класс для работы с таблицей.

Этот участок кода будем использовать во всех приведенных ниже примерах.

Поясню, что происходит в функции GetEntityDataClass.
HLBT::getById($HlBlockId)->fetch() вернет массив информацию о highload-блоке $HlBlockId — ID, NAME и TABLE_NAME
HLBT::compileEntity($hlblock) возвращает сущность(BitrixMainEntityBase) для работы с highload-блоком $hlblock т.е. простым языком делает за вас всю черную работу — создает класс и методы для работы с таблицей.

В следующих примерах я пропускал этот участок кода. Не забудьте про него!

Получить название полей highload-инфоблока

Получаем массив, где ключи это поля highload-блока, а значения — объекты, соответствующие типу поля (строка — BitrixMainEntityStringField, число — BitrixMainEntityIntegerField).
Тип можно получить следующим образом(ID имя поля):

Получить все элементы highload-инфоблока

Получить количество элементов highload-инфоблока

Фильтр по полю типа да/нет

Получить поля ‘Имя’ и ‘Значение’ активных элементов highload-инфоблока
Имеется свойство ‘UF_ACTIVE’ типа ‘Да/Нет’
1 — да
0 — нет
В select указываем нужные поля : ‘UF_NAME’ и ‘UF_VALUE’

Фильтр со сложной логикой

Получить цвета, имена которых начинаются на С или К.


Форматы фильтров остались прежние, можно посмотреть тут.
По умолчанию логика фильтра — AND, описанный выше фильтр пример логики — OR. Пример посложнее от Антипова Андрея

Добавить новый элемент в highload-инфоблок

Удалить элемент highload-инфоблока

Обновить элемент highload-инфоблока

В качестве доп. информации советую почитать страницу документации, где описывается метод getList на новом API D7. Так как все сущности теперь имеют стандартизированный метод getList, то и всё в этой статье справедливо для метода getList highload-инфоблоков.

Чебан Валерий

У вас нет прав на просмотр профайла этого пользователя.

Вот этот модуль и вышел в бета-релиз. Пощупаем его в бою.

Для этого в качестве учебного примера добавим HL инфоблок «статьи», заполним его при помощи программного кода из другого обычного инфоблока, а также сделаем публичный вывод ленты плюс детальной страницы.

(!) Моменты, которые вызывали у меня огромное желание писать в wishlist,
я отметил восклицательным знаком.

Используем в нашей компании префикс “we_” в именах «посторонних» для битрикса таблиц.

(!) Первое, на что сразу обратил внимание: почему бы не сделать еще одно поле «имя сущности на-языках интерфейса (по-русски) » (я бы его Статьи сделал) и выводил бы его в левом меню для простого смертного (т.е. редактора сайта):

Уже было сказано и написано , что структура полей данных инфоблоков будет храниться в пользовательских полях.

Я добавляю два поля: заголовок обязательным, а также детальное описание. У обоих полей ставлю тип «строка».

(!) Чего еще очевидно не хватает из коробки – это пользовательского свойства с типом « HTML/ Text », чтобы визуальный редактор использовать. Кстати, этого и для разделов инфоблоков частенько не хватает, когда требуется в разделе какое-нибудь SEO-поле завести.

Форма редактирования настраивается, замечательно. Закладку обозвал «Статья», все добавляется:

2/ Заглянем «под капот», перенесем контент из обычного инфоблока «новости» во вновь созданный HL — Articles .

Сразу скажу, что ориентировался по коду доступных к данному модулю двум компонентам: highloadblock.list и highloadblock.view, а также на файл модуля highloadblock_row_edit.php

Код переносчика у меня получился такой:

После выполнения этого кода, все мои строки таблицы статей были созданы (30 штук):

(!) Опять же на скриншоте видно, что интерфейс ленты записей пока не приспособлен для работы с html-статьями и длинным текстом. Очень надеюсь, что это вопрос времени Очень надеюсь, что и тип пользовательского свойства HTML/ Text с визуальным редактором появится, и ленты будут удобными к использованию

(!) В обычных инфоблоках не нашел свойство привязку к HL-инфоблокам. Надеюсь это будет из коробки , но на крайний случай можно сделать свой тип свойства инфоблока « привязка к HightLoad-инфоблоку », хранить как число – а визуально показывать как список в админке простых инфоблоков.

2/ Заглянем «под капот», выведем статьи в публичную часть. Опробуем компоненты highloadblock.list и highloadblock.view

По-быстрому кидаю две страницы /hl/index.php и /hl/detail.php

Приятно, что про ссылки на детальные страницы не забыли, и такой параметр есть в ленте)
Заменяемые подстановки в урле на детальную страницу две — #ID# и #BLOCK_ID#

(!) Почему нет автокеширования в этих двух highloadblock.* компонентах?

(!) Это все важно, но не существенно : Постаничка в ленте есть, просто визуального параметра нет, он называется ROWS_PER_PAGE. Еще есть NAV_TEMPLATE, думаю понятно зачем. А вот для сортировки нет параметра, все из $_GET берется, не айс. Сео-Title бы еще в детальную…

Шаблоны компонентов highloadblock.* пока просто служебные: выводят таблицы сущностей как таблицы. Круто, что лента сортируется) Опять же весь детальный текст мне вывалился одним скопом.

Я кастомизировал шаблоны, получил такой вариант:

Думал не приводить здесь шаблоны, т.к. они элементарные, но решил показать, т.к. постраничка у меня не заработала, см. скриншот.

Чисто интуитивно думаю, что дело тут в не достаточно полной совместимости преобразования в компоненте bitrixcomponentsitrixhighloadblock.listcomponent.php:

В админке лента работает – там используется другой подход (датаМенеджер, а не конструктор запросов) itrixmoduleshighloadblockadminhighloadblock_rows_list.php:

(!) Не работает постраничка в highloadblock.list. Хотел раскопать причину – но это выходит за рамки беглого взгляда на функционал, тем более проблема может быть локальной у меня.

3/ Заглянем «под капот», а что же в БД?

В БД мы имеем целиком такую таблицу с именем we_articles, с которым я ее создал на шаге добавления HL-инфоблока.

Я так полагаю, что необходимые индексы мы сами можем и должны спрогнозировать и добавить в эту таблицу .

Добавил к своим статьям еще одно поле «сортировка» с числовым типом, здорово, что это учли и тип поля в БД стал соответствующим:

(!) Однако при заполнении этого поля в админке вылетела ошибка:
Fatal error: Class ‘BitrixMainEntityUpdateResult’ not found in *wwwitrixmodulesmainlibentitydatamanager.php on line 40 4
Что поделаешь – бета версия (((

А вот сами HL-инфоблоки идут в таблице b_hlblock_entity (по-идее имена для интерфейса и админы можно сделать через таблицу b_hlblock_entity_lang):

Ну а поля и их настройки идут в пользовательских свойствах, т.е. в таблице b_user_field:

Сперва хочу сказать «спасибо» сотрудникам компании Битрикс за труд — изменений в D7 с точки зрения разработчика много. Спасибо вам за то, что вы взяли на себя эту трудную ношу по созданию нового ядра

Я ждал, действительно ждал, этого релиза. Не могу сказать, что разочарован – скорее рад, что наконец дождался

Модуль highloadblock выглядит достаточно привлекательно – для функционала партнерам часто приходится прибегать к созданию сторонних таблиц в БД. Замечательно, что это все будет стандартизировано и возможно «из коробки».

Думаю, после проработки множества реальных сценариев использования, highloadblock станет замечательным модулем . А в данной статье я попытался дать обратную связь именно по необходимым мне самому сценариям

Очень надеюсь, что так и будет,
Спасибо за внимание

Доброго времени суток.

Сегодня поговорим о Highload инфоблоках. Точнее как с ними работать. Если вы посмотрите в интернете, то везде есть как с них взять информацию, но как наоборот записать-изменить-удалить — этого я не нашел (наверное просто я плохо искал), но мне очень надо было.
Поэтому я обратился к ЛайфАПИ и раскопал кое-что. Начнем по порядку.
Как вы наверное заметили, эти инфоблоки содержат пользовательские поля. Т.е. каждое поле начинается с UF. Но я не буду разжевывать, т.к. кто кодит на битриксе, тот знает это.

перед какими-либо действиями нужно подключить необходимый модуль:

Потом идет самое интересное.

Делаем настройки подключения:

Это своего вида символические ссылки (кто работал с многосайтовостью тот поймет). Для остальных — подключайте не в функциях, не в условиях и т.д. (Можно подключать в компонентах и result_modifier.php).

Это нужно подключить до всех условий, это не работает в подключении функции и т.д.

Далее нужно написать следующий код (выбираем необходимые поля и подключаем функции классов):

Далее мы можем работать непосредственно с Highload инфоблоком:

Добавление данных:
за добавление данных отвечает как и всегда у них функция:

Пояснять тут думаю не стоит много: класс-функция.
дело в том, что мы не знаем как точно отдаются поля в массив $data. Поясню. Это, как мы уже видели «Пользовательские поля», и передается код поля (UF_*******).
т.е.

Ну и после этого добавляем уже вышестоящей функцией.

это выбрать ID после добавления (на случай если надо проверить произошло ли добавление).

для удаления данных просто необходимо знать ID элемента. Все просто как и обычно:

Особенность:
изменение (можно передавать только один параметр, который надо изменить). Т.е. можно передать только одно свойство, и оно изменится. Для простых инфоблоков для этого используется отдельная функция.
Ну и $ID — это ID элемента Highload инфоблока.

ЗЫ:
Для изменения пользовательского свойства типа Y/N мы должны отдавать Y/0, а не Y/N как обычно. (это на моем опыте).

выборку данных из этих инфоблоков вы найдете в компонентах:

Если время будет — напишу про одну функцию битрикса, которая по массиву элементов выбирает торговые предложения с ценами и всем их функционалом. (Хотя можете посмотреть через живое апи).

Статья написана для ознакомления. Если кто-то знает больше — пишите в комментариях.

Читайте также:  Распайка 5 ти штырькового советского аудио штекера