أحتاج إلى استخدام Drupal كعميل لخدمة ويب ، لاستخراج البيانات وعرضها في طريقة عرض أو كمحتوى. (استخدام التنسيق هو JSON أو REST.)
أستخدم عميل خدمة الويب الوحدة النمطية Drupal 7 و الخدمات الوحدة النمطية Drupal 6 لكن لا اعرف كيف استعملهم قرأت التوثيق لكني لم احصل على اي نتيجة.
يمكن لأي شخص أن يساعد في هذه المشكلة ، أو يخبرني عن كيفية استخدام هذه الوحدات؟ هل هناك أي وحدة أخرى لهذا الغرض؟
حل ممكن: أجد وحدة تسمى XML VIEWS لكن هذه الوحدة تحول ملفات XML فقط.
الآن ، أبرمج في هذه الوحدة لتحويل JSON إلى XML.
في هذه الملفات: xml_views_plugin_query_xml.inc
في هذه الوظيفة: تنفيذ
أي شخص لديه حل آخر؟
يحتوي دروبال على وظائف محددة يمكن أن تساعد في التواصل مع خدمة الويب ومعالجة إدخال JSON.
دروبال 7 لديه الوظائف التالية:
rawurlencode()
- d.باستخدام هذه الوظائف ، يمكنك كتابة الوحدة النمطية المخصصة الخاصة بك لتقديم الطلبات إلى موقع يقوم بتنفيذ خدمة ويب.
إذا كانت هناك بعض القيود حول عدد الطلبات التي يمكن إجراؤها لخادم الويب ، فيمكنك استخدام وظائف Drupal لتخزين النتيجة التي تم الحصول عليها من خادم الويب في ذاكرة التخزين المؤقت:
لاحظ أن Drupal يدعم أكثر من حاوية تخزين مؤقت واحدة ، ويمكن للوحدات النمطية استخدام صناديق التخزين المؤقت الخاصة بها ، عند الضرورة.
يدعم Drupal أيضًا عناصر ذاكرة التخزين المؤقت التي تتم إزالتها تلقائيًا عند تمرير ذاكرة التخزين المؤقت المتتالية (راجع وصف CACHE_TEMPORARY ثابت). تنفيذ hook_flush_caches () ، تسمح الوحدات للمستخدمين الإداريين بتنظيف ذاكرة التخزين المؤقت التي تستخدمها الوحدة عند النقر على زر "مسح" في صفحة "الأداء" ، أو في أي مرة تستدعي الوحدة - drupal_flush_all_caches () .
في Drupal 7 ، ترتبط بيانات ذاكرة التخزين المؤقت للبيانات المستخدمة بشكل متكرر بمتغير ثابت تمت معالجته بـ drupal_static () . عندما يتم استخدام البيانات بشكل متكرر حقًا عند إخراج نفس الصفحة ، يتم استخدام رمز مشابه لما يلي:
// Use the advanced drupal_static() pattern, since this is called very often.
static $drupal_static_fast;
if (!isset($drupal_static_fast)) {
$drupal_static_fast['implementations'] = &drupal_static(__FUNCTION__);
}
$implementations = &$drupal_static_fast['implementations'];
// …
// Fetch implementations from cache.
if (empty($implementations)) {
$implementations = cache_get('module_implements', 'cache_bootstrap');
if ($implementations === FALSE) {
$implementations = array();
}
else {
$implementations = $implementations->data;
}
}
الكود هو جزء من module_implements () .
في كل مرة أحتاج فيها لاستهلاك خدمة ويب ، قمت للتو بإنشاء PHP فئة قائمة حول file_get_contents أو curl بالاشتراك مع - json_decode أو simplexml_load_string .
يتم بعد ذلك الوصول إلى الفصل في وحدة نمطية عن طريق دالة getter التي تستخدم drupal_static أو $static
نمط لـ Drupal 6.
ثم استخدم هذا داخل الكتل المخصصة الخاصة بي ، وعمليات رد القائمة ، وما إلى ذلك ، حسب الحاجة.
تعديل
إجابة @ kiamlaluno صحيحة وتوضح طريقة للقيام بذلك من خلال Drupal. السبب الرئيسي لعدم القيام بذلك هو أنني أفضل تجريد فئة خدمة الويب بطريقة تسمح لي استخدامه في تطبيقات أخرى. هناك مزايا وعيوب لذلك ، لذلك وزع خياراتك.