किसी विशिष्ट नोड में दृश्य कैसे एम्बेड करें?


13

मैं एक विशिष्ट नोड में एक दृश्य एम्बेड करने की कोशिश करता हूं। मुझे Drupal 7 और PHP-Templates के साथ ऐसा करने के लिए ट्यूटोरियल मिला:

<?php print views_embed_view('view_name'); ?>

लेकिन मैं Drupal 8 में टहनी-टेम्प्लेट के साथ एक रास्ता खोज रहा हूं। मैंने views_embed_view()फ़ंक्शन को कॉल करने की कोशिश की hook_node_view()और इसे नोड पर असाइन किया ताकि मैं इसे टिग-टेम्पलेट में प्रिंट कर सकूं। लेकिन ऐसा लगता है कि इस हुक को कभी नहीं बुलाया जाता है।

किसी भी संकेत / समाधान यह कैसे Drupal 8 तरीके से करने के लिए?

जवाबों:


19

टहनी दृश्य एंबेड

यह मॉड्यूल एक टहनी फ़ंक्शन के साथ विचारों को एम्बेड करने की अनुमति देता है।

{{ views_embed_view('view_name', 'view_id') }}

उपरोक्त मॉड्यूल के पक्ष में मूल्यह्रास किया गया था

टहनी की टहनी

Twig Tweak मॉड्यूल कुछ उपयोगी कार्यों और फिल्टर के साथ एक Twig एक्सटेंशन प्रदान करता है जो डेवलपर अनुभव में सुधार कर सकता है।

उदाहरण के लिए: <dd>{{ drupal_view('view_name', 'view_machine_name') }}</dd>

आप यहाँ पर पा सकते हैंview_machine_name


@TiMESPLiNTER आपको सिर्फ एक सिर दे रहा है।
बजे कोई Sssweat

कब से? संस्करण?
विशाल कुमार साहू

1
@VishalKumarSahu जब से मेरा जवाब पोस्ट किया गया था, Mar 18 '16। मुझे लगता है कि मॉड्यूल अभी भी काम करता है, यह सिर्फ इतना है कि अब इसे बनाए नहीं रखा जा रहा है या इसे और विकसित नहीं किया जा रहा है।
कोई Sssweat

बिल्कुल सही। यह बहुत अच्छा काम करता है और मुझे इसके साथ अच्छा अनुभव हो रहा है। साभार
विशाल कुमार साहू

टहनी की टहनी! अच्छा मॉड्यूल
हरीश एसटी

5

यह वह तरीका है जो मेरे लिए क्लासी के ड्रुपल 8 बीटा 12 उप-विषय में काम करता था।

अपने_theme.info.theme फ़ाइल में

function stjameskidsclub_preprocess_node(&$variables){
  $stuff  = views_embed_view('policy_documents', 'embed_1', 28);
  $variables["my_view"] = \Drupal::service('renderer')->renderRoot($stuff);
}  

मैंने एक टॉगल ब्लॉक के साथ नोड.html.twig की प्रतिलिपि बनाई और लेख टैग (या जिस क्षेत्र को आप बदलना चाहते हैं) को घेर लिया। मैंने इसे / टेम्प्लेट / सामग्री फ़ोल्डर में रखा था।

{% block replace_area %}
  <article{{ attributes.addClass(classes) }}>

    ...

  </article>  
{% endblock replace_area %}

फिर मैंने निम्नलिखित कोड के साथ / टेम्पलेट / सामग्री फ़ोल्डर में एक नोड - 2.html.twig (वांछित नोड के साथ 2 बदलें) बनाया।

{% extends "node.html.twig" %}

{% block replace_page %}
  {{ my_view }}
{% endblock %}

4

पहली समस्या जिसके साथ आप लड़ रहे हैं, वह यह है कि नोड्स जैसी प्रदत्त इकाइयाँ अब डिफ़ॉल्ट रूप से कैश की गई हैं, इसलिए हुक_नोड_व्यू () केवल एक बार कैश क्लियर / सेविंग नोड के बाद कहा जाता है।

हालाँकि, यह अक्षम करना काफी आसान है, सेटिंग्स देखें। local.php।

फिर, $ बिल्ड में एक दृश्य का आउटपुट डालना काफी आसान है और कम या ज्यादा काम करता है जैसे 7.x में। एम्बेड फ़ंक्शन का उपयोग करने के बजाय, $ दृश्यों का उपयोग करने पर विचार करें = Views :: getView () और फिर $ विचार-> buildRenderable ()

दो सुझाव:

  • कुंजी आप में एक अतिरिक्त क्षेत्र के रूप में उपलब्ध $ निर्माण के लिए उपयोग करते हैं hook_entity_extra_field_info () , तो प्रदर्शन की जाँच करता है, तो घटक सक्षम किया गया है (देखें कैसे user_user_view () करता है। यही कारण है कि आप में देखने का वजन / नियुक्ति कॉन्फ़िगर कर सकते हैं यूआई और इसे कुछ दृश्य मोड पर भी छिपाते हैं।
  • यदि आपके दृश्य में पृष्ठ है, तो यह थोड़ा अधिक जटिल है, क्योंकि नोड आउटपुट कैश है। आपको पेजर को कैश की कुंजी से अवगत कराना होगा, फिर एक उदाहरण के लिए comment_entity_build_defaults_alter () देखें (न कि एक दृश्य, लेकिन यह वह निकटतम उदाहरण है जो कोर का है)।

इस बेहतरीन जवाब के लिए सबसे पहले thx। वैसे मैंने settings.local.phpसभी कैश को "सक्षम" कर दिया और साफ़ कर दिया। लेकिन मेरी हुक themename_node_view()में themename.themeअभी भी नहीं बुलाया जाता है। क्या आपके पास कोई विचार है कि ऐसा क्यों हो सकता है?
TiMESPLiNTER

1
सेटिंग्स में एक स्निपेट होता है। ऐसा करने के लिए आपको (अंत में) असहजता की आवश्यकता होती है। यह सुनिश्चित करने के लिए कि settings.local.php लोड किया गया है, अमान्य PHP जोड़ें जो एक घातक त्रुटि का परिणाम है। यदि आपकी साइट विफल नहीं होती है, तो फ़ाइल लोड नहीं होती है।
बरादिर

2

जैसा कि बर्दिर ने देखा- > buildRenderable वह है जिसे आप ढूंढ रहे हैं, लेकिन एक मॉड्यूल में कुछ और संदर्भ देने के लिए आपको निम्नलिखित कार्य करने होंगे।

//use core libraries
use Drupal\Core\Entity\EntityInterface;
use Drupal\Core\Entity\Display\EntityViewDisplayInterface;

//use views class
use \Drupal\views\Views;

function hook_node_view(&$build, $node, $display, $view_mode){

 $thisView = Views::getView('view_name');

 $build['arbitrary_render_array_key_here'] = $thisView->buildRenderable('block_1',array($your_arguments));

}

फिर अपने पेज टेम्पलेट में आप इसे एक्सेस कर सकते हैं

{{ page.content.theme_name_content }}

1
यह सब Drupal 7. दिलचस्प में एक एकल लाइनर था।
WM

0

विचारों के भीतर, आप अपने प्रासंगिक डेटा के साथ एक ब्लॉक बना सकते हैं।

ब्लॉक निर्माण के बाद, आप अपने इच्छित सामग्री क्षेत्र (पाद लेख / शीर्षक / सामग्री / आदि) में आने के लिए ब्लॉक को असाइन कर सकते हैं। इसे असाइन करें, और फिर "कॉन्फ़िगर करें" पर क्लिक करें। आपको "विशिष्ट पृष्ठों पर ब्लॉक दिखाना" करने में सक्षम होना चाहिए। "केवल सूचीबद्ध पृष्ठ" का चयन करना और पृष्ठ विनिर्देश में / नोड / अपना नोड-नंबर जोड़कर उस दृश्य / ब्लॉक को केवल अपने वांछित नोड के साथ प्रदर्शित करने के लिए सीमित करना चाहिए।

चीयर्स!


आपके उत्तर के लिए thx :-)। लेकिन फिर मुझे प्रत्येक मामले के लिए एक सामग्री क्षेत्र बनाना होगा। इसलिए अगर मुझे पहले पाठ, फिर दृश्य और फिर पाठ पसंद है। या अगर मुझे पहले पाठ और फिर दृश्य या पहले दृश्य और फिर पाठ पसंद है। फिर मुझे 3 अलग-अलग सामग्री क्षेत्र बनाने होंगे जो मैं विशिष्ट नोड टेम्प्लेट में प्रस्तुत करता हूं। लेकिन views_embed_view()दृष्टिकोण बहुत आसान है और मुझे लगता है कि क्लीनर।
TiMESPLiNTER

0

मुझे पता है कि आप उल्लेख करते हैं कि आप टहनी खाकों का उपयोग करना चाहते हैं, लेकिन आप टेम्पलेट्स में चारों ओर खुदाई करने से बचने के लिए दृश्य संदर्भ फ़ील्ड मॉड्यूल का उपयोग कर सकते हैं । साथ ही इसे किसी भी फील्ड योग्य इकाई में जोड़ने में सक्षम होने का लाभ देता है ताकि सामग्री संपादक दृश्य / आउटपुट को कॉन्फ़िगर कर सकें।

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