Stas
закинул ишью только
Alexander
ну, поискать count
Stas
ок
Alexander
релизнул дебаг
Alexander
можно апнуть, ошибка пропадёт
Stas
спс
Maxim
Всем привет! Может кто подтолкнуть к правильному решению? Хочу добавить возможность установки модулей в свою систему. Не совсем понятно как организовать использование модулей, которые расширяют базовый функционал системы, а не создают новый. Например, у меня есть базовый класс Page (id, name, title. body). Допустим, я хочу сделать модуль, который расширит функционал, добавив класс PageSeo (id, page_id, title, description). Как мне из модуля изменить функционал основного контроллера сайта, чтоб он передавал объект PageSeo в представление, которое рендерит ту или иную страницу? Или например, добавить в объект Page магический метод getSeo чтоб в представлении получать $page->seo->title? Немного сумбурно получилось, но, думаю, суть донёс.
Dmitriy
DI?
Maxim
DI?
возможно, но не совсем понятно, как это применить к моему примеру. то есть я должен создать PageInterface, сделать чтоб common\Page его имплементировал, а в модуле создать ещё один Page, который наследует common\Page и имплементирует PageInterface, и сделать $container->set для класса из модуля? походу, я не до конца понимаю принцип DI.
👻
Всем привет! Может кто подтолкнуть к правильному решению? Хочу добавить возможность установки модулей в свою систему. Не совсем понятно как организовать использование модулей, которые расширяют базовый функционал системы, а не создают новый. Например, у меня есть базовый класс Page (id, name, title. body). Допустим, я хочу сделать модуль, который расширит функционал, добавив класс PageSeo (id, page_id, title, description). Как мне из модуля изменить функционал основного контроллера сайта, чтоб он передавал объект PageSeo в представление, которое рендерит ту или иную страницу? Или например, добавить в объект Page магический метод getSeo чтоб в представлении получать $page->seo->title? Немного сумбурно получилось, но, думаю, суть донёс.
Посмотри реализацию на easyii cms
Maxim
👻
Модуль подключается с админки довольно таки удобно
Maxim
Niko
Вот это PUSH!!! Или я чего-то раньше не знал или рождаются новые фичи
https://github.com/yiisoft/yii2/commit/744b87fabccda1076360515032cd1f27c3f097c4
Stas
Stas
правда когда он пригрядет наконец никто незнает:)
Maxim
Посмотри реализацию на easyii cms
глянул, но не увидел там ответа на свой вопрос. увидел только, что page сделан отдельным модулем, а seo реализуется через behavior. а мне бы понять, как в базовый view (не модуля) передать что-то из модуля (сео был для примера). либо DI, как посоветовал Dmitry Kuts (но я не до конца понимаю, как оно заводится, надо поизучать ещё), либо можно эвентами попробовать, но это, кмк, костыль.
Niko
"как в базовый view (не модуля) передать что-то из модуля" - хочешь передать параметр в layout???
Niko
или подтянуть модуль через какой-нибудь Yii::$app->myModule->doSomething???
Niko
или вообще не это?
Niko
я не понял вопрос и пошел спать
Maxim
=D
Niko
ты бы конкретизировал, что это "что-то")))
Maxim
попробую ещё раз )
Maxim
есть common\Page - модель страницы
есть модуль seo - дополняет страницу seo-полями
есть базовый контроллер сайта (SiteController), который по адресу найдёт id страницы, и передаст экземпляр Page в $this->render('template_name', ['page' => $page]).
модуль seo хранит в таблице данные, которые я хочу тоже передать в render. как мне это сделать из модуля?
Maxim
Niko
передай через тот же массив $this->render('template_name', ['page' => $page, 'seo' => $seo])
Maxim
Maxim
можно на каждой странице вызывать Yii::$app->seo->getByPageId($page->id), но это как-то некрасиво, вот и ищу метод покрасивее )
Niko
Я не понимаю зачем тебе там нужен модуль
Если ты хотел один кусок html тягать по разным view - тебе или виджет или блок нужен
Maxim
я хочу во view работать с данными из модуля seo
Niko
сделай связь и тяни вот так $page->seo
Maxim
связь надо прописывать в базовом классе
Maxim
мне кажется DI - это то, что нужно, надо копать в его сторону
Maxim
=D
Niko
мне кажется ты показал service locator
Niko
https://yiiframework.com.ua/ru/doc/guide/2/concept-service-locator/
Maxim
читаю
Maxim
если это единственный вариант - придётся делать так
Niko
Подключи свой "модуль" вот так и сможешь подтягивать его из любого места
'components' => [
'db' => [
'class' => 'yii\db\Connection',
'dsn' => 'mysql:host=localhost;dbname=demo',
'username' => 'root',
'password' => '',
],
Maxim
да, я уже делал так, с этим нет проблем
Niko
думаю тебе нужна всязь потому, что если ты пропишешь Yii::$app->seo->page($page->id) - то у тебя будет 2 запросв в бд, а если будешь получать свою страницу со связью одновременно Page::find()->with(['seo'])->andWhere(['id' => $id])->limit(1)->one()
то будет 1
А там смотри как тебе удобней
Maxim
спасибо )
Yauheni
Приветствую, есть тут тот кто сможет оперативно помоч с некоторым запросом к бд ?
Yauheni
Собственно имею таблицу продуктов таблицу категорий и таблицу моделей
Yauheni
первая имеет к последним двум связь многие ко многим (соответствующие таблицы имеются)
Yauheni
вопрос : как мне получить продукты проверяя айди категории и айди модели одновременно
Yauheni
понимаю что с join нужно работать
Yauheni
Product::find()->select('*')->leftJoin('categories_has_product', 'categories_has_product.categories_id = 15')->limit(10)->all();
Yauheni
навоял невчто подобное но не то (не включал пока второй джоин с моделями)
Yauheni
да
Maxim
может так?
select p.*
from product p
inner join product_category pc on pc.product_id = p.id and pc.category_id = 15
inner join product_model pm on pm.product_id = p.id and pm.model_id = 28
group by p.id
Yauheni
сейчас пробну
Yauheni
спасибо
Yauheni
нет увы не то
Yauheni
select p.* from product p inner join categories_has_product pc on pc.categories_id = 15 group by p.id
Yauheni
показывает все продукты абсолютно
Yauheni
не зависимо от условия
Yauheni
вроде заработало нашел что пропустил
Yauheni
Может еще подскажеде как это дело под AR адаптировать ?
Roman
спасибо )
Почему не копать в сторону темизации и UrlManager? В UrlManager прописать правило по которому стандартный action перезапишется на action твоего модуля, а в нем ты уже рендери и передавай во view все, что тебе нужно. Вроде сносный вариант, не? Кто что скажет по этому поводу?
Как повод для размышления на эту тему: https://habrahabr.ru/post/308948/
Michael
Привет. А есть чат по юи1. 1? А работа требует причесывать портал один
SiZE
Anonymous
Anonymous
Бояре пишушие на python'е присутствуют?
Anonymous
Всем привет
Anonymous
Можно ли назначить контроллеру несколько ID, и если да, то как это сделать через конфиги?
Anonymous
Anonymous
Anonymous
SiZE
Niko
Anonymous
из разряда:
Человек хочет сделать X, он не знает, как это сделать, но думает, что ему поможет Y - однако он не знает и как сделать Y тоже, приходит об этом спросить. Для остальных Y выглядит как очень странная задача, и после кучи потерянного времени выясняется, что человеку нужно было X, и Y вовсе даже для этого не подходит.
Niko
Anonymous
++
Anonymous
Может ему rules достаточно будет)