• Как создать кастомное действие с привязкой к элементу?

    gromdron
    @gromdron
    Работаю с Bitrix24
    Впринципе не сложно.

    Для начала Вы подписываетесь на событие OnAdminListDisplay модуля Main.
    Именно оно отвечает за действие ДО вывода любого списка элементов в административной панели (за исключением под-листов у инфоблоков и модуля производительности).
    На вход оно принимает лишь 1 параметр - экзепляр класса CAdminList (см. /bitrix/modules/main/interface/admin_list.php)

    Чтобы обрабатывать нужную таблицу, нужно ограничить выборку. Т.е. Ваш обработчик будет выглядеть как-то так:

    <?php
    AddEventHandler("main", "OnAdminListDisplay", "MyOnAdminContextMenuShow");
    function MyOnAdminContextMenuShow(&$oAdminList)
    {
        /**
         * $type - тип кода инфоблока, например news, events и т.д.
         * $iblock - идентификатор инфоблока
         * 
         * Если интересует каталог, то вместо tbl_iblock_list_ нужно использовать tbl_product_list_
         */
        if ( $oAdminList->table_id == "tbl_iblock_list_".md5($type.".".$iblock) )
        {
            // полезные действия
        }
    }
    ?>


    Собственно так, мы получаем возможность работать с выводом.
    Для более подробного пояснения лучше прочитать про заказные элементы в административной панели в документации: https://dev.1c-bitrix.ru/api_help/main/general/adm...

    Собственно добавим нужные нам данные для работы. Предположим, я хочу логгировать выделенные элементы на странице, тогда мой код будет выглядеть так:
    AddEventHandler("main", "OnAdminListDisplay", "MyOnAdminContextMenuShow");
    function MyOnAdminContextMenuShow(&$oAdminList)
    {
        /**
         * $type - тип кода инфоблока, например news, events и т.д.
         * $iblock - идентификатор инфоблока
         * 
         * Если интересует каталог, то вместо tbl_iblock_list_ нужно использовать tbl_product_list_
         */
        if ( $oAdminList->table_id == "tbl_iblock_list_".md5("structure.4") )
        {
        	$arActions = $oAdminList->arActions;
    
        	$arActions['alert'] = 'Ругаться!';
    
        	$oAdminList->AddGroupActionTable($arActions);
        }
    }
    
    AddEventHandler("main", "OnAfterEpilog", "iblockAlert");
    
    function iblockAlert()
    {
    	$oRequest = \Bitrix\Main\Application::getInstance()->getContext()->getRequest();
    
    	// Проверяем, что работает только в админке
    	if ( $oRequest->isAdminSection() )
    	{
    		if (
    			// Интересуют только интерактивные запросы
    			$oRequest->get('mode')=='frame'
    			// Где передана переменна IBLOCK_ID
    			&& $oRequest->get('IBLOCK_ID')==4
    			// Соответствующие нашему action
    			&& $oRequest->get('action')=='alert'
    			)
    		{
    			/**
    			 * Вот тут можно сделать что угодно
    			 * Можно получить выделенные ID
    			 * через $oRequest->get('ID')
    			 * Если он пуст, значит действие на всех элементах инфоблока
    			 */
    		}
    	}
    }


    На самом деле параметров гораздо больше - есть еще custom области, которые можно выводить, но суть та же. Если захотите добавить свое поле (я добавлял простой action), то лучше глянуть в исходники и там уже по аналогии разрбраться
    Ответ написан
    3 комментария
  • Как задать ширину для потомка в процентах?

    webirus
    @webirus
    Тыжверстальщик! Наверстай мне упущенное...
    https://jsfiddle.net/webirus/jmbnsndz/
    Как вариант, перенести открывающий и закрывающий li на одну строку.
    Этот отступ между inline-block можно победить разными способами.
    Ответ написан
    Комментировать
  • Как сделать по блочную прокрутку?

    @igumenov
    Можно через is отследить высоту блока 1го сравнить с текущим скроллом и по завершению фокус перевести на следующий элемент
    Ответ написан
    Комментировать