В последних обновлениях Highload-блоков (17.0.0) вышло несколько долгожданных изменений. Пробегусь по ним кратенько:
[spoiler]
1. Права доступа
Наконец-то модуль обзавелся функционалом прав:
При создании или изменении блока вам доступен известный интерфейс выдачи прав. Права проверяются в админ.интерфейсе, а также в компонентах списка и детальном. Замечу, что в случае компонент, проверка прав включается в настройках последних.
Хочу заметить, что проверка доступа на уровне выборки элементов сущности не реализована намеренно - мы хотим, чтобы хайлоад-блоки оставались по-прежнему гибкими и без лишней нагрузки. Чтобы вам проверить права доступа в своих скриптах и компонентах, вы можете воспользоваться данным примером:
$id = 1; $rights = \Bitrix\HighloadBlock\HighloadBlockRightsTable::getOperationsName($id); echo 'На highload-блок #'.$id.' присутствуют права: '.PHP_EOL; if (in_array('hblock_write', $rights)) { echo 'на запись'.PHP_EOL; } elseif (in_array('hblock_read', $rights)) { echo 'на чтение'.PHP_EOL; } elseif (empty($rights)) { echo 'никаких прав...'.PHP_EOL; } |
Права проверяются для текущего пользователя.
2. Возможность задавать языкозависимые названия сущностей.
Это значит, что теперь можно не терпеть названия сущностей в левом меню админ.части, в которых допускается только латиница и даже без пробелов
На уровне кода языкозависимые названия можно достать таким образом:
$res = \Bitrix\Highloadblock\HighloadBlockTable::getList(array( 'select' => array('*', 'NAME_LANG' => 'LANG.NAME'), 'order' => array('NAME_LANG' => 'ASC', 'NAME' => 'ASC') )); while ($row = $res->fetch()) { if ($row['NAME_LANG'] != '') { echo $row['NAME_LANG'];//языкозависимое название есть } else { echo $row['NAME'];//языкозависимого названия нет } } |
3. В компоненте списка добавлена постраничная навигация (D7).
Тут без комментариев. Включается в настройках компонента.
4. Возможность внешней фильтрации в списке (компонент).
Аналогично старым добрым инфоблокам. Передаете ключ, и посредством ключа GLOBALS можно передать в компонент дополнительную фильтрацию.
Скоро.
Совсем скоро выйдут также долгожданные экспорт и импорт хайлоад-блоков.
Тогда вообще кастомизировать не понадобаится.
$APPLICATION->IncludeComponent(
...
"FILTER" => $arrFilter
"ORDER" => $arOrfer
"RUNTIME" => $arRuntime
"SELECT" => $arSelect
)
Вместо
"FILTER_NAME" => "arrFilter"
//////////////
"FILTER_NAME" => "arrFilter" - дань традиции, но потенциальная уязвимость из-за эмуляции register_globals=on
UPD
Исправил вместо $arReference правильнее $arRuntime. Но смысл параметра в том, чтобы связи создавать.
если можно выбрать хранение инфоблока в отдельной таблице?
или я чтото упускаю?
Они поэтому и названы хайлоад - высокая нагрузка = ничего лишнего. Поэтому, порой кажутся недоделанными.
а админку можно сделать на битриксовом компоненте гридов
кроме того хайлоад блоки требуют редакции Старт
если бы эти хайлоад блоки работали из коробки с nosql базами типа tarantool или redis то было бы какоето преимущество перед данным способом с таблицами и действительно можно было бы вставить слово хайлоад.
а для реализации своего кеширвоания мне не хватало для обновления лишь событий на добавление и удлаение hl-блоков - к каждой сущности есть событие на добавление изменение и удаление, но чтобы автоматом все это регистрировать нужно общее событие.
HL-блоки же это надстройка над такими простейшими запросами. Как бы не получилось опасности, что включил кеширование и забыл, так как такое кеширование должно будет включаться на уровне каждого HL.
На уровне компонента такое делать неправильно. Компоненты в HL одно название, они просто пример скорее, показывающий как выводить данные.
Понятно как получить название.
А как через АПИ обновить название hl-блока?
Название сущности должно начинаться с заглавной буквы и состоять только из латинских букв и цифр
Вы неправильно поняли меня. Мне необходимо изменить не название сущности, а языкозависимое название highload-блока.
В посте рассказывается как получить языкозависимое имя, но как его задать я не могу найти.
\bitrix\modules\highloadblock\admin\highloadblock_entity_edit.php
По каким то причинам код работает в админке, но на паблике на файле result_modifier не работает, в массиве "NAME_LANG" пусто возвращает. Изза чего может быть?
1. проверить, что константа LANG в публичке действительно соответствует заполненному языку в хайлоад-блоке.
2. убедиться, что установлены последние актуальный обновления.
3. обратиться в техподдержку, они помогут локализовать баг, может он и на нашей стороне.
Допустим у нас есть сайт ИМ где есть 3 города и 3 языковых версий: у нас получится 6 сайтов, а полей для языкозависимых названий будет 3! при этом значение LANG и SITE_ID одинаковые, и смысл существования двух констант с одинаковыми значениями, непонятен.
Соответственно определение константы для паблика и для админки идет по разному:
Именно поэтому у меня кусок кода из пункта 2 отрабатывает одно на паблике, другое в админке. и пока я не понимаю как сделать так, чтобы в файл include.php не вносить изменения, т.к. всетаки это ядро, и при след. обновлении слетит?
hblock_read на hl_element_read