मैं हुक_ साक्षात्कार_क्लेरी_लेटर () का उपयोग कैसे करूं?


20

हूक_व्यूज_क्लेरी_ल्टर () के लिए प्रलेखन में जो बताया गया है, उसका पालन करते हुए , मैंने नाम की एक फाइल बनाई 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अपने मॉड्यूल के अंदर शामिल करना / इसकी आवश्यकता होगी और आपने ऐसा नहीं किया?
nonsenz

मैं अपने alterform मॉड्यूल फ़ाइल में alterform.views.inc डाल दिया है
enjoylife

कैसे शामिल करें / अपने मॉड्यूल के अंदर alterform.views.inc को शामिल करें? धन्यवाद
आनंदमय

जवाबों:


22

सही। किसी मॉड्यूल में विचारों के साथ कुछ भी "करने" के लिए, आपको 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. यदि आपके पास आपकी पसंद के हथियार नहीं हैं, तो आप सबसे अच्छा पूछेंगे।


यह ठीक काम करता है :)
कालिदासन

4

आप 3 चीजों का परीक्षण कर सकते हैं:

  • अपना कैश साफ़ करें
  • डाउनलोड करें और देवल को सक्षम करें ,
  • के dpm()बजाय का उपयोग करेंecho()
  • के $view->nameसाथ परीक्षणdpm()

मैंने कैश साफ़ कर दिया है, और $ दृश्य-> नाम गूँज रहा है। लेकिन अभी भी व्यू ब्लॉक में नाम के बारे में कोई आउटपुट नहीं है।
भोग

अजीब। मैं सामान्य रूप से प्रतिध्वनि पर भरोसा नहीं करता ... वैसे मैंने आपके कोड में थोड़ी सी त्रुटि देखी है, एक "}" है जो कि होना चाहिए ... एक पेस्ट त्रुटि?
मनु

लेकिन जब मैं Print_r ($ विचार) देखता हूं, तब भी व्यू ब्लॉक में टाइट के बारे में कोई आउटपुट नहीं है।
enjoylife

Print_r ($ views) को कुछ भी नहीं छापना चाहिए, लेकिन print_r ($ view) हां। क्या आपने इसे स्विच करने से पहले रखा था?
मनु

3

आपको अपनी निर्देशिका मॉड्यूल निर्देशिका में दर्ज करनी होगी, उपनिर्देशिका के भीतर नहीं, या दृश्य इसे स्वचालित रूप से नहीं ले सकते।


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/';
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.