通过外部HTTP请求标记Drupal中的内容

时间:2014-04-05 16:42:20

标签: php drupal drupal-7 drupal-modules

我正在编写一个显示Drupal管理的网站内容的iOS应用。我想我如何在Drupal中创建视图,以便将内容作为JSON提供给应用程序。但现在我想让我的登录用户将内容标记为收藏夹。用户可以在网站上创建帐户,也可以在应用程序内登录。收藏夹按用户存储。

在Drupal中,这是使用Flag module实现的,它会呈现相应的链接以切换网站上的标记。这些链接指向一个特定的URL,该URL还包含一个令牌以防止欺骗。在没有令牌的情况下调用URL会导致拒绝访问。

现在很遗憾,我无法在我的应用中生成这些令牌。有没有办法在不使用网站的情况下标记内容?

我是Drupal的新手。我所需要的只是提示如何实现我自己的HTTP API,允许外部程序操作内容。

2 个答案:

答案 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配置中设置),您可以在应用中构建此令牌。

编辑:您必须在权限中为匿名用户添加标志名称的权限。列表