Написать компонент «Список новостей», верна ли логика?
Доброго времени суток! Я не буду просить помощи или спрашивать о решении вопроса, мне необходимо получить от вас обратную связь в плане моей реализации, заранее всем благодарен.
Задача: Написать компонент новостей. Компонент должен выводить список новостей и табы по годам на основе добавленных новостей.
Компоненты никогда не писал, всегда использовал api в коде. В плане вывода новостей вопросов нет. В плане фильтрации по годам планирую делать так: в фильтр гетлистa передать get параметр, табы сделать в виде ссылок. Возможен ли такой вариант использования или есть наиболее лучшие варианты? Всем спасибо, кто ответил.
Дмитрий, я не то имел ввиду:
- вне компонента, как отдельный блок
- в самом компоненте
- в шаблоне компонента
Где ты предполагаешь сделать вывод фильтра?
PetrPo, задача:
• Компонент должен выводить список новостей и табы по годам на основе добавленных новостей.
• По умолчания нужно показывать ближайшего года.
• Должна быть реализована постраничная навигация.
• Реализация должна быть с минимум вёрстки.
Отображение данных
• Табы с годами, при клике на который, идёт переход на нужный год.
• Плитка новостей с полями.
• Постраничная навигация.
Возможно я неверно мыслю, но на ум приходит только сделать табы с гет параметрами и в гетлист передавать фильтр
Дмитрий, дилема в том, что для построения правильной постранички тебе надо передать в гетлист фильтр (как ты и написал), теперь про варианты размещения фильтра:
1. В самом компоненте - файлы component.php/class.php предназначены только для логики, никакого html в них быть не должно, если ты так сделаешь я думаю тебя сразу домой отправят.
2. Вариант сделать его все таки в шаблоне комопнента, звучит вроде бы лучше, но!
- получается, что твой компонент зависит от данных получаемых в его шаблоне - дерьмовое архитектурное решение - в идеале нижний (сам компонент) не должен знать о том, что происходит выше него (шаблон)
- данные, которые ты будешь писать в гет, например ?date1=DATE, будут жестко зашиты в шаблоне, а шаблонов может быть много и не ты один их можешь накопировать, т.е. надо будет не date1, а date2 сделать, все полный п... наступит
Дальше даже продолжать с этим вариантом нет смысла.
3. Остается вариант - вне компонента, как отдельный блок, сразу в глаза бросается что он как отдельный блок - плохо, сломать можно, а почему бы тогда не сделать его как раз отдельным компонентом, со своими настройками (дальше просто пример настроек навскидку):
- выводить фильтр по датам (Y/N)
- название переменной для get
- можно например добавить выбор свойств, как дополнительный фильтр - не обязательно сразу, можно и потом это сделать, если понадобится
Дальше два варианта вижу:
1. Как в битриксе catalog.smart.filter записать в глобальный фильтр и передать его в компонент списка новостей
2. Можно написать не через component.php, а через class.php (компоненты 2.0., пример). В методе executeComponent вернуть сформированный/отформатированный как надо массив для фильтра и потом уже перед компонентом новостей добавить глобальный фильтр и передать его через параметры
Гибкость, расширяемость, разделение логики и представления. По сути даже компонент новостей не надо кастомить, если прямо надо кастомить - ну копируешь стандартный и удаляешь что-нибудь лишнее)) а еще лучше тоже на класс переносишь.
UPD
если новости не переписывать, то еще и тестить проще, компонент у тебя остается 100% рабочим, т.е. косяки могут быть только в самом фильтре, а там логики х.й да маленько.