प्रीप्रोसेस हुक में नोड की सामग्री प्रकार की जाँच करें


12

मेरे पास चर की एक श्रृंखला है जिसे मैं विशिष्ट सामग्री टेम्पलेट्स के लिए टहनी टेम्पलेट्स पर उपलब्ध कराना चाहता हूं।

में MYTHEME.themeमेरे पास है:

function MYTHEME_preprocess_node(&$variables) {

  if (isset($variables['node'])) {

    $mycustomblock = \Drupal::service('plugin.manager.block')
      ->createInstance('myblock', []);

    $variables['mycustomblock'] = $mycustomblock->build();

    $headertext = \Drupal::service('plugin.manager.block')
      ->createInstance('headertext',
        [
          'text-align-submit'  => 'right',
          'uppercase-submit'   => TRUE,
          'header_size'        => 'h4',
          'header-size-submit' => 'h4',
          'grid-size-submit'   => 6,
          'header-title'       => 'This is a test',
        ]
      );

    $variables['headertext'] = $headertext->build();
  }
}

यह मुझे उपयोग करने की अनुमति देता है {{ headertext }}और {{ mycustomblock }}सामग्री प्रकार टेम्पलेट में node--contenttype1.html.twigऔर जैसे node--contenttype2.html.twig। लेकिन मैं नहीं बल्कि प्रत्येक एकल नोड प्रकार के लिए चर 'headertext'और 'mycustomblock'चर का निर्माण करता हूं, जब मुझे केवल एक सामग्री प्रकार के लिए प्रत्येक की आवश्यकता होती है। एक स्विच होना अच्छा होगा या यदि स्टेटमेंट यह जाँचता है कि ब्लॉक के साथ वैरिएबल जेनरेट करने से पहले वह किस प्रकार का कंटेंट टाइप करता है।

क्या कोई ऐसा तरीका है जिससे मैं नोड के सामग्री प्रकार की जांच कर सकता हूं?

मैंने कोशिश की

$type = $variables['node']->type;

लेकिन वह काम नहीं आया।

जवाबों:


15

एक नोड के सामग्री प्रकार को प्राप्त करने के लिए, आप बस का उपयोग करें $variables['node']->getType()या $variables['node']->bundle()। पहला तरीका सिर्फ दूसरा कहता है, इसलिए एक या दूसरे को कॉल करने से बहुत फर्क नहीं पड़ता है।

public function getType() {
  return $this->bundle();
}

एकमात्र अंतर यह है कि bundle()हर इकाई के लिए परिभाषित किया गया है, चूंकि बंडल की अवधारणा सभी संस्थाओं के लिए आम है, जबकि सामग्री प्रकार एक संपत्ति है जिसे नोडल के लिए उपयोग किया जाता है, उन्हें किसी एक संस्था में बदलने से पहले Drupal कोर मॉड्यूल कार्यान्वित करते हैं; उपयोग bundle()करने से अन्य इकाई प्रकारों के लिए कोड को अनुकूलित करना आसान हो जाता है, लेकिन मुझे नहीं लगता कि यह आपके द्वारा उपयोग किए जा रहे कोड के लिए मामला है।


5

आपको उपयोग करना होगा $variables['node']->getType()। इसके अलावा, अगर आपको केवल कुछ दृश्य मोड पर इसकी आवश्यकता है, तो इस पर एक चेक करने के साथ ही विचार करें$variables['view_mode']


2

आप अपने हुक फ़ंक्शन नाम में नोड (और दृश्य प्रकार) जोड़ सकते हैं:

function MYTHEME/MYMODULE_preprocess_node__nodetype__display(&$variables) {
  // ...
}

उदाहरण के लिए, मोड pageमें नोड प्रकार के लिए full:

function MYTHEME/MYMODULE_preprocess_node__page__full(&$variables) {
  // ...
}
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.