Ленивый программист и многообразие свойств инфоблока Битрикс
Антон Долганин14 Декабря 2015 10:0312048
Всем известна поговорка «Хороший программист — ленивый программист». Суть в том, что вместо того чтобы сгоряча бросаться на задачу, лучше посидеть подумать. Разберем на примере эту поговорку.
Итак, сначала задача. Определенное св-во в списке элементов показывать только в определенном периоде дат. Вроде бы просто, но на деле получаем, что нам для каждого выводимого элемента нужно сверять довольно тяжелое свойство дата-время с текущим временем. Это удар по производительности.
Вариант следующий. Обходить периодически прокисшие элементы и грохать там свойство. Вариант, но мы теряем накопленные данные. Может и не критично, но не очень хорошо.
Еще вариант, хранить в доп. свойстве таймстамп сохраняемой даты. Но тут снова проблема — занимаем +1 свойство в инфоблоке, которые не бесконечны, а так же опять лень — это же обработчик писать!
Думаем. А что если взять штатное свойство дата-время и просто его изменить? Хранить не как дату, а как таймстамп? Идея!
Но блин, это же целый тип свойства городить, скажете вы? А вот и нет, мы берем и наследуемся от родительского типа дата-время
Эврика! То, что мы и хотели — быстрая работа при выводе — это обычный таймстамп теперь, и старые добрые интерфейсы для редактора. А по коду мы просто переопределили сохранение.
Я не хотел этим постом рассказать о супер-свойстве, это вообще очень частная задача была рассмотрена, я хотел показать подход к решению задач вкупе с высокой производительностью вашего проекта. Но вместе с тем — вот полный листинг типа свойства http://bxapi.ru/code/UYj14KGAaXphEbw/
Получается, чтобы кастомизировать шаблон вывода стандартного свойства "Список", мне нужно городить полностью новый класс для пользовательского нового свойства "Мой список". Я думал можно скопировать стандартный и поменять метод GetPropertyFieldHtml.
Почему так?
А не так:
Или так:
Вроде, пост о производительности, но здесь заставляем вычислять длину строки.
Поясните пожалуйста, я не понял.
2. Это идет сохранение в базу, что возможно только в админке (в моем случае), поэтому тут роли не играет.