arrilot/bitrix-hermitage

This package is abandoned and no longer maintained. No replacement package was suggested.
Maintainers

👁 Arrilot

Package info

github.com/arrilot/bitrix-hermitage

pkg:composer/arrilot/bitrix-hermitage

Statistics

Installs: 5 410

Dependents: 4

Suggesters: 0

Stars: 11

Open Issues: 0

1.1.1 2018-03-22 17:07 UTC

Requires

  • php: >=5.4.0

Requires (Dev)

None

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 7d38d7d3af728d078171d617bf469082148ef7d0

  • Nekrasov Ilya <nekrasov.ilya90.woop@gmail.com>

bitrix

This package is auto-updated.

Last update: 2023-01-29 03:34:22 UTC


README

👁 Latest Stable Version
👁 Total Downloads
👁 Scrutinizer Quality Score

Данный пакет больше активно не поддерживается

Причина - мы больше не используем Битрикс в своих проектах. Если вам интересен этот проект и вы хотите заняться его поддержкой - форкните его и создайте Issue в данном репозитории чтобы мы поместили здесь ссылку на форк.

Инструменты для работы с эрмитажем Битрикса

Установка

composer require arrilot/bitrix-hermitage

Использование

Данный пакет предоставляет простоё и удобное API для работы с сущностями Битрикса через эрмитаж (режим правки)

Поддерживает:

  1. Добавление, изменение, удаление элементов инфоблоков (есть в коробке Битрикса, но встроенное АПИ слишком перенагружено)
  2. Добавление, изменение, удаление разделов инфоблоков (есть в коробке Битрикса, но встроенное АПИ слишком перенагружено)
  3. Изменение, удаление элементов хайлоад блоков (нет в коробке Битрикса)

Пример с кнопками редактирования и удаления

// Без пакета
foreach($arResult["ARTICLES"] as $article) {
 $arButtons = CIBlock::GetPanelButtons(
 $article["IBLOCK_ID"],
 $article["ID"],
 0,
 array("SECTION_BUTTONS" => false, "SESSID" => false)
 );

 $article["EDIT_LINK"] = $arButtons["edit"]["edit_element"]["ACTION_URL"];
 $article["DELETE_LINK"] = $arButtons["edit"]["delete_element"]["ACTION_URL"];

 $areaId = 'iblock_element_' . $advice['ID'];
 $this->AddEditAction($areaId, $article['EDIT_LINK'], CIBlock::GetArrayByID($element["IBLOCK_ID"], "ELEMENT_EDIT"));
 $this->AddDeleteAction($areaId, $article['DELETE_LINK'], CIBlock::GetArrayByID($element["IBLOCK_ID"], "ELEMENT_DELETE"), array("CONFIRM" => 'Вы уверены, что хотите удалить элемент?'));

 ?><div id="<?=$this->GetEditAreaID($areaId)?>"><?= $article['NAME'] ?></div><?
}

// с пакетом
use Arrilot\BitrixHermitage\Action;

foreach($arResult["ARTICLES"] as $article) {
 ?><div id="<?= Action::editAndDeleteIBlockElement($this, $article) ?>"><?= $article['NAME'] ?></div><?
}

Аналогично с разделами инфоблоков и элементами highload блоков.

Группы методов:

Action::editAndDeleteIBlockElement($template, $element);
Action::editIBlockElement($template, $element);
Action::deleteIBlockElement($template, $element, $confirm = 'Вы уверены, что хотите удалить элемент?');

Action::editAndDeleteIBlockSection($template, $section);
Action::editIBlockSection($template, $section);
Action::deleteIBlockSection($template, $section, $confirm = 'Вы уверены, что хотите удалить раздел?');

Action::editAndDeleteHLBlockElement($template, $element);
Action::editHLBlockElement($template, $element);
Action::deleteHLBlockElement($template, $element, $confirm = 'Вы уверены, что хотите удалить элемент?');

Все эти методы возвращают строку которую надо вставить в id нужного html тэга.

Пример с кнопками добавления

Кнопки добавления в эрмитаже реализуются по-другому. Им не нужно указывать конкретный html блок, вместо этого они цепляются ко всему компоненту сразу.

// Без пакета
if($APPLICATION->GetShowIncludeAreas()) {
 $arButtons = CIBlock::GetPanelButtons($iblockId, 0, 0, [...]);
 $this->addIncludeAreaIcons(CIBlock::GetComponentMenu($APPLICATION->GetPublicShowMode(), $arButtons));
}

// С пакетом
\Arrilot\BitrixHermitage\Action::addForIBlock($this, $iblockId, [...]);
// В отличии от варианта выше, данный метод можно вызывать как в компоненте, так и в шаблоне. Он понимает и то, и другое в качестве первого параметра.

Массив опций [...] полностью соответствует массиву $arOptions метода CIBlock::GetPanelButtons Например, передав в него 'SECTION_BUTTONS' => false можно отключить показ кнопки добавления раздела, а передав 'CATALOG'=>true включить работу с модулем каталога. В простейшем случае этот параметр можно и вовсе опустить.

Что такое $element и $section?

$element и $section это массивы (либо объекты реализующие интерфейс ArrayAccess) Для инфоблоков они должны содержать ID и IBLOCK_ID. Для хайлоадблокрв они должны содержать ID и HLBLOCK_ID/HLBLOCK_TABLE_NAME. Также для инфоблоков в качестве $element и $section можно передать просто ID элемента или раздела инфоблока. В этом случае будут доп запросы в БД, но выполнены они будут только в режиме правки.

Замечание Если вы для хайлоадблоков используете eloquent из arrilot/bitrix-models, то стоит добавить следующий метод в модель:

public function getHlblockIdAttribute()
{
 return 1; // поменять на нужный идентификатор
}