Уже довольно давно битрикс позволяет наследоваться от компонентов. Звучит круто, но после перехода на новый catalog.section звучит уже не так круто.
Проблема простая - они убрали из catalog.section возможность показа нескольких цен. Убрали как? Правильно, зашили в ядре. Теперь есть только 1 цена - минимальная.
Ну, думаю, не беда. Добавлю получение цен в result_modifier.php. Посмотрел количество кода и зависимостей и подумал, не-е... лучше отнаследуюсь. А то потом поддерживать.
Начал наследоваться. Всё шло хорошо... первую минуту. Я хотел получить лишь список цен из свойства prices. Сперва оно заполняется относительно нужными данными по всем ценам. После чего в другом месте
перезаписывается на минимальную из всех цен. После этого передаётся в элемент и в дальнейшем очищается.
Хорошо, есть методы для получения raw-цен. Получил, вызвав его в своём компоненте. Но вот опять беда... Далее происходят махинации в Base::calculatePriceBlock. А происходит там следующее - по всем ценам считаются скидки, флаги и т.п., т.е. для стандартной работы всё это важно. После чего возвращает, ВНИМАНИЕ, минимальную из всех цен.
Выход лишь 1. Переопределить весь этот метод и куда-нибудь ещё сохранять цены, а потом уже из них в шаблоне выводить то, что мне нужно. К чему это приведёт? А всего-лишь к переопределению 300 строчек кода, отвечающих за цены. А как мы знаем, цены - одна из самых меняемых частей в битриксе. Ведь это основа продаж, а фичи выходят каждый мажорный релиз.
Вот прихожу к выводу, что наследование - это здорово, но вот только теперь мне придётся с каждым обновлением следить за этими 300 строчками. И это только 1 компонент. А если их 5, 10?
Пока битрикс освоил возможность наследования, но довести до ума всё ещё сложно им. Хуже только класс с 1 методом, который и можно переопределить. А всё остальное внутри метода.
P.S. Почему вы решили за нас, что список цен нам не нужен в списке элементов? Тем более, что они и так все присутствуют в расчётах. Это просто хамство.
P.P.S. Ну делите как-то более качественно на методы. Ведь можно было сделать 1 метод для расчёта цен, а второй для получения минимальной цены. Это 2 разных действия. Не правда ли?
P.P.P.S. Если кто знает решение этой проблемы, буду благодарен