Универсальный модуль комментарии

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: Универсальный модуль комментарии

Сообщение mihail_dev »

ну да количество это не проблема а как ссылку ты получаеш? и тайтл при необходимости?
Изображение
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Универсальный модуль комментарии

Сообщение mickgeek »

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

public function getModuleModel()
{
    if($this->module == self::MODULE_NEWS)
        $moduleClass = 'News';
    elseif($this->module == self::MODULE_BLOG)
        $moduleClass = 'Post';

    $model = CActiveRecord::model($moduleClass)->findByPk($this->row_id);

    return $model;
}
Можно гибче (ранее предлагал вариант), но в тот момент мне это решение подходило на все сто.
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: Универсальный модуль комментарии

Сообщение mihail_dev »

лан в любом случаю тут yii2 так что над как минимум переписать под него!
а там много новых фишек и хотелось бы их задействовать!
дабы воспользоваться мощью ии ))
и тем более у меня ночь и я туго соображаю но решил сварганить этот модуль если чёт толковое выйдет а не очередной велосипед отпишусь!
Изображение
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

Re: Универсальный модуль комментарии

Сообщение slavcodev »

mickgeek писал(а):Это да... Но я так и не понял, к чему было сказано:
slavcodev писал(а):mickgeek, твой код понятен. Но это виджет вывода комментов и формы и не как не дает ответ на то как привязывать коммент к модели, если таких моделей комментируется не одна.
Это сообщение было до того как я понял, что параметр 'module' указывает что именно комметируется.
А потом, когда понял, написал что
slavcodev писал(а):Дальше что с этой переменной? Она шлется вместе с текстом комментария? Это кажется тоже самое что слать класс модели, метод описанный в первом сообщении.
Ты рендеришь виджет (уберу константу думаю так понятнее)

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

$this->widget(..., ['module' => 'blog', 'id' => $post->id]); 
Виджет рендерит форму отправки нового сообщения. Так?
Эти данные module и id нужно отправить в контролер, вместе с текстом комментария, где в зависимости от module, узнаем класс модели.
Т.к. запрос можно подделать, нужно проверять в контролере правильное ли значение module.
Так вот, этот метод ничем не отличается от варианта из певого сообщения,
не большая разница передавать класс модели или module по которому получаем класс.
Жду Yii 3!
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Универсальный модуль комментарии

Сообщение mickgeek »

slavcodev писал(а):
slavcodev писал(а):mickgeek, твой код понятен. Но это виджет вывода комментов и формы и не как не дает ответ на то как привязывать коммент к модели, если таких моделей комментируется не одна.
Это сообщение было до того как я понял, что параметр 'module' указывает что именно комметируется.
Да уж, уже понятно.
slavcodev писал(а):Ты рендеришь виджет (уберу константу думаю так понятнее)

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

$this->widget(..., ['module' => 'blog', 'id' => $post->id]); 
Виджет рендерит форму отправки нового сообщения. Так?
Эти данные module и id нужно отправить в контролер, вместе с текстом комментария, где в зависимости от module, узнаем класс модели.
Т.к. запрос можно подделать, нужно проверять в контролере правильное ли значение module.
Так вот, этот метод ничем не отличается от варианта из певого сообщения,
не большая разница передавать класс модели или module по которому получаем класс.
Верно, несущественно отличается. Я об этом сразу и упомянул. Но у автора темы возникла проблема с счётчиком и ненужной передачей модели, я написал, как её избегаю.

Теперь касаемо критики о безопасности и некрасивости. Константа у меня вообще в виде числа передаётся. А правильность ввода в поле "module" решается простым валидатором, в котором происходит перебор указанных раннее констант (или массива из конфигурационного файла). Это так же "тяжело" реализовать, как и использовать controllerMap.
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Универсальный модуль комментарии

Сообщение nepster »

ну передаваемый класс или название модуля, оно по любому проверяется в валидеторе. Кста-те так же сделали разработчики цмс ЮПИ.
Изначально мой вопрос был на сколько это плохо и можно ли вообще так делать. Может есть возможность сделать как-то по другому ?

Но походу если мы действительно ходим сделать модуль независимый, то это будет единственный выход. Так как все концы в любом случае теряются при передаче данных в контрооллер комметнариев.
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Универсальный модуль комментарии

Сообщение nepster »

в общем я так понял лучше чем передавать имя модуля в скрытом поле формы вариантов нет?
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: Универсальный модуль комментарии

Сообщение mihail_dev »

а если у модуля есть два типа страниц с комментами ?
Изображение
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Универсальный модуль комментарии

Сообщение nepster »

в смысле ? Объясните пожалуйста подробнее, не уловил мысль.
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: Универсальный модуль комментарии

Сообщение mihail_dev »

допустим в модуле есть список товаров и магазинов то есть 2 типа страниц страница магазина и страница товара на обоих надо вставить комменты!
Изображение
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

Re: Универсальный модуль комментарии

Сообщение mickgeek »

Нужно добавить в таблицу новый столбец "controller", например. Но это уже более сложная система. Чаще всего, разработчики в таких не ограничиваются универсальными модулями, пишут/дорабатывают свои и не беспокоятся из-за вызовов одного из другого.
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Универсальный модуль комментарии

Сообщение nepster »

Вставить то не проблема. Это все решается через виджет с передачей нужных параметров. Вся суть темы всего в 1 моменте.
Когда мы добавляем комментарий, тоесть когда данные попадают в контроллер модуля комментарии именно в этом моменте нужно отследить к какому типу принадлежит комментарий. К чему он относится, к новостям, к статьям, к товарам. Суть всей темы именно в этом моменте.
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Универсальный модуль комментарии

Сообщение vova07 »

Ещё не пробовал заново проанализировать вопрос, но подумал ещё о таком варианте после приведения примера с несколькими страницами одной сущности:
- Добавляем определенную переменную в модуль коммента, на примере варианта с классМапом.

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

public $routeMap = []; 
- В конфиге приложения описываем класс мап в зависимости от URI адреса запроса:

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

...
'modules' => [
    'comments' => [
    ...
    // В примере суффикс урл-ов является '/'
    'routeMap' => [
        '^\/gallery\/[\d]+\/$' => 'app\models\Gallery', // URL будет /gallery/1/
        '^\/gallery\/[\w-]+\/$' => 'app\models\GalleryCategory', // URL будет /gallery/my-gallery-category/
    ]
    ...
    ]
]
... 
- В самом контроллере модуля, в момент добавления нового комментария, в зависимости от нашего "$_SERVER['REQUEST_URI']" парсим "$routeMap" и определяем нужную нам модель без стороних переменных из вне.

Возможно есть ошибки в логике, так как ничего не тестил, но начальный принцип думаю понятен.
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

Re: Универсальный модуль комментарии

Сообщение nepster »

тут тогда получается проблема с роутерами. К примеру если мы реализовываем cms и даем возможность к примеру в админке делать свои url, то каждый раз нужно будет вносить правки в конфигурации модуля. Тогда может обратиться к сессиям ?
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Универсальный модуль комментарии

Сообщение vova07 »

Ну если речь идет уже о цмс-ках, то возможно да, лучше уже пихать необходимую инфу в сесию пользователя. Только тут снова есть подводные камни, и ненужные дейсвия, что больше всего не нравится.
В общем больше ничего предложить не могу, когда буду разбиратся с вопросом, смогу более адекватно обсуждать данную тему.
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

Re: Универсальный модуль комментарии

Сообщение mihail_dev »

я считаю что нужно привязываться к классу и пк тогда хоть на странице ничего не над передавать класс и пк можно будет получить из модели в виджете
Изображение
longmayar
Сообщения: 55
Зарегистрирован: 2014.12.08, 16:11

Re: Универсальный модуль комментарии

Сообщение longmayar »

Так на чем всё закончилось? Реализовал ли кто-нибудь этот Универсальный модуль?
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

Re: Универсальный модуль комментарии

Сообщение vova07 »

Я сделал вот так: https://github.com/vova07/yii2-start-comments-module у себя!
longmayar
Сообщения: 55
Зарегистрирован: 2014.12.08, 16:11

Re: Универсальный модуль комментарии

Сообщение longmayar »

vova07 писал(а):Я сделал вот так: https://github.com/vova07/yii2-start-comments-module у себя!
Его можно подключить к базовой (не advanced) сборке?
Аватара пользователя
yiijeka
Сообщения: 3103
Зарегистрирован: 2012.01.28, 09:14
Откуда: Беларусь
Контактная информация:

Re: Универсальный модуль комментарии

Сообщение yiijeka »

Да.
Ответить