как я совмещал 3 плагина: Компании, Афиша, Вопрос и Ответ

Мной для одного проекта, который сейчас в разработке, были куплены 3 этих модуля.
Я их поставил все вмести на один сайт и о чудо: в 2х из трех модулей не работает функционал оставления комментарием. Приятный подарочек в 12 ночи, о том как я решил эту проблему написано далее.




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

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

Собственно поставив на сайт все три плагина: Компании, Афиша, Вопрос и Ответ.

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

Сначала я грешил на другие плагины, коих у меня в сборке оказалось:
  1. aceAdminPanel, v.1.4-dev.117
  2. User's Adsense, v.0.1.0
  3. Blogs Autoconnect Plugin, v.1.0.0
  4. Auto fields, v.1.0.0
  5. AutoTown, v.0.0.1
  6. Афиша: События и Каталог Мест, v.2.0
  7. Change Date, v.0.0.1
  8. Livestreet Company Plugin, v.4.2.0
  9. Livestreet Image Gallery, v.1.0.1
  10. Groups, v.1.0
  11. Livestreet Job Plugin, v.4.0.3
  12. Index page title changer, v.1.0.0
  13. Note, v.1.0
  14. OpenID, v.1.2.0
  15. Static page, v.1.2.1
  16. Livestreet Profiler Plugin, v.1.0.1
  17. QA, v.1.0
  18. Livestreet Sbookmarks Plugin, v.01.0
  19. Похожие записи, v.0.2
  20. Sitemap, v.0.1.1
  21. Контакты и социальные сервисы, v.1.0
  22. Yandex Maps, v.0.1.2

Довольно много, но все они вели себя тихо и не подавали виду что работают неправильно.

Тогда я решил подробнее изучит ту троицу, которая не хотела дружно жить.

И так, плагин «Компании» + «Работа» — комментарии там используются как отзывы о компании.

Плагин «Афиша» — комментарии используются для событий и для мест.

Плагин «вопросы и ответы» — комментарии это ответы.

Достаточно быстро стало понятно что работает корректно тока тот, который был установлен последним.

Особенно странно было то что плагин «вопросы и ответы» начисто стирал все за собой, в том числе и все вопросы =) да неприятный сюрприз =) Но он легко лечится удалением файла dump_deactivate.sql из самого плагина.

Также — это дало понимание куда надо копать, а именно в механизм установки плагина, плагин ставиться путем установки новых таблиц в базу (как правило через файл *.SQL) и активации самого себя как плагина.

Вот тут и стало понятно что слабое место это установка плагина и именно в этот момент что-то лишнее записывается приводя к неработоспособности другие плагины.

Проводя сравнительный анализ запросов к базе данных, быстро был найден похожий кусок кода:

Плагин вопросы и ответы:
ALTER TABLE `prefix_comment` CHANGE `target_type` `target_type` ENUM( 'topic', 'talk', 'qa_topic' ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'topic';
ALTER TABLE `prefix_comment_online` CHANGE `target_type` `target_type` ENUM( 'topic', 'talk', 'qa_topic' ) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL DEFAULT 'topic';


Плагин Компании:
ALTER TABLE `prefix_comment` MODIFY target_type enum('topic','talk','company') DEFAULT 'topic';

ALTER TABLE `prefix_comment_online` MODIFY target_type enum('topic','talk','company') DEFAULT 'topic';


Плагин Афиша:
ALTER TABLE `prefix_comment` CHANGE `target_type` `target_type` ENUM( 'topic', 'talk', 'place', 'event' ) DEFAULT 'topic';
ALTER TABLE `prefix_comment_online` CHANGE `target_type` `target_type` ENUM( 'topic', 'talk', 'place', 'event' ) DEFAULT 'topic';


При этом как видим каждый плагин прописывает тока свои типы комментариев, начисто игнорируя другие значения.

Я конечно собрал все типы в единую коллекцию и все заработало, но данный баг наводит на возможное возникновение таких проблем у других покупателей.

А не каждый разработчик будет выяснять почему его плагин не работает с плагином другого разработчика, и пользователь будет послан обоими =)

Все это мне напомнило басню «Лебедь, рак и щука» которую многие из нас помнять со школы.

С уважением и спокойной всем ночи!

25 комментариев

avatar
тоже наступал на эти грабли
avatar
А как бы по-хорошему решать подобные проблемы?
avatar
как по мне так менять колонку 'target_type` ENUM () на отдельную таблицу, куда и добавлять / удалять кти значения из ENUM ( )
avatar
Это изменение структуры ЛС. А хотелось бы чтобы как-то ENUM .= 'new_type';
avatar
Я разрулил подобную проблему с enum полями при активации в плагине микроблогов для 0,42. На очереди галерея, когда комменты перенесу в стандартную таблицу. Пожалуй, кину это разработчикам, наверное пригодится.

Кого еще интересует — пишите в личку, скину.
avatar
черт, до последнего была интрига, что 2 из 3-х это не моя Афиша :)
avatar
перенес в техническую документацию, так мне кажется данной теме самое место.

Рад что вам понравился мой пост!
avatar
Респект за хак!
avatar
столкнулся с подобной проблемой (стоит — вопросы и ответы, компании+работа и наверное скоро галерея).

в общем в разделе Вопросы и ответы — задан вопрос и к нему дан ответ. Так вот ответа не видно.

кто-нибудь может чуть детальнее разжевать что нужно сделать, чтобы подружить плагины?

пока что только удалил sql'ники в плагине вопросы и ответы, а вот что нужно дальше делать — не понял, не программер я, но при хорошем объяснении смогу сделать.

можно в личку ;) спасибо
avatar
тут же все разжевано, надо дописать типы комментариев и всего то =) если не поняли в личку напишите озвучу запрос к базе. я тоже не программер кстати
avatar
для тех кто в танке, и так и не понял что делать чтобы все 3 плагина работали совместно =)

уж слишком ммного вопросов мне задают =)

надо выполгнить следующий код в phpMyAdmin

ALTER TABLE `prefix_comment` CHANGE `target_type` `target_type` ENUM( 'topic', 'talk', 'qa_topic' 'place', 'event', 'company')  DEFAULT 'topic';

ALTER TABLE `prefix_comment_online` CHANGE `target_type` `target_type` ENUM(  'topic', 'talk', 'qa_topic' 'place', 'event', 'company') DEFAULT 'topic';

avatar
при этом плагины должны быть включены или выключены или без разницы?

и для Компаний надо выполнить код, который есть в статье?

ну и совсем для танкистов :) можешь сказать где в phpMyAdmin выполнить этот код?
avatar
выполнил код в phpMyAdmin, но ответов в разделе Вопросы-ответы так и не видно…
стоит еще плагин — редактирование комментариев 1.4
avatar
А можно ли как-то вернуть еще и потерянные «последние обсуждения» ответов? Они тоже не выводятся.
avatar
Разрулил сам: проблема такая же, как и описана выше, только с таблицей prefix_comment_online.
avatar
Целая басня, на ночь глядя…
  • Yra
  • -1
avatar
Некропостинг снова в моде?
avatar
Знаю кто поставил минус…
avatar
Откуда?!
avatar
Из открытых источников. Это сделал ты!
avatar
Радует, что в нашем сообществе наконец-таки начинают появляться первые экстрасенсы…
avatar
Так это ты или не ты?
avatar
Надо быть человеком, чтобы сказать: «Я поставил минус, вот за то то»…
avatar
Я или не я — вот в чем вопрос! Да, это я. Аргументов хотите? Как уже сказали выше — ап темы годовой давности, причем, на мой взгляд, абсолютно бесполезным комментарием.
Да вы не парьтесь так — всё таки не профиль минусанул, и даже не пост. На ваш рейтинг это не повлияло. Пока…
Всё, хватит оффтопить.
avatar
Я знаю что ты, молодец что признался. Просто про экстрасенсов, это лишнее…
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.