We launched new forums in March 2019—join us there. In a hurry for help with your website? Get Help Now!
    • 32854
    • 9 Posts
    Если вы хоть раз делали новостную ленту (или вариации типо блога) с помощью Дитто, то и 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 на основе примера (если захотите сделать что-то более серьезное).

    Критику оставьте себе. Пишите предложения по улучшению, если хочется, обязательно подправляю топик.