1

以下は、json を ios デバイスに解析するカスタム モジュールのコードです。「nodehierarcy」モジュールを使用してノード階層を作成した私のdrupalページにあります。電話とイベントの 2 種類のカスタム コンテンツがあります。電話ごとに、解析したいイベントのリストがあります。以下のコードの問題は、ジョブをデバイスごとに分類するのではなく、すべてのジョブを解析していることです。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 のパスは 2 つの方法のいずれかになります...クリーンな 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 に答える