أرغب في تنفيذ وظيفة بسيطة 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 الخام فقط؟
ل 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();
}
من المحتمل أيضًا أن يكون أكثر أمانًا تحليل الاستعلام للتعقيم وفحص الأخطاء وما إلى ذلك ، بدلاً من مجرد محاولة إرجاع النتيجة.
رأيت أنه لم يتم تقديم إجابة عن 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);
?>
يمكنك قراءة المزيد عنها هنا
هنا مثال واقعي ل Drupal 8
https://github.com/npinos/drupal8-greenhouse
يتضمن تحكم وتوجيه
يُرجع هذا الرمز عدد العقد في تنسيق json المكشوف كنقطة نهاية