it-swarm.asia

كيف أستخدم hook_views_query_alter ()؟

بعد ما ورد في وثائق hook_views_query_alter () ، قمت بإنشاء ملف باسم alterform.views.inc ووضعه في وحدة ممكّنة تسمى alterform. أضفت الكود التالي في alterform.views.inc. لكنه لا يعمل.

function alterform_views_query_alter(&$view, &$query) {
  switch($view->name) {
    case 'myViewName':  
      echo 'test test'; // test       
      $query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC";
      $query->orderby[1] = "node_title ASC";
      break;
  }
}

لماذا لا يخرج "اختبار الاختبار"؟ ما الخطأ في قانون بلدي؟

لا يوجد حتى الآن أي نتيجة للاختبار والآراء. ما الخطأ في قانون بلدي؟ شكرا جزيلا

20
enjoylife

حق. من أجل "القيام" بأي شيء مع طرق العرض في الوحدة النمطية ، يجب عليك تنفيذ hook_views_api. بدون ذلك ، لن يتم التعرف على وحدتك من خلال المشاهدات ، على الإطلاق (AFAIK).

يرجى إضافة ما يلي إلى رمز الوحدة النمطية الخاصة بك:

/**
 * Implementation of hook_views_api().
 */
function alterform_views_api() { // your module name into hook_views_api
  return array(
    'api' => 2,
    // might not need the line below, but in any case, the last arg is the name of your module
    'path' => drupal_get_path('module', 'alterform'),
  );
}

يجب أن يعمل ذلك على إصلاحه حتى يتم التعرف على وحدتك النمطية على الأقل ، ثم يمكنك البدء في تصحيحها :)

من الطرق الجيدة لبدء تصحيح أخطاء العرض (أي خطوة طفل) هي وضع dpm($view); في بداية وظيفة المشاهدات التي تقوم بتنفيذها. في معظم الحالات ، سيؤدي ذلك إلى تفريغ المعلومات على الشاشة التي ستساعدك على معرفة مكانك. أقترح القيام بذلك مع تثبيت/تشغيل devel.module.

تحرير: يفترض هذا المشاهدات 2 و Drupal 6. من الأفضل أن تسأل حول ما إذا كانت تلك ليست الأسلحة التي تختارها.

22
NikLP

يمكنك اختبار 3 أشياء:

  • مسح ذاكرة التخزين المؤقت الخاصة بك
  • تحميل وتمكين Devel ،
  • استخدم dpm() بدلاً من echo()
  • اختبار $view->name مع dpm()
4
Manu

تحتاج إلى وضع ملف yourmodule.views.inc في دليل الوحدة النمطية ، وليس في دليل فرعي ، أو لا يمكن لميزة "طرق العرض" التقاطه تلقائيًا.

3
shaneonabike
    $query->orderby[0] = "FIELD(node.type, 'story', 'page', 'productTypeC', 'productTypeD') ASC";

يجب ان يكون

    $query->orderby[0]['field'] = "field_name ASC";
2
tan

إذا كنت تستخدم دليلاً لـ yourmodule.views.inc ، فأنت بحاجة إلى ذكر مسارها في ملف الوحدة النمطية ، باستخدام رمز مشابه للرمز التالي:

    'path' => drupal_get_path('module', 'mymodule') . '/subdirectory/';
1
tan