it-swarm.asia

كيف يمكنني إرجاع JSON الفعلي باستخدام دروبال؟

أرغب في تنفيذ وظيفة بسيطة 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);
}

كيف يمكنني إرجاع JSON الخام فقط؟

13
rybosome

ل 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();
}

من المحتمل أيضًا أن يكون أكثر أمانًا تحليل الاستعلام للتعقيم وفحص الأخطاء وما إلى ذلك ، بدلاً من مجرد محاولة إرجاع النتيجة.

17
mpdonadio

رأيت أنه لم يتم تقديم إجابة عن Drupal 8.

من أجل معالجة JSON في Drupal 8 ، استخدم الكود التالي:

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

يمكنك قراءة المزيد عنها هنا

3
thegrandhi

هنا مثال واقعي ل Drupal 8

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

يتضمن تحكم وتوجيه

يُرجع هذا الرمز عدد العقد في تنسيق json المكشوف كنقطة نهاية

1
Nicolas Pinos