все форумы все темы добавить тему
Модуль коментариев
Доброго времени суток, Ув. Loki!
Хотел поинтересоваться, нету ли в планах разработки создания модуля комментариев к новостям/страницам? Или, возможно, это уже организовано коим-то образом в LabCMS?
В свое время я делал подобный универсальный модуль. Но в итоге от такой схемы отказался и предпочел делать собственную систему комментариев у тех модулей, где она нужна.
Проблема с универсальным модулем в том, что он, на самом деле, не очень-то универсальный - он не представляет как организована навигация внутри компонента, к которому он подключен. В результате получается что компонент должен передавать модулю комментариев идентификатор в какой-то оговоренной форме. То есть модуль комментариев перестает быть универсальным, и впредь работает только с компонентами, которые выполняют соглашения по передаче переменных. Это не слишком трудно сделать, но идеологически мне это кажется не очень правильным.
Вы говорите, что наработки по модулю уже есть. Можете ли выложить готовый модуль комментирования к новостям? При грамотном использовании и надлежащей настройке можно будет создать полноценный блог на Lab CMS.
Хм... Вообще-то я не говорю что наработки есть, я говорю что однажды такой модуль делал, и та реализация мне не понравилась. Теперь у меня есть опыт и понимание трудностей, с которыми придется столкнуться при подобном подходе ( а это уже немало ), но тот код давно выброшен - нечего за него держаться, теперь бы я написал лучше
 
PS Блог - это ведь не только текст + комментарии. Мне кажется что это еще и некая система навигации (теги, даты... что там еще бывает). С этим делом лучше бы справился модуль, который специально заточен под эти функции.
Извиняюсь за неправильную трактовку Вашего сообщения
Только что изучил толковое описание блога, как одного из типов сайтов. Я одно время пользовался WP. Собственно широкие настройки оптимизации, накрученные большим количеством плагинов делает её популярной CMS. А задачи выполняются весьма тривиальные, как раз то, что Вы описали. А поскольку блог - весьма популярная и востребованная, порою, штука, думаю и модуль такой будет весьма кстати. Сейчас стал пользоваться  Вашей CMS и очень доволен. Буду ждать с нетерпением
Ну а по поводу обычных комментариев, Вы правы, что целесообразнее использовать заточенные под определённый компонент системы. ИМХО Было бы не плохо, если бы это был был частью компонента, включаемый/отключаемый в настройках. Может ошибаюсь, строго не судите, далёк от back-end разработок.
Да нет, Вы абсолютно правы - модульность для блога это, несомненно, плюс. Так же Вы правы в том, что специализированное решение всегда будет лучше, чем универсальное. Просто выводу у Вас получились неожиданные - сделать блог из двух универсальных модулей, не очень-то для этого предназначенных
На мой взгляд, правильнее было бы сделать так: сделать самостоятельный модуль блога, модуль комментариев для блога, модуль тегов для блога, календарь и т.п. То есть комплект модулей, которые знаю о существовании друг друга и могут определенным образом взаимодействовать. А лучше сразу все это объединить в один модуль, так как в 90% случаев все это будет использоваться в блоге.
Тоже собирался поднять тему комментариев, но хотел сначала познакомиться с вопросом поближе, и mushtat меня опередил, а Loki все разложил по полочкам
Не согласен, что весь упомянутый функционал нужно привязывать именно к блогу! Такой же функционал может иметь и новостной сайт, и любой другой с периодическим добавлением публикаций. Например, сделав несколько первых записей на своем сайте, котрый я первоначально заявил, как блог, я понял, что это просто сайт, мое личное место в сети, и вести web log я не собираюсь. И что это по преимуществу не записи (что вижу, о том пою) а именно публикации. И они сортируются по рубрикам (категориям) и, ессно, тегам.
Да что далеко ходить: прям здесь, на labcms.ru, в разделе новостей просятся комментарии. Были вопросы (потом сам разобрался), но не столь серьезные, чтобы открывать тему на форуме, а так бы р-раз, и обратная связь
Кстати, сам комментарий привязан только к id страницы публикации (записи, документа, фотоальбома и т. п.), его не волнует, какие там рубрики-теги, это уже проблемы самой страницы Вот тут я недопонял, зачем модулю комментариев взаимодействовать с модулями рубрик и тегов. Имхо, это избыточно.
Извините, краткость изложения — не моя сильная сторона
На счет новостей - довольно таки не плохо, но еще лучше привязать к всему этому facebook или vkontakte комменты, или же как минимум организовать многоуровневые комментарии
Ну я уж заметил выше что блог рассматриваю именно как способ организации данных. От того, что модуль будет называться "блог", а не "статьи" ведь ничего принципиально не меняется - его все равно точно так же можно использовать для собственных нужд.
 
Что касается универсальных комментариев: написать один раз модуль и потом его везде использовать - очень заманчиво. И от этой затеи я не отказался до сих пор. Но какие проблемы при этом всплывают:
 
1. Как идентифицировать страницу компонента?
у нас есть id узла, id модуля и id материала
Просто id материала использовать нельзя, так как он не уникален в пределах сайта - вполне может быть статья с таким id и новость. Значит нужно использовать комбинацию id_узла+id_материала или id_модуля+id_материала. Еще не знаю как правильнее, но очевидно что и в том и в другом случае нам никуда не деться от id_материала. А его нам может отдать только компонент, так как только он знает как в нем организована навигация.
Например, в модуле фотоальбома могут быть такие страницы:
/photo-album.1/
/photo-image.1/
в одном случае это будут комментарии к альбому, в другом - к изображению. При этом id_узла и id_модуля совпадают и в одном и в другом случае.
В общем, простого решения у меня пока нет.
 
2. Как редактировать комментарии? Получается что комментарий подключен после компонента, так что при его редактировании сначала будет выполняться компонент, а уже потом редактироваться/удаляться комментарий. Можно модуль комментариев вывесить на отдельную страницу и обращаться к нему непосредственно, но при этом его настройка станет не очевидной. В общем это не настолько сложный вопрос.
 
3. Что делать с комментариями при удалении/переустановке модуля/элемента модуля? Ведь они так и повиснут в базе... И если удаленный модуль еще можно отследить, то с удаленным материалом такое не прокатит.
 
В общем, если у Вас есть мысли по этому поводу, то я бы ими с удовольствием вдохновился Желательно, чтобы они были технического, а не организационного толка
Defari
На счет новостей - довольно таки не плохо, но еще лучше привязать к всему этому facebook или vkontakte комменты, или же как минимум организовать многоуровневые комментарии

Я все же предпочитаю хранить свой контент у себя на сайте...
Loki, спасибо за развернутый ответ!
Я, собственно, и предварил выступление тем, что пока недостаточно знаком с вопросом.
А комментов хоцца
И модуль фотоальбома буду делать свой, поскольку использование БД в этом случае не считаю оптимальным решением, частенько наступаю на грабли в MODx, но об этом напишу в соотв. теме, когда дело дойдет)
Буду продолжать учить матчасть (пришлось делать перерыв на 3 недели). Как раз и идеи появятся, благо Вы задали направления «куда думать».
По данному вопросу подумалось мне следующее:
можно создать не отдельный универсальный модуль, а общий класс с единым интерфейсом для всех модулей. Если уж все равно модуль должен сообщать для какого id ему нужны комментарии, то пусть он имеет в своем составе раздел для работы с комментариями. Сделать интерфейс класса предельно простым, а таблицу комментариев в БД создавать при установке системы.
Подобная схема успешно работает с модулями постраничной навигации, отправкой почты и экспортом RSS. Может и для комментариев подойдет?
То есть для комментов будет таблица, в которой будет указываться его же id, id модуля, id узла, и id материала?
Примерно так. Правда, id узла не нужен - модуль может быть подключен и к нескольким узлам одновременно... При такой реализации управление правами придется полностью передать модулям... правда, при этом будут шире возможности по их настройке.
Правда, это не снимает проблемы "висячих" комментариев при удалении или переустановке модуля... правда, работу по их очистке можно возложить на модуль управления модулями... благо что он всего один.
 
Даже еще проще: удаление комментариев относящихся к модулю можно сделать дополнительным запросом в файле uninstall.sql
Loki
По данному вопросу подумалось мне следующее:
можно создать не отдельный универсальный модуль, а общий класс с единым интерфейсом для всех модулей.

Супер!
Loki

Правда, это не снимает проблемы "висячих" комментариев при удалении или переустановке модуля... правда, работу по их очистке можно возложить на модуль управления модулями... благо что он всего один.
 
Даже еще проще: удаление комментариев относящихся к модулю можно сделать дополнительным запросом в файле uninstall.sql

А так ли необходимо удаление "висячих" комментариев? Ведь они сами по себе иногда представляют ключевую ценность. Пусть бы себе лежали в базе. Скорее всего, я чего-то «не догоняю», но:
Вдруг возникнет необходимость вернуть модуль на место вместе со всеми комментариями? И нельзя ли в связи с этим ввести дополнительный параметр модуля (и соотв. поле в таблице комментариев), который будет разрешать/блокировать вывод комментариев?
jen
А так ли необходимо удаление "висячих" комментариев?

Представьте себе ситуацию:
Есть некий модуль (пусть будет модуль новостей), написали новость с id=1, к ней набралось некое количество комментариев. После чего мы модуль статей переустановили (при этом удаляются и заново создаются таблицы в БД), после чего создали новую запись с id=1, но комментарии-то не знали что модуль был переустановлен, так что старые комментарии отображаются у новой новости. А если модуль был удален, а потом снова установлен, то он будет установлен с другим id, так что старые комментарии будет уже не достать (ну если привязываться именно к id модуля, а не к его названию).
Loki
А если модуль был удален, а потом снова установлен, то он будет установлен с другим id, так что старые комментарии будет уже не достать (ну если привязываться именно к id модуля, а не к его названию).

Извините, не учел, что при каждой переустановке id модуля будет меняться. Тогда можно привязаться по уникальному значению из поля module.
Defari
То есть для комментов будет таблица, в которой будет указываться его же id, id модуля, id узла, и id материала?

Вместо id модуля значение module и можно связывать концы с концами, не так?
Привязаться-то можно, только для чего? Уж коль скоро уничтожен весь контент модуля, странно хранить комментарии к этому контенту. Снявши голову по волосам не плачут
Действительно. Тогда остается одно: беречь модуль от переустановки, как зеницу ока, а иначе ни контента, ни комментов… Куда-то не туда мы заехали
Ну в общем-то при переустановке модуля система честно предупреждает о последствиях, так то сюрпризом для админа это быть не должно. А содержимое базы и так стоит беречь
Возвращаясь с классу комментариев. Что мне видится из функций:
1. древовидность комментариев (возможно, отключаемая или регулируемая)
2. постраничная навигация (?)
3. возможность добавления комментариев (в том числе и гостями)
4. возможность удаления комментариев (без удаления ветви)
5. возможность удаления ветви
6. возможность сокрытия комментария (модерация)
7. возможность редактирования комментария
8. возможность пожаловаться на комментарий модератору (тут не совсем понятно где отображать эту жалобу)
Пока это все мысли. Если у кого-то будут предложения и замечания - буду рад с ними ознакомиться.
Loki
Возвращаясь с классу комментариев. Что мне видится из функций:
8. возможность пожаловаться на комментарий модератору (тут не совсем понятно где отображать эту жалобу)

Возможно на финальном этапе разработки написать модуль для админки, где будут выводится только жалобы?
Нет, так не получится: модератор!=админ. Надо исходить из того, что модератор - просто продвинутый посетитель и в админке ему делать нечего. Кроме того, несмотря на то, что класс будет общий, политика модерирования в каждом модуле может и будет отличаться. То есть если Вася Пупкин является модератором в разделе новостей, это не делает его автоматически модератором в фотоальбоме. В общем, становится очевидно, что просто для этих целей надо предусмотреть отдельный метод, а отображением его данных должен заниматься модуль.
Я хотел по поводу добавления комментариев гостями кое-что сказать.
Есть один сервис, Gravatar, если слышали. Поддерживается повсеместно WP и другими известными CMS. Удобно для сайтов, где комментарии играю не меньшую роль, чем контент, тоесть также важны. Суть в том, что незарегистрированный  пользователь, указав своё мыло при комментировании, атоматически подгружает свой аватар с этого сервиса. Сути мало, конечно, на выходе, но это используется повсеместно, пользователи, которые часто серфят различные сайты и оставляют там комментарии, должны были к такому привыкнуть. Вот описание работы сервиса с шаблонизатором Smarty. Естественно дать возможность отключения этой опции. Также ещё есть несколько советов именно в эту сторону. Комментарий от незарегистрированного пользователя должен пройти премодерацию. Также, если автор(проверять по указанному мылу) уже оставлял одобренные комментарии (два и три, или пять), то последующие добавлять уже без премодерации. Защита от спама. Отдельный вопрос. Пока LabCMS не слишком распространена, автоматических ботов/программ, настроенных именно под неё нет, тоесть в ближайшее время если кто-то и будет спамить в комментах - то только люди. Ну я думаю, Вы уже как-о это реализовали, ведь поле название скрытого поля противоспаммерского модуля присутсвует в настройках сайта не просто так
Ну а для жалобы на коммент модератору может сделать какую-то не большую кнопочку типа жалоба, рядом с комментом, возможно скрытую java и появляющуюся при наведении?
Ну а остальные пункты и Ваше описание будущих функций мне понравилось, Loki
Ну собственно там просто плагин для смарти. Можно его спокойно использовать в своих проектах, если есть необходимость. Так что включать его как стандартную опцию, наверное, смысла нет. Да и о сервисе таком я слышу впервые.
С премодерацией идея в целом верная, но конкретная реализация меня смущает: получается что если я подпишусь адресом кого-то, кто уже оставлял комментарии, то могу спамить без премодерации.
Ну, выводить мыло того, кто постил коммент не обязательно, да и не нужно вообще, достаточно ника (наверное). Либо сделать привязку не только не мылу, но ещё по ip или useragent. Ну тут уж я не знаю, как лучше и о возможности реализации этого всего. Просто это было бы действительно удобно пользователю, если он всё-таки не хочет регистрироваться.
Loki

1. древовидность комментариев (возможно, отключаемая или регулируемая)
2. постраничная навигация (?)
3. возможность добавления комментариев (в том числе и гостями)
4. возможность удаления комментариев (без удаления ветви)
5. возможность удаления ветви
6. возможность сокрытия комментария (модерация)
7. возможность редактирования комментария
8. возможность пожаловаться на комментарий модератору (тут не совсем понятно где отображать эту жалобу)

Хотелось бы все и сразу .
Loki, я правильно ли я предположил, что вся работа с комментарием будет осуществляться прямо в поле комментария (просто число кнопок при разных правах будет разное) и не будет лишнего узла в админке? Имхо, это наиболее юзабельный вариант.
По поводу жалоб модератору: когда кликнули по ссылке/кнопке,проверяется авторизация, и если это админ/модератор, прямо в поле комментария добавляется «черная метка». Можно пойти дальше и при активации жалобы вывести всплывающую или в модальном окне форму, где недовольный должен аргументировать жалобу, а текст (видимый только админу/модератору)добавится прямо под комментарием. если текст не отправлен, то ничего не происходит. Вот только если жалобщик будет не один Тогда, если отправлена первая жалоба, делать кнопку/ссылку неактивной: «Уже пожаловались» Что-то меня понесло…
И замечания mushtat все полезны и желательны к воплощению, только во что превращается маленький симпатичный класс комментариев
Может, сначала сделать базовый вариант с необходимым функционалом? Возможно, пока без древовидных комментариев, постраничной навигации и жалоб, но с обязательным премодерированием анонимных комментов (последнее, увы, все равно потребует отдельного узла, иначе где эти комменты будут отображаться? Тоже только у админа/модератора?) или вообще без анонимов (гостей).
Loki
получается что если я подпишусь адресом кого-то, кто уже оставлял комментарии, то могу спамить без премодерации.

Нет, для анонимов, имхо, премодерация обязательна, сколько бы они комментов ни оставляли. Это, конечно, усложнение работы модератора, зато нет лазеек для спамеров. А привязка по IP и агенту может заблокировать лояльного пользователя, который зашел с другого адреса и/или браузера.

А привязка по IP и агенту может заблокировать лояльного пользователя, который зашел с другого адреса и/или браузера.

Не заблокировать, а всего-лишь не дать его комментарию появиться без премодерации.
mushtat
Также, если автор(проверять по указанному мылу) уже оставлял одобренные комментарии (два и три, или пять), то последующие добавлять уже без премодерации.

и далее
mushtat
Ну, выводить мыло того, кто постил коммент не обязательно, да и не нужно вообще, достаточно ника (наверное). Либо сделать привязку не только не мылу, но ещё по ip или useragent.

Извините, mushtat, сразу не разобрался.