Показать узел 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;
*/
}
Я начал работать над модулем для этой цели... Я еще не включал комментарии, но для начала неплохо было бы создать фреймворк.