Показать узел drupal вместе с комментариями для приложения iphone

Я использую сервер REST для извлечения данных с сайта drupal 6 в формате JSON, а затем анализирую данные JSON в приложении iphone.

Я хочу отобразить один конкретный узел, за которым следуют все его комментарии. Идентификатор узла будет предоставлен приложением iphone. Я не могу сделать это с помощью сервера REST... если я дам URL как

<drupal site>/<REST server endpoint>/node/<node id>.json

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

Я не могу сделать это, используя друпальское представление... потому что я могу отображать только один комментарий... не все комментарии. Кроме того, используя представления, я должен указать идентификатор узла.

Как достичь своей цели?

2 ответа

Если нет прямого способа получить его с помощью сервисного модуля, есть способ получить узел и его комментарий, создав собственный пользовательский модуль и реализовав hook_services_resources. Этот механизм подключения похож на крючок меню drupal.

Вот фрагмент кода, который написан на drupal 7, но он должен работать и на drupal 6.

Url : <drupal site>/<REST server endpoint>/my_rest_api/<node id>.json

Позвольте мне, если это сработает, иначе я создам весь модуль в D6 и вставлю его сюда.

 /**
 * Implements hook_services_resources().
 * my_rest_api should appear in your resource list and do enable it before using it.
 */
function YOURMODULE_services_resources() {
  return array(
    'my_rest_api' => array(
      'retrieve' => array(
        'callback' => 'getMyRestNodeWithComments',
        'args' => array(
          array(
            'name' => 'nid',
            'optional' => FALSE,
            'source' => array('path' => 0),
            'type' => 'int',
          ),
        ),
        'access callback' => 'getMyRestAcces',
      ),


    ),
  );
}

/**
 * Get the node along with comment
 */
function getMyRestNodeWithComments($nid) {
    $node = node_load($nid);
    $node->comments = getMyRestCommentByNid($nid);
    return $node;

}

/**
 * Access callback.
 * TRUE for now but you change it according to your requirement
 */
function getMyRestAcces() {
  return TRUE;
}
/**
 * Get comment by nid
 */
function getMyRestCommentByNid($nid){
    //drupal 7
    $query = db_select('comment', 'c');
    $comments = $query
        ->fields('c')
        ->condition('c.nid', $nid)
        ->execute()
        ->fetchAll();
    return $comments;

    /*
    //In Drupal 6 something like this 
    $result = db_query("select * from {comment} where nid = %d",$nid);
    $records = array();
    while($row = db_fetch_array($result)){
        array_push($records, $row);
    }
    return $records; 
    */

}

Я начал работать над модулем для этой цели... Я еще не включал комментарии, но для начала неплохо было бы создать фреймворк.

http://drupalcode.org/sandbox/nally/1365370.git/tree

Другие вопросы по тегам