Hi, Guest!
+

Миграция към Disqus

29-06-2011 Roumen

disqus logo

Disqus е система за управление на коментари, която работи напрактика под всякаква платформа. Има доста разпространен плъгин за Wordpress, както и други популярни CMS системи като Drupal и Joomla, но може да се подкара и под саморъчно изградени системи.

Систематата става все по-полярна и вече започва да се превръща във стандарт за управление на коментарите в блогове и по-големи сайтове.

Disqus е и нещо като социална мрежа, защото всеки регистриран може да следва други потребители подобно на популярните социални мрежи, но тук активността е най-вече в писането на коментари и лайкването на статий или коментари.

Системата има пълна интеграция с Facebook и Twitter, като с новите бутони за оценка на публикация вашето действие може директно да бъде споделено в двете социални мрежи.

Допълнително можете да се логнете с вашите Facebook, Twitter, Google Account, Yahoo и дори Open ID профили. Разбира се има възможност да се разрешеи коментирането от "гости" без да е необходима регистрация където и да е.

Коментарите в Disqus се индексират и обхождат от паяците на Google от сравнително скоро, така че рендването на коментарите и синхронизациите чрез плъгини или api скриптове за по-добро SEO вече не са жизнено необходими.

Статичното съдържание се кешира от cdn-а на Disqus, а зареждането на JavaScript файла се извършва асинхронно, което прави отварянето на страниците много по-бързо от преди.

Миграцията на стари коментари е много лесна, когато става въпрос за Wordpress сайт, заради официалния плъгин, който позволява безпроблемна интеграция с Disqus, също така плъгини има и за повечето популярни CMS-и.

Аз лично обаче от доста време избягвам такива системи и предпочитам да ползвам собственоръчно написан cms (какъв програмист бих бил иначе, трябва всичко да правя по трудния начин) и бях приятно изненадан от лекотата, с която се мигрират коментари.

Просто експортнах всички коментари в следния формат (Generic WXR):

 
  
 
 http://roumen.it/blog/1 
  blog_post_1 
  2012-01-18 12:34:56 
  open 
 
  
   123 
   Roumen 
   me@roumen.it 
   http://roumen.it 
   127.0.0.1
   2012-01-18 12:45:55 
   My comment 
   1 
   0 
   

   
   124 
   John Dole 
   john@dole.me 
   www.johndole.com 
   10.10.10.1 
   2012-01-19 20:30:40 
   Answer of Roumen's comment.. 
   1
   123 
  
  
  
 
  

Синтаксиса е ясен, а логиката е елементарна, просто трябва да обходят всички публикации заедно с асоциираните към тях коментари и да се изкарат в такъв формат.

Само трябва да се внимава с номерацията на id-тата, те трябва да са уникални и могат да се ползват като референция за parent коментар. Други специфични особености няма.

По този начин успешно мигрирах буквално хиляди коментара без никакви проблеми и до момента съм много доволен от резултата.

  • M.S.N.
    Пишете, Румбата чака за IP-та:)))
  • Roumen
    Колеги webmaster-и, моля когато copy/paste-вате код, първо проверявайте за хардкоднати променливи ;-)
  • Dimitar Ivanov
    А някакъв пример как точно да се експортнат в такъв формат постовете и коментарите към тях за елементарен сайт правен на codeigniter framework? Нещо не мога да зацепя как да изкарам тази информация във файл който да се ъплоадне в админ панела, мога да ги изкарам в динамична страница ама как точно да се форматира и свали във rss файл ми трябва малко разяснение и също така как да направя уникални id-та които да не правят проблеми? Нещо логиката хич не ми идва елементарна, четох и хелп файловете още повече се обърках и в крайна сметка нищо не направих :/
  • Roumen
    Формата на файла за импорт е .xml не rss или нещо друго, няма нищо сложно в това да се генерира, независимо какъв framework ползваш просто между таговете <channel> </channel> трябва да вкараш всеки пост, в който имаш коментари в един <item> </item> като в съответните тагове сложиш заглавието, url-a, датата (в този формат), статуса (дали е open или close, т.е дали може да се пишат коментари по темата) и dsq:thread_identifier, което обикновено е id-то на поста, каквато и елементарна система да си направил трябва да имаш някакво заглавие, дата и id, ползвай тази информация за съответните полета, като разбира се посочи canonical url-а на поста, а не някакъв  localhost ала-бала. До тук това е лесно, просто правиш едно view, в което пускаш един foreach ($posts as $post) { ... } и изкарваш въпросната информация за всеки пост, като вече някак си трябва да вземеш всички асоциирани с конкретния пост коментари, как точно ще го направиш зависи от това как си си написал моделите, ако си ползвал has_many и belongs_to съответно за постовете и коментарите можеш да ползваш нещо такова $post->comments (така е във yii framework) или нещо подобно, което да направи "магията". Така в крайна сметка пишеш още един foreach ($post->comments as $comment) { ... } в блока на първия, където съответно правиш същото нещо, само че за коментарите като отново няма нищо сложно, просто изкарваш id-то на коментара, името на автора, email, ip (ако нямаш оставаш полето празно), датата, съдържанието на коментара (желателно е да ползваш ), дали коментара е видим или не (спам,цензура) и ако коментара има parent неговото id (ако няма 0) и това е.Това си го изкарваш в една "динамична страница" и го копираш без проблеми в един .xml файл, или директно го генерираш като .xml файл, ако се налага сетни header ("content-type: text/xml") във view-то и недей да ползваш допълнителен layout (не знам как точно е в codeigniter) за да излезе както трябва и си готов. После просто качваш файла в disqus и чакаш до 24 часа коментарите да се появят. Успех!
  • Dimitar Ivanov
    Благодаря горе-долу схванах какво трябва да се направи и след като убих един-два пъти сървъра успях да направя експорта :) Иначе аз съм абсолютен n00b в php и моята "система" има 2-3 поста с 3-4 коментара така че реално цялата тая работа ми е излишна но все пак "в името на науката" ми беше интересно да пробвам.