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

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

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

Сообщение slavcodev »

vova07, вот от тебя не ожидал :) Я же написал код выше, где там нужно делать контролер для каждой сущности? Задаешь в настройках модуля

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

'comments' => [
  'class' => 'CommentModule',
  'supportModels' => [
    // controllerName => modelClassName
    'post' => 'Post',
    'product' => 'Product',
  ],
]
модуль сам создаст копии контролера через controllerMap

PS: Метод не претендует на приз "Код года", просто странно что мой простой код не был понят двумя людьми :(
Жду Yii 3!
Аватара пользователя
vova07
Сообщения: 1004
Зарегистрирован: 2012.11.29, 14:52
Откуда: Chisinau, Moldova

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

Сообщение vova07 »

@slavcodev извиняюсь. Это сообщение видимо пропустил. Читал тему промежутками. Да это один из вариантов, его кстати тоже юзал в свое время. Видел даже эту логику в рабочих модулях комментов в некоторых фреймах, точно уже не помню где. Я кажется перепутал твои сообщения. Минусов в данном вариенте минимальные.
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

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

Сообщение slavcodev »

Может обсудим варианты? :)
https://gist.github.com/slavcodev/b2050be3be54345d981e

форкайте, комментируйте по делу, буду обновлять гист
Жду Yii 3!
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение mickgeek »

slavcodev писал(а):PS: Метод не претендует на приз "Код года", просто странно что мой простой код не был понят двумя людьми :(
Похоже, что и идею моего кода не все поняли:

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

<?php $this->widget('comments.components.CommentWidget', array('module' => Comment::MODULE_BLOG, 'rowId' => $post->id)); ?>
Можно заменить константу "Comment::MODULE_BLOG" на всё, что угодно. Включая значение из массива конфигурационного файла. Вполне себе универсально. Но Ваша "плюшечка" с добавлением контролеров мне понравилась)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

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

Сообщение slavcodev »

mickgeek, твой код понятен. Но это виджет вывода комментов и формы и не как не дает ответ на то как привязывать коммент к модели, если таких моделей комментируется не одна.
Жду Yii 3!
nepster
Сообщения: 838
Зарегистрирован: 2013.01.02, 03:35

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

Сообщение nepster »

Я вот сидел перебирал идеи у меня был еще вариант попробовать использовать позднее статическое связывание, то тогда в любом случае придется расширять модель и появляется зависимость. Откидываем.

Далее, что если попробовать сделать что то такое:

В модуле articles

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

    
    public function actions()
    {
        return [
            'commentCreate' => [
               ...
            ]
        ];
    }
Добавить экшин для создания комментария, который будет вызывать основной экшин комментария и передавать туда нужны параметры.

Остается вопрос можно ли так делать? Тоесть можно вызвать в actions вместо класса другой экшин другого контроллера и передать данные ?

+ еще советовали полностью избавиться от 1 таблице комментариев и сделать под каждый модуль свою таблицу с комментариями. Ну тогда уже и таблицу счетчиков придется делать.
Тоесть в таком случае к примеру для модуля articles получается:
- таблица самих записей
- таблица комментариев к записям
- таблица счетчиков (article_id, count_comm)

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

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

Сообщение mickgeek »

slavcodev писал(а):mickgeek, твой код понятен. Но это виджет вывода комментов и формы и не как не дает ответ на то как привязывать коммент к модели, если таких моделей комментируется не одна.
Разве? Единственный значительный минус, который я вижу, да, в базу может попасть ID ещё несуществующей записи.
Последний раз редактировалось mickgeek 2014.06.11, 01:11, всего редактировалось 1 раз.
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

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

Сообщение mihail_dev »

- таблица счетчиков (article_id, count_comm) - не сильно вижу в этом смысл каждый раз следить за обновлением в данной таблице данных !!! легче получит количество коментов к определённой статье и закэшировать этот запрос!
Изображение
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

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

Сообщение mihail_dev »

mickgeek писал(а):
slavcodev писал(а):mickgeek, твой код понятен. Но это виджет вывода комментов и формы и не как не дает ответ на то как привязывать коммент к модели, если таких моделей комментируется не одна.
Разве? Единственный значительный минус, который я вижу, да, в базу может попасть ID ещё несуществующей записи.
а как насчёт удаление коментов при удалении страницы?
Изображение
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение mickgeek »

mihail_dev писал(а):
mickgeek писал(а):
slavcodev писал(а):mickgeek, твой код понятен. Но это виджет вывода комментов и формы и не как не дает ответ на то как привязывать коммент к модели, если таких моделей комментируется не одна.
Разве? Единственный значительный минус, который я вижу, да, в базу может попасть ID ещё несуществующей записи.
а как насчёт удаление коментов при удалении страницы?
Совсем вылетело из головы! Это я и хотел каким-то другим путём обойти в следующем проекте. Будем вместе думать)
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

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

Сообщение slavcodev »

mickgeek писал(а):
slavcodev писал(а):mickgeek, твой код понятен. Но это виджет вывода комментов и формы и не как не дает ответ на то как привязывать коммент к модели, если таких моделей комментируется не одна.
Разве? Единственный значительный минус, который я вижу, да, в базу может попасть ID ещё несуществующей записи.
Что разве? Ты передаешь в виджет только $post->id, а для другой модели будет $product->id? А если ИД поста и продукта совпадают, как отделить комменты?
Жду Yii 3!
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение mickgeek »

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

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

Сообщение mihail_dev »

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

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

Сообщение slavcodev »

Дальше что с этой переменной? Она шлется вместе с текстом комментария? Это кажется тоже самое что слать класс модели, метод описанный в первом сообщении.
Хотя может ты предлагаешь добавить несколько одинаковых модулей для каждой комментируемой модели?
Жду Yii 3!
Аватара пользователя
slavcodev
Сообщения: 3134
Зарегистрирован: 2009.04.02, 21:42
Откуда: Valencia
Контактная информация:

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

Сообщение slavcodev »

mihail_dev писал(а):по идее над просто модел передавать
а там из неё получать класснаме и пк так было бы красивее и проще
В теме обсужудалось что передавать класс модели в запросе с данными комментария не безопасно и совсем даже не красиво.
Жду Yii 3!
mickgeek
Сообщения: 957
Зарегистрирован: 2014.05.31, 20:50
Откуда: Санкт-Петербург
Контактная информация:

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

Сообщение mickgeek »

slavcodev писал(а):Что разве? Ты передаешь в виджет только $post->id, а для другой модели будет $product->id? А если ИД поста и продукта совпадают, как отделить комменты?
Так в чём же будет заключаться проблема, если в таблице указаны ID записи и конкретная модель?
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

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

Сообщение mihail_dev »

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

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

Сообщение mickgeek »

mihail_dev писал(а):короче говорим об одном и том же! какая разница передавать название класса или название модуля? те же я..ца вид сбоку!
Это да... Но я так и не понял, к чему было сказано:
slavcodev писал(а):mickgeek, твой код понятен. Но это виджет вывода комментов и формы и не как не дает ответ на то как привязывать коммент к модели, если таких моделей комментируется не одна.
Аватара пользователя
mihail_dev
Сообщения: 243
Зарегистрирован: 2013.07.17, 00:51
Откуда: Молдова
Контактная информация:

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

Сообщение mihail_dev »

mickgeek писал(а):
mihail_dev писал(а):короче говорим об одном и том же! какая разница передавать название класса или название модуля? те же я..ца вид сбоку!
Это да... Но я так и не понял, к чему было сказано:
slavcodev писал(а):mickgeek, твой код понятен. Но это виджет вывода комментов и формы и не как не дает ответ на то как привязывать коммент к модели, если таких моделей комментируется не одна.
думаю скорее всего как получать количеств комментов к определенному посту и как удалять при удалении поста!

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

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

Сообщение mickgeek »

Ну, ребят. Эту тему надо закрывать. Похоже, всяк сюда входящий как-то невнимательно читает сообщения.
mickgeek писал(а):

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

class CommentWidget extends CWidget
{
    ...

    public function getCount()
    {
        $comment = Comment::model()->totalCount()->findAllByAttributes(array('module' => $this->module, 'row_id' => $this->rowId));

        return $comment[0]->count;
    }
} 
В представлении виджета, помимо самих комментариев, было и представление с счётчиком и добавлением нового комментария...

Моя функция getCount() кэшировалась, но можно добавить и отдельную таблицу с ID поста и счётчиком, а в экшенах сверять ID и увеличивать/уменьшать значение последнего. Удобно, если комментарии имеют функцию включения/отключения (нет лишнего столбца в таблице с постами).
Удаление привязаных комментариев - отдельная тема. Вывод последних комментариев и переход на страницу поста реализован. Зная данные поста (а именно: модель и идентификатор) это сделать несложно.
Ответить