मैं Drupal का उपयोग करके वास्तविक JSON कैसे लौट सकता हूं?


13

मैं स्थानीय स्तर पर एक साधारण AJAX फ़ंक्शन लागू करना चाहता हूं जो मुझे उपयोगकर्ता प्रकारों के रूप में पहले से मौजूद नोड्स के स्वतः पूर्ण नोड शीर्षक की अनुमति देता है। उस अंत तक, मुझे एक एपीआई की क्षमता चाहिए जो मैं नोड शीर्षक पर खोज सकता हूं। समस्या यह है कि जब मैं कच्चे JSON का उत्पादन करता हूं, तो यह टैग से घिरा होता है। इसलिए, मैं क्या करूं, मुझे कोई फर्क नहीं पड़ता ...

<html>
    <head>
    </head>
    <body>
        <pre style="word-wrap: break-word; white-space: pre-wrap;"> {json here}</pre>
    </body>
</html>

मैंने एक कस्टम पेज टेम्प्लेट लागू करने की कोशिश की है जो केवल सामग्री को पहले से ही आउटपुट करता है, वही परिणाम उत्पन्न करता है। यहाँ है कि मैं इस समय अपने मॉड्यूल फ़ाइल में यह कैसे कर रहा हूँ ...

<?php

/**
 * Implementation of hook_menu()
 */
function content_relation_menu() {
    $items = array();
    $items['api'] = array(
        'title' => 'Search',
        'page callback' => 'content_relation_get',
        'access callback' => TRUE,
        'type' => MENU_CALLBACK,
    );

    return $items;
}

function content_relation_get($term = '') {
    drupal_add_http_header('Content-Type', 'application/javascript; utf-8');
    $var = json_encode(
        db_query("SELECT nid,title FROM {node} WHERE title LIKE :title LIMIT 5", array(":title" => $term.'%'))->fetchAll()
    );
    echo $var;
    exit(0);
}

मैं JUST कच्चे JSON को कैसे वापस कर सकता हूं?


आपको drupal_json_outputफंक्शन चाहिए। काम के उदाहरणों के लिए यहां या वहां देखें ।
कीथम

क्या कोई एक ड्रुपल 7 के लिए एक उदाहरण दिखा सकता है
पैट्रिक डब्ल्यू। मैकमोहन

जवाबों:


17

Drupal 6 के लिए, आप drupal_json का उपयोग कर सकते हैं

function content_relation_get($term = '') {
    $result = db_query("SELECT nid,title FROM {node} WHERE title LIKE :title LIMIT 5", array(":title" => $term.'%'))->fetchAll()
    );
    drupal_json($result);
    exit;
}

Drupal 7 के लिए, इसे drupal_json_output का उपयोग करने के लिए बदलें

function content_relation_get($term = '') {
    $result = db_query("SELECT nid,title FROM {node} WHERE title LIKE :title LIMIT 5", array(":title" => $term.'%'))->fetchAll()
    );
    drupal_json_output($result);
    drupal_exit();
}

यह शायद परिणाम को वापस करने की कोशिश करने के बजाय, सैनिटाइज़, त्रुटि जांच आदि के लिए क्वेरी को पार्स करने के लिए सुरक्षित होगा।


2
बस एक त्वरित नोट: यह आमतौर पर JSON प्रिंट करने के बाद बाहर निकलने () के बजाय drupal_exit () का उपयोग करना बेहतर होता है।
जेरलिंग्लुगी

2
@geerlingguy अच्छा पकड़; उस पर ध्यान नहीं दिया। जो लोग फर्क पता नहीं है, drupal_exit () hook_exit (लागू करेगा) बुला सत्र, आदि टियरडाउन, के लिए
mpdonadio

3

मैंने देखा कि ड्रुपल 8 के लिए कोई जवाब नहीं दिया गया था।

Drupal 8 में JSON को संसाधित करने के लिए, निम्नलिखित कोड का उपयोग करें:

  <?php
     use Symfony\Component\HttpFoundation\JsonResponse;
     // ...
     $options = _menu_get_options(menu_get_menus(), $available_menus, array('mlid' => 0));
     return new JsonResponse($options);
  ?>

आप इसके बारे में और अधिक यहाँ पढ़ सकते हैं


1

यहाँ ड्रुपल 8 के लिए एक वास्तविक जीवन उदाहरण है

https://github.com/npinos/drupal8-greenhouse

नियंत्रक और मार्ग शामिल हैं

यह कोड एक समापन बिंदु के रूप में उजागर किए गए json प्रारूप में एक नोड गणना देता है

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.