Буквально недавно вышло чудное обновление главного модуля 9.5.10, в котором помимо прочего прилетела одна вкусность, идеологию которой я попытаюсь объяснить. [spoiler] С чего все началось. С открытием Marketplace все больше разработчиков начало создавать свои решения. Но все уперлось в то, что для добавления одной незначительной детали требовалось создавать не только свои модули, но и целые административные страницы, дублирующие уже существующие. Ну, например, чтобы расширить тип баннера своими настройками, нужно создавать свою копию страницы редактирования типа баннера. Мягко говоря, неудобно.
Решить эту проблему (хотя бы как-то) призваны следующие события:
OnAdminContextMenuShow:
OnAdminListDisplay:
(Да, прилетающий массив содержит ссылки на все эти элементы, доступы вы сможете получить к любому, дополнив список, или изменив его. Фактически вам отдается вообще весь контент списка. Возможности безграничны.)
OnAdminTabControlBegin
Все события имеют документацию, где в принципе все понятно объяснено. Я же опишу философию, что ли, применения. Рассмотрю на примере последнего события.
Итак, задача нашего модуля (а эти события прежде всего призваны помогать создавать удобные массовые решения, повторюсь) это снабдить каждый инфоблок настройкой "отправлять уведомления на e-mail об изменениях элементов". Этакий Документооборот на Старте.
Ну все, дело за малым - при добавлении элемента ИБ просто проверяем стоит ли данная галочка - и если стоит, то шлем мыло Это оставляю на домашнее задание.
Остальные события обрабатываются аналогичным образом. Зависит от вашей задачи.
Эхма Где ж они раньше были. У меня уже давно целый фреймворк JSовский для этих кнопочек наработан Ну терь можно от части костылей избавиться хоть. Радует.
еще хорошо было бы иметь возможность не только добавлять вкладки, но еще и редактировать контент уже существующих вкладок. Например, в модуле "техподдержка" с помощью событий сделать свою форму редактирования тикета.
И еще хорошо бы чтобы можно было расширять или дополнять АПИ существующих модулей. Например, если в модуле "техподдержка" нужно добавить новые поля "желаемая дата выполнения" и "ориентировочная дата выполнения", то это можно было бы сделать без изменения ядра модуля. Ну и чтобы фильтровать по этим полям можно было потом.
Хотя может тут проще и надежнее свою техподдержку с нуля делать.
Например, если в модуле "техподдержка" нужно добавить новые поля "желаемая дата выполнения" и "ориентировочная дата выполнения", то это можно было бы сделать без изменения ядра модуля. Ну и чтобы фильтровать по этим полям можно было потом.
Ковырял страницу подписки. Никак не могу мое значение получить. Потом вернул все в исходное состояние и этот код не работает:
AddEventHandler('main', 'OnBeforeProlog', 'MyOnBeforePrologHandler');
function MyOnBeforePrologHandler()
{
if ($GLOBALS['APPLICATION']->GetCurPage()=='/bitrix/admin/posting_edit.php' && $_REQUEST['ID']>0)
{
echo '<pre>';
print_r($_POST);
print_r($_REQUEST);
echo '</pre>';
}
}
С request все понятно, но в post ничего не попадает. Рассылка создается и сохраняются изменения, с этим все ок. Но массив пустой. Может другое событие ловить? Подскажите, пожалуйста, как post-данные выловить?
scifi так после POST сразу идет редирект, и данный хит вы не видите. Сделайте die(). Что-то типа if (isset($_POST) && !empty( $_POST )) {print_r( $_POST ); die();}
Как сделать так чтобы при добавлении в меню действия срабатывал не AJAX а был либо на эту страницу POST либо на другую, вообще в идеале передать ID на другую страницу на которой отрабатывает компонент, который делает манипуляции с ID элементов и выдает пользователю информацию в новом окне браузера?
Долганин Антон Я сформировал свое действие AddEventHandler("main", "OnAdminListDisplay", "MyOnAdminListDisplay"); function MyOnAdminListDisplay(&$list) { echo "<pre>"; print_r($list); echo "</pre>"; //echo "<pre>"; print_r($_REQUEST); echo "</pre>";
Группы на сайте создаются не только сотрудниками «1С-Битрикс», но и партнерами компании. Поэтому мнения участников групп могут не совпадать с позицией компании «1С-Битрикс».