क्या व्यूज पेजर सेटिंग को गतिशील रूप से सेट करना संभव है?


13

उदाहरण के लिए, आपके पास एक ऐसा दृश्य है जो एक निश्चित नोड प्रकार को देखते हुए प्रदर्शित करता है, लेकिन आप चाहते हैं कि पेजर सेटिंग्स प्रत्येक व्यक्ति नोड के लिए अलग हों। मैं "पेजर सेटिंग" जैसे एक CCK फ़ील्ड बनाने के बारे में सोच रहा था और फिर इसे xy का पूर्णांक विकल्प देता हूँ। लेकिन मुझे नहीं पता कि क्या यह संभव है कि किसी भी क्षेत्र को गतिशील रूप से दृश्य सेटिंग में प्लग किया जाए। या शायद ऐसा करने का एक और तरीका है?

जवाबों:


18

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

आपको ऐसा करने में सक्षम होना चाहिए:

/*
 * Implementation of hook_views_pre_build().
 */
function hook_views_pre_build(&$view) {

  // Make sure this is only for the specific view you want to modified
  if ($view->name == "foo_bar") {

    // Get the x-y value from where you're storing it (in your example the node object).
    $pager_count = get_count_for_this_node();

    // Lets also make sure that this is a number so we won't destroy our view.
    if (is_numeric($pager_count)) {

      // Now lets set the pager item to what ever out count is.
      $view->pager['items_per_page'] = $pager_count;
    }
  }
}

ऊपर हम एक दृश्य हुक का उपयोग कर रहे हैं जिसे दृश्य क्वेरी के निर्माण से पहले कहा जाता है जिस तरह पेजर और बाकी सब कुछ परिवर्तन को प्रतिबिंबित करेगा।

सतर्कता का शब्द: विचार हुक का उपयोग केवल तभी किया जाना चाहिए जब आप समझते हैं कि व्हाट्सएप चल रहा है। उपरोक्त कोड विचारों के लिए लिखा गया है- 2.x।

उम्मीद है की यह मदद करेगा।


बहुत बढ़िया धन्यवाद। मेरे पास अभी तक कोई मॉड्यूल विकास का अनुभव नहीं है, लेकिन मैं इसे उन चीजों के एक जोड़े के लिए शुरू कर रहा हूं जिन्हें मैं पूरा करना चाहता हूं। मेरे पास PHP की एक कार्यशील पकड़ है, इसलिए मैं इस बात का अनुसरण कर सकता हूं कि उस कोड में क्या हो रहा है जो आपने ऊपर चिपकाया है। मुझे लगता है कि यह कुआं मेरी बहुत मदद करता है। धन्यवाद।
जय

1
व्यूज़ 3.x के लिए संबंधित कोड को बदल दिया जाना चाहिए$view->items_per_page = $pager_count;
स्टीवनवे

क्या गतिशील रूप से भी प्रत्येक पृष्ठ की ऑफ़सेट सेट करना संभव है?
shekoufeh

2

Drupal 7 के लिए, केवल निम्नलिखित लिखना चाहिए:

$view->items_per_page = $pager_count;

उदाहरण में:

/**
 * Implements hook_views_pre_build().
 */
function module_name_views_pre_build(&$view) {
  if ($view->name == "foo_bar" && $view->current_display == 'foo_display') {
    $pager_count = get_count_for_this_node();
    if (is_numeric($pager_count)) {
      $view->items_per_page = $pager_count;
    }
  }
}

मैं @ericduran द्वारा कोड उदाहरण का उपयोग करता हूं।


1

आपको विचार पूर्वप्रक्रिया फ़ंक्शन का उपयोग करना चाहिए

/*
 * Implementation of hook_views_pre_render().
 */
function MYMODULE_views_pre_render(&$view){
  // $view->name
  // $view->current_display
  // ...
  // look for other variables in $view object
}

"प्रीप्रोसेस" थीमिंग के लिए है और प्री_रेंडर बहुत देर हो चुकी है (वह क्वेरी पहले ही चला दी गई थी) - प्री_बिल्ड हुक बहुत बेहतर है।
मोजजिस

1

परिणाम देखने और पेजर को hook_views_pre_render में अपडेट करने के लिए, आप निम्न कार्य कर सकते हैं:

<?php

/**
 * Implementation of hook_views_pre_render().
 */
function MODULENAME_views_pre_render(&$view) {
  if ($view->name == 'my_view' && $view->current_display == 'my_display') {
    // View result update logic.
    // e.g.
    // $result = array();
    // foreach ($view->result as $k => $row) {
    //   if (whatever is your condition) {
    //     $result[$k] = $row;
    //   }
    // }

    // Assuming $result has data as per your logic.
    // Update the pager according to result.
    $view->query->pager->total_items = count($result);
    $view->query->pager->update_page_info();
    // Add results to view.
    $view->result = $result;
  }
}

यह काम करना चाहिए !! ;)


अति उत्कृष्ट! मैं क्वेरी द्वारा लौटाए गए आइटम पर निर्भर किसी दिए गए पृष्ठ पर आइटम की संख्या को सीमित करना चाहता था। इस विधि ASAP की जाँच करेंगे।
जेन्स

यह बिल्कुल काम नहीं करता है। आपके द्वारा निर्वहन की जाने वाली पंक्तियाँ अगले पृष्ठ पर नहीं आतीं। इसलिए आप लापता सामग्री को समाप्त करते हैं। और जांच की जरूरत है।
जेन्स

0

@tanmayk के कोड ने मेरे लिए चाल चली। हुक_ब्यूस_पर_रेंडर में कोड की इन 2 पंक्तियों को जोड़ा गया

$view->query->pager->total_items = $nr;
$view->query->pager->update_page_info();

लेकिन मुझे देखने के लिए परिणाम जोड़ने की आवश्यकता नहीं थी।

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