Оптимальный вывод контента

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Закрыто
andrej3337
Сообщения: 46
Зарегистрирован: 2019.11.03, 16:02

Оптимальный вывод контента

Сообщение andrej3337 »

Здравствуйте.
Вопрос сильно начального уровня, если что не так ляпну сильно не пинайте...

Смотрю кругом вывод контента в шаблонах. Самые частые примеры - это через цикл и далее категория статьи, фото, контент, автор, просмотры и т.д. При этом если запрос к базе делать ...->asArray()->... то тут конечно хорошо по количеству запросов к базе, но плохо что не используется актив рэкорд с его удобством в работе (ну это расхожие споры в сети что я нарыл, сам пока не не дошел что к чему).

Так вот, у меня главная в шаблоне просто пестрит: там нужно по три превьюшки вывести для 5 категорий во вкладках своих каждая, далее 4 превьюшки из последних новостей, далее блок из 5 из другой категории и т.д., а уже в колонке так опять новые выборки популярных, комментируемых и проч.

Поюзал нарытое в сети древовидное меню, реализованное в качестве виджета со своим шаблоном и подумал:
1. А что если под каждую такую выборку сделать аналогичный виджет, вырезав из верстки данный блок контента и уже этот кусок через этот виджет уже выводить?
2. Или с точки зрения производительности все же лучше циклы использовать?
3. Выборка из базы используя ...->asArray()->... это действительно идея не очень или лучше забить и жадной загрузкой пользоваться + далее хеширование применять? Единственный минус для себя выяснил в это, что пока не нарыл как таким образом в шаблоне связанные данные выводить, например вместо артиклс->категори->нейм / артикл[контент] вывожу без проблем, а как название уже категории для этой статьи вывести непонятно.

Если сумбур/каламбур или бардак в моей голове непонятен, задавайте уточняющие вопросы ))) А то я как не программист не особо ориентируюсь в правильных терминах.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Оптимальный вывод контента

Сообщение ElisDN »

andrej3337 писал(а): 2019.12.05, 18:17 Так вот, у меня главная в шаблоне просто пестрит: там нужно по три превьюшки вывести для 5 категорий во вкладках своих каждая, далее 4 превьюшки из последних новостей, далее блок из 5 из другой категории и т.д., а уже в колонке так опять новые выборки популярных, комментируемых и проч.
Да, такие блоки удбно выводить виджетами.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Оптимальный вывод контента

Сообщение ElisDN »

andrej3337 писал(а): 2019.12.05, 18:17 Выборка из базы используя ...->asArray()->... это действительно идея не очень или лучше забить и жадной загрузкой пользоваться + далее кеширование применять? Единственный минус для себя выяснил в это, что пока не нарыл как таким образом в шаблоне связанные данные выводить, например вместо артиклс->категори->нейм / артикл[контент] вывожу без проблем, а как название уже категории для этой статьи вывести непонятно.
Для выборок можно и with(...)->asArray()->all() с той же жадной загрузкой делать.

И вместо $артикл->категори->нейм выводить $артикл['категори']['нейм'].
andrej3337
Сообщения: 46
Зарегистрирован: 2019.11.03, 16:02

Re: Оптимальный вывод контента

Сообщение andrej3337 »

ElisDN писал(а): 2019.12.05, 19:09 И вместо $артикл->категори->нейм выводить $артикл['категори']['нейм'].
Спасибо за ответ.
Хм так $артикл['категори']['нейм'] было логично и без мануала, но по какой-то причине ничего не вывелось...

А можно в двух словах, чем плох ->asArray()->, в мануале ведь дан совет без него выборку делать, хотя по мне так там ничего сверхъестественного для моих задач вроде нет
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Оптимальный вывод контента

Сообщение rak »

andrej3337 писал(а): 2019.12.05, 20:08
ElisDN писал(а): 2019.12.05, 19:09 И вместо $артикл->категори->нейм выводить $артикл['категори']['нейм'].
Спасибо за ответ.
Хм так $артикл['категори']['нейм'] было логично и без мануала, но по какой-то причине ничего не вывелось...

А можно в двух словах, чем плох ->asArray()->, в мануале ведь дан совет без него выборку делать, хотя по мне так там ничего сверхъестественного для моих задач вроде нет
да ничем он не плох, просто после asArray придется работать с сырыми данными из бд, как с массивом. со всеми вытекающими
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Оптимальный вывод контента

Сообщение ElisDN »

andrej3337 писал(а): 2019.12.05, 20:08 Хм так $артикл['категори']['нейм'] было логично и без мануала, но по какой-то причине ничего не вывелось...
Значит не сделали with('категори') и она не добавилась.
andrej3337 писал(а): 2019.12.05, 20:08 А можно в двух словах, чем плох ->asArray()->, в мануале ведь дан совет без него выборку делать
Ничем не плох. Наоборот, часто хорош по производительности для выборок.
andrej3337
Сообщения: 46
Зарегистрирован: 2019.11.03, 16:02

Re: Оптимальный вывод контента

Сообщение andrej3337 »

rak писал(а): 2019.12.05, 22:52 да ничем он не плох, просто после asArray придется работать с сырыми данными из бд, как с массивом. со всеми вытекающими
А что это за собой влечет? Ну, к примеру, пользователей у меня нет, только я к админке имею доступ и публикую материалы, соответственно из базы эти сырые данные вывожу и вижу, что для моих целей именно такая выборка вполне удобна и по производительности радует. Мне с этими выведенными данными еще нужно что-то делать в целях безопасности, например? Или с указанным подходом вывод сырых данных на безопасность никак не повлияет?
andrej3337
Сообщения: 46
Зарегистрирован: 2019.11.03, 16:02

Re: Оптимальный вывод контента

Сообщение andrej3337 »

ElisDN писал(а): 2019.12.06, 09:13 Значит не сделали with('категори') и она не добавилась.
Ничем не плох. Наоборот, часто хорош по производительности для выборок.
Да похоже где-то ошибка закралась, дома категория вывелась без проблем, а на работе на виртуалке даже с with не выводится, хотя связи посмотрел, там все нормально... а, не важно, на работе тест черновой, пользуюсь в свободные минуты, когда мысля интересная в голову приходит
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Оптимальный вывод контента

Сообщение maleks »

andrej3337 писал(а): 2019.12.06, 15:15 Мне с этими выведенными данными еще нужно что-то делать в целях безопасности, например? Или с указанным подходом вывод сырых данных на безопасность никак не повлияет?
Надо все равно делать правильно.
По умолчанию при выводе текстов html::encode, просто даже для того чтобы корректно все отображалось в браузере.
andrej3337
Сообщения: 46
Зарегистрирован: 2019.11.03, 16:02

Re: Оптимальный вывод контента

Сообщение andrej3337 »

maleks писал(а): 2019.12.06, 16:29 Надо все равно делать правильно.
По умолчанию при выводе текстов html::encode, просто даже для того чтобы корректно все отображалось в браузере.
Все это пока превью статей, все равно на выходе контент облачаю в эти две штуки

Код: Выделить всё

<?= StringHelper::truncateWords(strip_tags($art['content']), 20); ?>
Правда на просторах сети нашел универсальный метод через функцию что ль, но чет пока не могу с ним разобраться...

Вывод статей с пагинацией буду с listview делать, вывод одиночной статьи можно и без ->asArray()-> там ничего страшного, это же не десяток выборок на одну страницу.
Закрыто