ड्रुपल 8, बीटा 2 में एक html हेड टैग जोड़ने की कोशिश की जा रही है


9

Drupal 8.0 Beta2 के साथ, के पक्ष drupal_add_html_head() में पदावनत किया गया है #attached। तो पुराना तरीका था:

function MYTHEME_page_build(&$page) {
    $viewport = array(
          '#type' => 'html_tag',
          '#tag' => 'meta',
          '#attributes' => array(
            'name' => 'viewport',
            'content' => 'width=device-width, initial-scale=1.0, maximum-scale=2.0, minimum-scale=0.55, user-scalable=yes',
          ),
        );
        drupal_add_html_head($viewport, 'viewport');
}

अब आपके द्वारा उपयोग किए जाने वाले परिवर्तन नोटिस के आधार पर #attached। तो उपरोक्त कोड अनिवार्य रूप से अंतिम भाग के साथ बदलने के लिए समान है:

$build['#attached']['html_head'][] = [$viewport, 'viewport'];

हालांकि यह काम नहीं करता है और वॉचडॉग में कोई त्रुटि संदेश नहीं है। मैं भी एक पेज में इस डाल दिया है की कोशिश की परिवर्तन के साथ-साथ अदला-बदली $buildके साथ $variablesऔर $outputलेकिन यह अभी भी नहीं है काम करते हैं। लत में, मैंने एक सरणी के रूप में पूरी बात की कोशिश की:

  $build['#attached']['html_head'][] = array(
    '#type' => 'html_tag',
    '#tag' => 'meta',
    '#attributes' => array(
      'name' => 'viewport',
      'content' => 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no',
    ),
  );

... लेकिन वह भी काम नहीं आया। मुझे यकीन नहीं है कि मैं क्या गलत कर रहा हूं, ऐसा लगता है कि यह काम करना चाहिए।

अपडेट करें

यहाँ काम कोड है जो hook_page_attachments_alterडी 8 बीटा 2 में उपयोग नहीं है क्योंकि यह सिर्फ देव के लिए प्रतिबद्ध था।

function MYTHEME_page_attachments_alter(array &$page) {
    $viewport = array(
      '#type' => 'html_tag',
      '#tag' => 'meta',
      '#attributes' => array(
        'name' => 'viewport',
        'content' => 'width=device-width, initial-scale=1, maximum-scale=1, user-scalable=no',
      ),
    );
    $page['#attached']['html_head'][] = [$viewport, 'viewport'];
  }

अब केवल मुद्दा यह है कि कोर के व्यूपोर्ट टैग को अधिलेखित नहीं किया जाता है इसलिए मैं अपने कस्टम टैग और कोर के साथ फंस गया हूं। सुनिश्चित नहीं है कि कैसे संभालना है कि एक या मेरा टैग कोर की ओवरराइटिंग होनी चाहिए?

यहां छवि विवरण दर्ज करें

जवाबों:


7

आपके पास प्रीप्रोसेस में $ बिल्ड नहीं है, इसलिए वह काम नहीं कर सकता है। $ बिल्ड को एक रेंडर सरणी होने की आवश्यकता है जो कहीं न कहीं प्रदान की जाती है। मैं यह भी नहीं देखता कि यह पहले कैसे काम कर सकता था, क्योंकि यह आपके फ़ंक्शन के चलने से पहले ही template_preprocess_html () में परिवर्तित हो जाता है।

हुक_पेज_टैचमेंट (_alter) () जोड़ें और हुक_पेज_बिल्ड करें / बदलें () को कमिट करें, और एक विषय के रूप में, आप हुक_पेज_आटैचमेंट_अल्टर () को लागू कर सकते हैं, सामान्य पैच में उदाहरणों के लिए देखें, जैसे common_test_page_attachments_alter ()

तो, $page['#attached']['html_head'][] = [$viewport, 'viewport'];वहाँ कुछ काम करना चाहिए।


ठीक है, आपकी मदद के लिए धन्यवाद, लेकिन मैं अभी भी खो गया हूं। मुझे यह देखने के लिए उत्सुक होना चाहिए कि क्या आप इसे काम कर सकते हैं। मैंने hook_page_build और बदलाव की कोशिश की है लेकिन अभी भी कोई खुशी नहीं है। मैंने भी कुछ उदाहरणों को बिना किसी भाग्य के कोर से पकड़ा था। ऐसा नहीं लगता कि ऐसा होना चाहिए।
डैनी इंग्लैंड

1
फिर अपने वर्तमान कोड उदाहरणों के साथ अपने प्रश्न को अपडेट करें। निश्चित रूप से मैंने जो उदाहरण दिया वह काम कर रहा है, क्योंकि इसका उपयोग परीक्षणों के लिए किया जाता है। इसलिए आप कुछ अलग कर रहे होंगे। मैंने जिस हुक का उपयोग करने का सुझाव दिया है वह हुक_पेज_आटैचमेंट_ल्टर () है, पेज_बिल्ट () नहीं है। हुक लागू करते समय और कुछ काम नहीं कर रहा है, तो सत्यापित करने के लिए पहली बात यह है कि यदि आपका कोड भी कहा जाता है, तो एक निकास जोड़कर; उदाहरण के लिए।
बरदिर

मैंने कार्य कोड जोड़ा है जो आपके सुझाए गए का उपयोग करता है hook_page_attachments_alter। एक पक्ष प्रभावित करता है कि मेरे पास अब दो व्यूपोर्ट टैग हैं, एक कोर से और एक मैंने अपनी थीम से जोड़ा है इसलिए मुझे यकीन नहीं है कि इससे कैसे निपटना है।
डैनी इंग्लैंड

1
यही कारण है कि दूसरे तर्क के लिए माना जाता है, html_head तत्व उपयोग कर रहे हैं जो चीजों को अद्वितीय रखने में सक्षम हो। कोर को देखते हुए, उस तत्व को DefaultHtmlFragementRenderer :: setDefaultMetatags () में जोड़ा जाता है। नए API में एक कुंजी निर्दिष्ट करने का कोई तरीका नहीं है, जो एक बहुत गंभीर समस्या की तरह लगता है। मेरा सुझाव है कि आप इसके लिए एक मुद्दा खोलें। शायद drupal.org/node/2350943 संबंधित है।
बर्दिर

मैंने एक मुख्य मुद्दा खोला: drupal.org/node/2359987
डैनी इंग्लैंडर
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.