我正在编写一个显示Drupal管理的网站内容的iOS应用。我想我如何在Drupal中创建视图,以便将内容作为JSON提供给应用程序。但现在我想让我的登录用户将内容标记为收藏夹。用户可以在网站上创建帐户,也可以在应用程序内登录。收藏夹按用户存储。
在Drupal中,这是使用Flag module实现的,它会呈现相应的链接以切换网站上的标记。这些链接指向一个特定的URL,该URL还包含一个令牌以防止欺骗。在没有令牌的情况下调用URL会导致拒绝访问。
现在很遗憾,我无法在我的应用中生成这些令牌。有没有办法在不使用网站的情况下标记内容?
我是Drupal的新手。我所需要的只是提示如何实现我自己的HTTP API,允许外部程序操作内容。
答案 0 :(得分:0)
事实证明我必须编写自己的模块,提供菜单回调条目。我的favorites_api.module
文件如下所示:
/**
* Implements hook_menu().
*/
function favorites_api_menu() {
$items['node/%/favorite/%'] = array(
'title' => 'Mark as favorite',
'page callback' => 'favorites_api_toggle_favorite',
'page arguments' => array(1, 3),
'access callback' => 'user_access',
'access arguments' => array('access content'),
'type' => MENU_CALLBACK,
);
return $items;
}
/**
* Callback for above menu entry
*/
function favorites_api_toggle_favorite($entity_id, $action) {
$favorites_flag = flag_get_flag('favorites') or die('no "favorites" flag defined');
$favorites_flag->flag($action, $entity_id);
// error handling and return message
// ...
}
现在,我可以致电http://myurl/node/3/favorite/flag
将节点3标记为收藏,将http://myurl/node/3/favorite/unflag
标记为取消标记。
编写菜单条目以创建自定义网址操作有点误导,但是......
答案 1 :(得分:0)
下载并启用“session api”模块(https://drupal.org/project/session_api)。
正如在“标记访问”部分中创建/编辑标记模块时所述:
如果Session API模块是匿名用户,则可以标记内容 安装。
每个匿名用户都有相同的令牌(“flag.module”文件中的第2358行):
md5(drupal_get_private_key() . $entity_id)
如果您可以获得实体/节点ID(私钥可以修复并在Drupal配置中设置),您可以在应用中构建此令牌。
编辑:您必须在权限中为匿名用户添加标志名称的权限。列表