আমি কীভাবে হুক_ভিউ_কোয়ারি_াল্টার () ব্যবহার করব?


20

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;
  }
}

কেন এটি "পরীক্ষার পরীক্ষা" আউটপুট দেয় না? আমার কোডে কী ভুল?

এখনও পরীক্ষা এবং দর্শনগুলির কোনও আউটপুট নেই। আমার কোডে কী ভুল? ধন্যবাদ


এটি কখনই ব্যবহার করা হয়নি, তবে alterform.views.incআপনার মডিউলের অভ্যন্তরে অবশ্যই অন্তর্ভুক্ত থাকা প্রয়োজন / আপনি এটি করেন নি এটি সম্ভব ?
ননসেন্স

আমি আমার অল্টারফর্ম মডিউল ফাইলে
alterform.views.inc রেখেছি

কীভাবে আপনার মডিউলের ভিতরে alterform.views.inc অন্তর্ভুক্ত করা / প্রয়োজন? আপনাকে ধন্যবাদ
উপভোগ লাইভ

উত্তর:


22

ঠিক। কোনও মডিউলে ভিউ সহ কিছু করতে "করতে" আপনাকে হুক_ভিউ_পি প্রয়োগ করতে হবে। এটি না করে, আপনার মডিউলটি কখনও দেখা যাবে না, কখনও (এএফআইএকে)।

আপনার মডিউল কোডে দয়া করে নিম্নলিখিতগুলি যুক্ত করুন:

/**
 * 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 এবং দ্রুপাল 6 ধরে নিয়েছে those আপনি যদি সর্বোত্তমভাবে জিজ্ঞাসা করতে চান তবে সেগুলি যদি আপনার পছন্দের অস্ত্র নয়।


এটি দুর্দান্ত কাজ করে :)
কালিদাসন

4

আপনি 3 টি জিনিস পরীক্ষা করতে পারেন:

  • আপনার ক্যাশে সাফ করুন
  • ডেভেল ডাউনলোড এবং সক্ষম করুন ,
  • dpm()পরিবর্তে ব্যবহার করুনecho()
  • $view->nameসঙ্গে পরীক্ষাdpm()

আমি ক্যাশে সাফ করে দিয়েছি এবং নামটি প্রতিধ্বনিত করেছি। তবে ভিউ ব্লকের মধ্যে ভিউয়ের নাম সম্পর্কে এখনও কোনও আউটপুট নেই।
উপভোগ লাইভ

অদ্ভুত। আমি সাধারনত প্রতিধ্বনিতে নির্ভর করি না ... যেভাবে আমি আপনার কোডটিতে একটি সামান্য ত্রুটি লক্ষ্য করেছি, সেখানে একটি "}" আছে যা উচিত নয় ... একটি পেস্ট ত্রুটি হওয়া উচিত?
মনু

তবে যখন আমি মুদ্রণ_আর ($ দর্শন) তখনও ভিউ ব্লকে শিরোনাম সম্পর্কে কোনও আউটপুট নেই।
উপভোগ লাইভ

মুদ্রণ_আর ($ দর্শন) হ্যাঁ প্রিন্ট_আর ($ দর্শন) ব্যতীত অন্য কিছু মুদ্রণ করা উচিত নয়। আপনি কি স্যুইচের আগে রেখেছিলেন?
মনু

3

আপনাকে yourmodule.views.inc ফাইলটি মডিউল ডিরেক্টরিতে রাখতে হবে, কোনও উপ-ডিরেক্টরিতে নয়, বা দৃশ্যগুলি স্বয়ংক্রিয়ভাবে এটিকে নিতে পারে না।


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

হতে হবে

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

1

যদি আপনি yourmodule.views.inc এর জন্য একটি ডিরেক্টরি ব্যবহার করে থাকেন তবে আপনাকে মডিউল ফাইলটিতে তার পথটি উল্লেখ করতে হবে, নিম্নলিখিত কোডগুলির মতো একই কোড ব্যবহার করে:

    'path' => drupal_get_path('module', 'mymodule') . '/subdirectory/';
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.