Рейтинг: 0  
Новая
Предложил Белоконь Дмитрий 07.09.2016 11:12:19

Дать возможность подключать эпилог компонента самостоятельно

Добрый день.
Возник момент с кастомным кешированием в своем компоненте.
Согласно этому курсу (https://dev.1c-bitrix.ru/learning/course/?COURSE_ID=43&LESSON_ID=3053), подключение шаблона можно размещать как в кешируемой области, так и вне её.
При подключении шаблона в кешируемой области собственного компонента со сложным кешированием шаблон не отрабатывает вообще - сразу выводится html-кеш.
Разница в том, что в стандартных компонентах используется метод StartResultCache и при этом template.php кешируется полностью и выводится как html-кеш. При этом из кеша на хите достаются переменные VARS из файла кеша и передаются в component_epilog.php, что не происходит, если строить свое кеширование согласно вышеуказанному курсу.  
Покопавшись в исходниках, выяснил, что в метод startResultCache() вшит также метод includeComponentEpilog(), которого нет в классах кастомного кеширования и в документации.
При этом входящие данные для него от родительского компонента в своем дочернем компоненте получить нельзя, так как свойство, в котором хранится путь и данные для метода includeComponentEpilog() лежат в родительском свойстве __component_epilog, которое имеет модификатор доступа private и недоступен в потомке.
В связи с этим кастомное кеширование получается неполноценным, т.к. для использования в шаблонах component_epilog, нужно подключение шаблона обязательно выводить из кешируемой области.
Прошу дать возможность разработчику самостоятельно подключать эпилог компонента в своем компоненте.  
Рейтинг: 2.8596  
На голосовании
Предложил Ерофеев Анатолий 16.06.2014 17:31:35

Методы для получения настроек и описания компонента в class.php

Раз уж переходим к ООП в компонентах, то давайте делать и следующие шаги в этом направлении. Похоронили component.php, покусимся и на .parameters.php, .desсription.php. Ведь фразы вроде “Есть возможность наследования компонент” не выдерживают критики. Да, когда нужно создать похожий компонент, мы копируем не три файла, а всего два (+ не забываем про шаблоны). Почему бы не сделать в CBitrixComponent два новых метода - getDescription и getParameters, которые бы заменили эти старые добрые процедурные файлы?

P.S. К слову о шаблонах - почему бы не давать компоненту пользоваться шаблонами родительского компонента?
Рейтинг: 29.7696  
На голосовании
Предложил Солуянов Вадим 09.10.2013 11:25:21

Добавить component_prolog.php в компоненты

Часто возникает потребность обновить область страницы, где выводится один компонент, из шаблона другого компонента (например добавление в корзину через AJAX в каталоге требует обновления области малой корзины, добавление комментария к новости - обновления списка новостей в боковой колонке и т.п.). Отсюда и возникла идея. Если уж был в свое время добавлен component_epilog.php, то почему бы не добавить component_prolog.php, который запускался бы всегда независимо от кэша.
При его наличии мы могли бы организовывать ajax-взаимодействия компонентов на странице через шаблоны данных компонентов.
Например, в шаблоне малой корзины пишем javascript-функцию, которая вызывает текущую страницу с определенным параметром; в component_prolog.php проверяем наличие в запросе данного параметра и, если установлен, делаем $APPLICATION->RestartBuffer(); в component_epilog.php, соответственно, при установленном параметре делаем exit;
В шаблонах компонентов, где происходит ajax-добавление в корзину, проверяем наличие упомянутой выше javascript-функции и дергаем ее, если есть.
Дешево и сердито.
Рейтинг: 52.1513  
На голосовании
Предложил Шерлок Холмс 29.09.2013 02:18:10

Возможность скрывать параметры в стандартных компонентах

Мы можем добавлять свои параметры для стандартных компонентов с помощью файла .parameters.php в шаблоне компонента, но нехватает еще одной важной штуки - возможности убирать некрторые стандартные параметры (и переименовывать тоже было бы хорошо).

Например, я использую компонент bitrix:catalog, и потом отдаю его в продакшен под управление клиенту, но мне нужно скрыть из него ненужные параметры, чтобы не навредить (например, настройки ЧПУ, которые всё равно дублируются в инфоблоке, или типы цен). И оставить только самое нужное (например, кол-во элементов на странице, параметры сортировки, выбираемые свойства, и еще пару мелочей).



Зачем клиенту лицезреть эту простыню из стандартных параметров, 90% из которых задаются один раз, разработчиком, и лучше чтобы он их менял, а контент-менежер или клиент - их не видели, и если нужно - могли менять через код (или галочку "показать все настройки";).
Рейтинг: -2.9027  
На голосовании
Предложил Шерлок Холмс 19.09.2013 13:45:21

Убирать из результата стандартых компонентов значение с ~тильдой (по параметру)

Зачем каждый раз в компоненте выбираются дублирующие значения с тильдой?
            1 => Array[48]
                ID => "1"
                ~ID => "1"
                NAME => "Имя получателя"
                ~NAME => "Имя получателя"
                TYPE => "TEXT"
                ~TYPE => "TEXT"
                REQUIED => "Y"
                ~REQUIED => "Y"
                DEFAULT_VALUE => ""
                ~DEFAULT_VALUE => ""
                IS_LOCATION => "N"
                ~IS_LOCATION => "N"
                PROPS_GROUP_ID => "1"
                ~PROPS_GROUP_ID => "1"

Могу представить только единичные случаи, где это может понадобится, и то, есть замечательные фукнции вроде htmlspecialcharsBack() которые могут вернуть в исохдный вид обработанный код.

Но зато у нас ровно в два раза увеличивается размер кеша, и приходится дольше скролить мышкой когда мы смотрим что же у нас в arResult.

В своих компонентах всегда можно написать $dbElement->GetNext(true, false);, а в дефолтных приходится всегда наблюдать это чудо.

Давайте сделаем какой-то служебный параметр вроде "SHOW_TILDA" => "N", и если он задан - то чистить код и убирать всё лишнее.
Рейтинг: 30.5045  
На голосовании
Предложил Зайцев Артемий 28.05.2013 10:59:50

В компонентах для свойств типа список разрешить переменные

Почему нельзя делать так?
$arPrices = array( "BASE" );

А в настройках компонента так?
"FILTER_PRICE_CODE" => $arPrices,

Потому что при сохранении настроек компонента станет "FILTER_PRICE_CODE" => ""

Форма редактирования настроек компонента не знает, что список можно передать через переменную. И затирает.

А я всего-лишь хочу передать в компонент "catalog" свой собственный список цен через переменную.