मैं प्रोग्राम को प्रासंगिक फ़िल्टर के साथ दृश्य कैसे प्रस्तुत करूं?


20

मैं Drupal 8 में प्रासंगिक फिल्टर के साथ एक दृश्य कैसे प्रस्तुत करूं?

Drupal 7 में, मैं आमतौर पर निम्नलिखित कोड का उपयोग करता हूं।

$view = views_get_view('test_view'); //test_view is the view machine name
$view->set_display("block"); //block is the view display name
$view->set_arguments($tid); //$tid is the argument to pass
$view->pre_execute();
$view->execute();
$content = $view->render();

क्या Drupal 8 में इसे प्राप्त करने का कोई वैकल्पिक तरीका है?


क्या आप वास्तव में एक तर्क के रूप में पारित करना चाहते हैं? शायद आप व्यू के UI के माध्यम से जो चाहें प्राप्त कर सकते हैं।
कोई Sssweat

हाँ मुझे पता है कि मैं यूआई का उपयोग करके इसे प्राप्त कर सकता हूं लेकिन मेरे मामले में यह संभव नहीं है, मैं इसे केवल कुछ कोड द्वारा प्राप्त करना चाहता हूं।
संजय

जवाबों:


36

द्वारा उपयोग किए गए कोड पर आधारित views_get_view_result(), मैं निम्नलिखित कोड का उपयोग करूंगा, जैसा कि आप प्रश्न में दिखाए गए कोड के बराबर है।

  $args = [$tid];
  $view = Views::getView('test_view');
  if (is_object($view)) {
    $view->setArguments($args);
    $view->setDisplay('block');
    $view->preExecute();
    $view->execute();
    $content = $view->buildRenderable('block', $args);
  }

5
यह प्रतिपादन नहीं है, यह सिर्फ परिणाम प्राप्त कर रहा है। यही नहीं :) ऐसा करने का पसंदीदा तरीका $ व्यू-> बिल्डरेन्डेबल ($ प्रदर्शन, $ तर्क) का उपयोग करना है, drupal.stackexchange.com/questions/198920/…
बर्दिर

हां, मैं एक ही सोच रहा था, परिणाम बनाम प्रतिपादन के बारे में। :D
kiamlaluno

1
@GiorgosK Drupal 8 के साथ, आप कभी उपयोग नहीं करते drupal_render()। यह पर्याप्त है कि आप एक रेंडर करने योग्य सरणी लौटाते हैं, जो कि एक नियंत्रक वर्ग भी कर सकता है।
kiamlaluno

1
मेरे उपयोग के लिए @kiamlaluno अच्छी तरह से है, जो एक दृश्य से आउटपुट को संशोधित / ओवरराइड करने के लिए है, REST EXPORT (json output) को फील्ड फॉर्मैटर में $ कंटेंट पास करना सिर्फ json आउटपुट पर "ऐरे" आउटपुट कर रहा था ... इसलिए मैंने drupal_render($content)इसे पास किया वास्तव में मुझे json आउटपुट पर प्रदान किया गया आउटपुट दिया ... क्या मुझे कुछ याद आ रहा है? क्या आपको समझने के लिए कोई जगह है?
गियोर्ग्सके

1
@GiorgosK: यदि आप प्रदर्शन के लिए ड्रुपल का उपयोग करते हैं, तो आप इन दिनों रेंडर नहीं करते हैं, आप इसे अंतिम बिंदु तक एक रेंडर एरे में सब कुछ छोड़ देते हैं और सिस्टम को बाकी काम करने देते हैं। लेकिन अगर आपको ड्रुपल से परिणाम उठाने की जरूरत है (हो सकता है कि एक समाचार पत्र में या इसी तरह से डाल दिया जाए), तो आप रेंडर करते हैं, हां। लेकिन उपयोग शुरू न करें drupal_render(), इसे अपदस्थ किया जाएगा।
गबोर

9
/**
 * Return the rendered view with contextual filter.
 * @param string $viewId - The view machine name.
 * @param string $viewId - The display machine name.
 * @param array $arguments - The arguments to pass.
 * 
 * @return object $result
 */
function getView($viewId, $displayId, array $arguments)
{
    $result = false;
    $view = Views::getView($viewId);

    if (is_object($view)) {
        $view->setDisplay($displayId);
        $view->setArguments($arguments);
        $view->execute();

        // Render the view
        $result = \Drupal::service('renderer')->render($view->render());
    }

    return $result;
}

/**
 * Get json output.
 * @return array $data
 */
function jsonData() {
    $data = [];
    $viewId = 'rest_comments';
    $displayId = 'rest_export_1';
    $arguments = [$nid];

    // Get the view
    $result = getView($viewId, $displayId, $arguments);

    if(is_object($result)) {
        $json = $result->jsonSerialize();
        $data = json_decode($json);
    }

    return $data;
}


/**
 * Get the view object.
 * @return object $view
 */
function view() {
    $viewId = 'rest_comments';
    $displayId = 'rest_export_1';
    $arguments = [$nid];

    // Get the view
    $view = getView($viewId, $displayId, $arguments);

    return $view;
}

2

बाकी निर्यात प्रदर्शन के वास्तविक JSON आउटपुट पाने के लिए आप कुछ इस तरह से कर सकते हैं:

$view = Views::getView('view_id');
$render_array = $view->buildRenderable('display_name', $args);
$rendered = \Drupal::service('renderer')->renderRoot($render_array);
$json_string = $rendered->jsonSerialize();
$json_object = json_decode($rendered);

आकर्षण की तरह काम कर रहा है, धन्यवाद imclean।
सतीश सुंदर 20

पूरी तरह से काम करता है, कैसे उपयोगकर्ता को देखने का अनुरोध करने के लिए सेट करें? उदाहरण के लिए, संशोधन को दिखाने के लिए अनुमति की आवश्यकता होती है।
सिमोनबी

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