Кнопки редактирования элементов инфоблока в режиме правки

В дополнение к статье Редактирование и удаление элементов и разделов из публичной части сайта Битрикс дополню реализацию следующего случая: как отобразить кнопки редактирования элементов инфоблока в режиме правки, если вывод этих элементов осуществляется простым GetList-ом

Собственно реализация:

CModule::IncludeModule("iblock");

//создаём экземпляр CBitrixComponent 
//для привязки к элементам инфоблока
//кнопок редактирования:
$app = new CBitrixComponent();

//какой-то гетлист...
$elems = CIBlockElement::GetList(array("SORT"=>"ASC"), 
                            array('IBLOCK_ID' => 2,
                                  'ACTIVE' => 'Y'
                                 ), 
                            false, 
                            false, 
                            array('ID',
                                  'IBLOCK_ID',
                                  'NAME'
                                 )
                            );
while ($elem = $elems->Fetch()){

 $arButtons = CIBlock::GetPanelButtons(
     $elem["IBLOCK_ID"],
     $elem["ID"],
     0,
     array("SECTION_BUTTONS"=>false, "SESSID"=>false)
 );

 $elem["ADD_LINK"] = $arButtons["edit"]["add_element"]["ACTION_URL"];
 $elem["EDIT_LINK"] = $arButtons["edit"]["edit_element"]["ACTION_URL"];
 $elem["DELETE_LINK"] = $arButtons["edit"]["delete_element"]["ACTION_URL"]; 

 $elem["ADD_LINK_TEXT"] = $arButtons["edit"]["add_element"]["TEXT"];
 $elem["EDIT_LINK_TEXT"] = $arButtons["edit"]["edit_element"]["TEXT"];
 $elem["DELETE_LINK_TEXT"] = $arButtons["edit"]["delete_element"]["TEXT"];

 $app->AddEditAction($elem['ID'], $elem['ADD_LINK'], $elem["ADD_LINK_TEXT"]);
 $app->AddEditAction($elem['ID'], $elem['EDIT_LINK'], $elem["EDIT_LINK_TEXT"]);
 $app->AddDeleteAction($elem['ID'], $elem['DELETE_LINK'], $elem["DELETE_LINK_TEXT"], array("CONFIRM" => 'Точно удалить?'));

 ?>
 <div id="<?=$app->GetEditAreaID($elem['ID'])?>">
    <!--какие-то данные элемента инфоблока-->
 </div>
 <?

})

Обход проактивной защиты Bitrix

Коллеге недавно потребовалось добавить видос в детальное описание элемента инфоблока Битрикс, но система по какой-то причине никак не хотела давать возможность это сделать. Обычный тег «iframe» преобразовывался в «if frame».

Оказалось, что это результат работы модуля Проактивной защиты Bitrix.

Чтобы обойти защиту, необходимо в свойствах группы пользователей, которые могут редактировать нужные элементы инфоблока, выставить следующий флаг:

(Настройки / Группы пользователей / Нужная группа / Доступ / Проактивная защита [F] Обход проактивного фильтра)

Если не помогло, можете также в настройках проактивного фильтра выставить следующие настройки:

Читать далее

Как распаковать многотомный архив Битрикс

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

К примеру у нас архив состоит из двух файлов:

2016-05-04.16-13-32.88sr3bcx.tar.gz
2016-05-04.16-13-32.88sr3bcx.tar.gz.1

Переименовываем их в:

2016-05-04.16-13-32.88sr3bcx.tar.gz.001
2016-05-04.16-13-32.88sr3bcx.tar.gz.002

И можно распаковывать. После распаковки мы получим целый файл архива с расширением tar. Распаковываем его и вот они наши файлы.

Как сделать Update пользователя в обработчике OnAfterUserUpdate без зацикливания.

В обычной ситуации при вызове функции Update класса CUser в обработчике OnAfterUserUpdate приведёт к повторному вызову OnAfterUserUpdate и так по кругу. Таким образом получается замкнутый цикл и скрипт начинает вызывать сам себя бесконечное число раз.

Как же выйти из этой ситуации?

Вариант 1:

А вот как:

В init.php вызываем обработчик:

AddEventHandler("main", "OnAfterUserUpdate", array("CUserHandler", "OnAfterUserUpdateHandler"));

А вот в самом классе CUserHandler делаем такую хитрость:

class CUserHandler
{
	public static $disableHandler = false;
	public static $element_id = '';
	
	function OnAfterUserUpdateHandler(&$arFields){
		if ((self::$disableHandler)&&($arFields['ID']==self::$element_id)){
			return;
		}
		
		self::$disableHandler = true;
		self::$element_id = $arFields['ID'];
		
		//ниже вызываем Update юзера
		//...
	}
}

Смысл в том, что при первом вызове OnAfterUserUpdateHandler всё, что ниже условия проверки значений $disableHandler и $element_id выполняется, а при последующих вызовах — нет.

Вариант 2:

Обновлять св-во по ссылке (т.к. на вход функции подаётся &$arFields )

Полезности о input -ах типа file в Битрикс

Обычно народ просто ставит

<input type="file" name="file" value="файлег">

Но это не по нашему! Выглядит стандартно, да и нет никакой валидации по типу файла, если мы, к примеру, хотим загружать только файлы определённого типа.

Итак, для начала давайте подумаем, что мы хотим:

  1. Реализовать в форме input типа file, принимающий только картинки
  2. Около input -а должна быть надпись с названием файла, который мы будем загружать после выбора оного в диалоговом окне
  3. Файл-картинку из этого input-а нужно загружать в инфоблок
  4. Предусмотреть обработку ошибки, когда физический размер картинки больше установленного в php.ini

Давайте для начала реализуем пункт 2.

Как это должно выглядеть в идеале:

Joxi

Пример вёрстки: ТЫК

Листинг кода:

Читать далее