Добро пожаловать на сайт <БагБД>, где вы можете задавать вопросы о программировании и разработке на Битрикс и Битрикс24, и получать быстрые и квалифицированные ответы от профессионалов!

Как добавить в админку своё групповое действие с параметрами ?

00 голосов
2
Скопировал файл www/bitrix/modules/iblock/admin/iblock_list_admin.php в свою папку, положим www/test, он работает с небольшими глюками, по дереву ходит, всё выбирается.

В районе строки 544 вставил отладочную печать, вернее дамп данных в файл - получился список выбранных элементов:
Код
// Handle actions here
if(($arID = $lAdmin->GroupAction()))
{
   if($_REQUEST['action_target']=='selected')
   {
      $rsData = CIBlockSection::GetMixedList(Array($by=>$order), $arFilter);
      while($arRes = $rsData->Fetch())
         $arID[] = $arRes['TYPE'].$arRes['ID'];
   }

   file_put_contents('~id_hack.txt',var_export($arID,True));
   foreach($arID as $ID)
   { ...


А дальше что ? Как вставить в выпадающий список "действия" свои элементы, чтобы потом ловить их и отрабатывать ?
Откуда вообще берётся эта форма, как добавить в неё свои элементы - выбор свойства и поля для значения, напрмер ?
спросил 16 Янв, 14 от Shinok (200 баллов)

2 Ответы

00 голосов
ответил 03 Май, 14 от Pomnep (13,960 баллов)
00 голосов
Цитата
Евгений Жуков пишет:
Нужный раздел документации с примерами ?


Спасибо, сделал !
Ищем ->AddGroupActionTable, в блок где заполняется массив $arActions вставляем:
Код
// Action bar
if(!$bReadOnly)
{
   $arActions = array(
      ...
      "set_property" => "Установить свойство", # FIXME GetMessage()
   );

   if($arIBTYPE["SECTIONS"] == "Y")
   {
      ...
      # Add property setter
      $rsProps = CIBlockProperty::GetList(array(),array('IBLOCK_ID' => $_REQUEST['IBLOCK_ID']));
      $properties = ' <select name="property_code" size="1"><option value="">'.GetMessage("MAIN_NO").'</option>';
      while($ar = $rsProps->GetNext())
      {
         $properties .= '<option value="'.$ar["CODE"].'">'.$ar["NAME"].'</option>';
      }   
      $arActions["property_chooser"] = array("type" => "html", "value" => $properties);
      $arActions["property_value"] = array("type" => "html", "value" => '<input type="text" name="property_value" size="5">');
   }


Потом ищем ->GroupAction, видим начало обработчика:
Код
// Handle actions here
if(($arID = $lAdmin->GroupAction()))
{
   if($_REQUEST['action_target']=='selected')
   {
      $rsData = CIBlockSection::GetMixedList(Array($by=>$order), $arFilter);
      while($arRes = $rsData->Fetch())
         $arID[] = $arRes['TYPE'].$arRes['ID'];
   }

   foreach($arID as $ID)
   {
, в конец развесистого CASE вставляем:
Код
      case "set_property":
         if($TYPE=="E") {
            CIBlockElement::SetPropertyValuesEx($ID,false,array($_REQUEST['property_code'] => $_REQUEST['property_value']));
         }
         break;

И в начало файла, чтобы работала интернационализация, вставил имя оригинального файла:
Код
#IncludeModuleLangFile(__FILE__);
IncludeModuleLangFile($_SERVER["DOCUMENT_ROOT"].'/bitrix/modules/iblock/admin/iblock_list_admin.php');


Кстати, а куда правильно класть такие файлы ? Как сделать его доступным из админки ? Не заводить же новый модуль ради небольшого патча, который по сути "должен был быть" в оригинале !
ответил 28 Авг, 14 от Shinok (200 баллов)

Похожие вопросы

0 голосов
3 ответов
0 голосов
3 ответов
спросил 30 Авг, 13 от tigrus (120 баллов)
0 голосов
2 ответов
спросил 12 Фев, 14 от Asteria (1,840 баллов)
0 голосов
0 ответов
спросил 13 Янв, 13 от FIL3 (180 баллов)