我使用REST服务器以JSON格式从 drupal 6 站点提取数据,然后在iphone应用程序中解析JSON数据。
我想显示一个特定的节点,然后是所有注释。节点ID将由iphone应用程序提供。 我无法使用REST服务器...如果我将URL设为
<drupal site>/<REST server endpoint>/node/<node id>.json
然后我获得有关该节点的所有相关信息,但评论除外。
我不能使用drupal视图来做...因为我只能显示一条评论而不是所有评论。此外,使用视图我必须指定节点ID。
如何实现目标?
答案 0 :(得分:0)
我开始为此目的开发一个模块......我还没有包含评论,但框架可能是一个很好的起点。
答案 1 :(得分:0)
如果没有直接的方法来获取服务模块,那么有一种方法可以通过创建自己的自定义模块和实现hook_services_resource来获取节点及其注释。这个钩子机制类似于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;
*/
}