Полное наследование компонентов

Рейтинг: 11.1607  
На голосовании
Предложил Сальников Дмитрий 12.08.2014 12:41:59

Полное наследование компонентов

Сейчас реализована возможность наследоваться от других компонентов следующим образом:
CBitrixComponent::includeComponentClass("bitrix:catalog.viewed.products");
class CSaleBestsellersComponent extends CCatalogViewedProductsComponent{ 
... 
}
Но так происходит наследование только class.php. т.е. если я хочу только чуть-чуть изменить логику обхода элементов полученных в getlist, я все равно должен скопировать и шаблон, и описание, и параметры, и языковые файлы.

Как не странно, но указание напрямую адреса наследуемого файла параметров приводит к ошибке в публичке (повторные ajax запросы и зависание в визуальном редакторе при попытке отредактировать параметры компонента).

include($_SERVER['DOCUMENT_ROOT'].'/bitrix/components..../.parameters.php') ;
Хотелось бы увидеть что-то вроде:
CBitrixComponen::includeParametrsByParentName("bitrix:catalog.viewed.products");  
CBitrixComponen::includeTenplateByParentName("bitrix:catalog.viewed.products",'.default');

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

Рейтинг: -1  
Сахно Владимир 07.07.2016 10:00:12
Подключить родительский шаблон можно. Например, так.
Рейтинг: 0  
Тропин Леонид 01.02.2017 10:39:45
Очень полезная штука. Особенно, если надо
только чуть-чуть изменить логику.
Без этого "наследование компонента", превращается в копипаст.

Как вариант, пусть недостающие файлы наследуются автоматом, если пути совпадают, только кастомный компонент в папке local, а родительский в папке bitrix. Например:
/bitrix/components/bitrix/catalog.element/ будет родителем для /local/components/bitrix/catalog.element/
Рейтинг: 0  
Малахов Артем 02.02.2018 13:31:44
must have, это уже давно "наболело"