1

Bellow 是将 json 解析为 ios 设备的自定义模块的代码。事情在我的drupal页面上,我使用“nodehierarcy”模块创建了一个节点层次结构。我有两种类型的自定义内容——电话和事件。对于每部电话,我都有一个要解析的事件列表。下面代码的问题在于它解析了所有作业,而不是按设备对它们进行分类。json 输出 url 为:“xyz.com/job/json”。但我想要类似的东西xyz.com/?q=node/4/json,节点 4 代表电话。有任何想法吗?

function job_menu() {
    $items =array();

    $items['job/json'] = array(
        'title' => 'Json callback',
        'page callback' => 'message_json_page',
        'access arguments' => array('access content'),
        'type' => MENU_CALLBACK,
    );
    return $items;   
}

function message_json_page(){
    $sql = "SELECT n.nid , n.title as name FROM {node} n 
            WHERE n.status = 1 and n.type = :type";
    $result = db_query($sql, array(':type'=>'job'))->fetchAll();
    $json_value = json_encode($result);
    print $json_value;
}
4

1 回答 1

0

Drupal 中的路径有两种方式之一……如果您启用了干净的 URL,那么您将访问类似mysite.com/node/4/json. 如果您没有干净的 URL,您将访问同一页面mysite.com?q=node/4/json(这正是您所追求的)。

请记住,您将为 设置一个菜单项node/*/json,并使用一些节点层次结构内部函数来获取页面回调中子节点的列表:

function job_menu() {
  $items['node/%node/json'] = array(
    'title' => 'Json callback',
    'page callback' => 'message_json_page',
    'page arguments' => array(1),
    'access arguments' => array('access content'),
    'type' => MENU_CALLBACK,
  );
  return $items;
}

function message_json_page($node) {
  $children_links = _nodehierarchy_get_children_menu_links($node->nid, FALSE);

  $nids = array();
  foreach ($children_links as $child_link) {
    list(, $nid) = explode('/', $child_link['link_path']);
    $nids[] = $nid;
  }

  $sql = "SELECT n.nid , n.title as name FROM {node} n WHERE n.nid in (:nids) AND n.status = 1 and n.type = :type";
  $result = db_query($sql, array('nids' => $nids, ':type'=>'job'))->fetchAll();

  $json_value = json_encode($result);
  print $json_value;
}
于 2012-08-26T13:45:25.620 回答