Если вы хоть раз делали новостную ленту (или вариации типо блога) с помощью Дитто, то и c Jot и прочими комментариями дело имели.
В наше время люди активно ломятся в сторону социальных комментариев типо facebook, vk, disquss, поэтому их актуальность повышается. В т.ч. и для нашего любимого modx.
Вот небольшое решение от меня, которое позволит вам выводить посты с комментариями на фейсбуке. Основная сложность и ради чего корябался пост - счетчик комментариев из fb:comments и его интеграция в дитто.
Компоненты системы:
ваш бокс с комментариями
<fb:comments
showform="true"
publish_feed="false"
simple="false"
reverse="true"
numposts="10"
canpost="true"
notify="true"
xid="[*id*]"
width="618">
</fb:comments>
fb-root и fbjs для парсинга fbml берется из кода примера при регистрации фейсбуковского аппликейшена.
Единственная строка, вызывающая вопросы - это xid="[*id*]". Дает вашим боксам айдишник такой же как у документа в modx. Это удобно использовать при получении количества комментариев.
(notify="true" позволяет работать эвенту comments.add, но это другая история, хотя может вам и понадобится)
В нужном месте вызывается ваш Ditto.
[!Ditto?parents=`24`& tpl=`blogline`&extenders=`countCom`&phx=`1`!]
Расширение countCom кладется по стандартному пути /assets/snippets/ditto/extenders/countCom.extender.inc.php.
Рядом с ним или куда вам там удобнее нужно положить facebook.php, который качается так же с сайта facebook developers (сразу предпреждаю, что либа жутко глючная и работает абы как, но что касаемо счетчика комментариев - все ок).
Его код (частично позаимствовал со всеми недостатками у парня, который написал считалку комментов для Jot ):
<?php
require_once($_SERVER['DOCUMENT_ROOT'] . '/facebook.php');
$facebook = new Facebook(array(
'appId' => 'x',
'secret' => 'y'
));
try
{
$result = $facebook->api(array(
'method' => 'fql.query',
'query' => 'SELECT xid, count FROM comments_info WHERE app_id='.$facebook->getAppId()
));
foreach($result as $val)
$count[ $val['xid'] ] = $val['count'];
}
catch (FacebookApiException $e)
{
error_log($e);
}
// bad
$GLOBALS['count'] = $count;
$placeholders['count'] = array(array("id","*"),"countph","id");
if(!function_exists("countph")) {
function countph($resource) {
global $count;
if(!$r = $count[$resource['id']]) $r = 0;
return $r;
}
}
?>
Ну и чанк blogline
<div class="entry">
<h5>[+pagetitle+]</h5>
<span>[+pub_date:date=`%d.%m.%Y`+]</span>
<div>[+introtext+]</div>
<a href="[+url+]">комментировать ([+count+])</a>
</div>
Все собирается воедино и получается лента с комментариями на фейсбуке и счетчиком оных. Прочую инфу так же легко достать с помощью FQL на основе примера (если захотите сделать что-то более серьезное).
Критику оставьте себе. Пишите предложения по улучшению, если хочется, обязательно подправляю топик.