Drupal 8 में टेम्प्लेट कैसे रेंडर किया जाता है


12

मैं Drupal 8 में एक टेम्प्लेट रेंडर करने का प्रयास कर रहा हूं। Drupal 7 में, मैं hook_theme के साथ एक थीम बनाऊंगा, अपने मॉड्यूल में एक टेम्प्लेट डायरेक्टरी बनाऊंगा, टेम्प्लेट फ़ाइल को ड्रॉप करूंगा और मैं इसे थीम () के साथ प्रदर्शित कर सकता हूं। मैं Drupal 8 के साथ कैसे करूँ? मैंने निम्नलिखित की कोशिश की, लेकिन यह गलत है:

Twitter_pull.module में

/ **
 * इम्प्लीमेंट्स हुक_टीम ()।
 * /
फ़ंक्शन twitter_pull_theme ($ मौजूदा, $ प्रकार, $ थीम, $ पथ) {
  वापसी सरणी (
    'twitter_pull_tweet_listing' => सरणी (
      'चर' => सरणी (
        'विवरण' => सरणी (),
      ),
      'टेम्प्लेट' => 'टेम्प्लेट / twitter_pull_tweet_listing',
    ),
  );
}

Twitter_pull / टेम्पलेट्स के अंदर: twitter_pull_tweet_listing.html.twig

मेरे ब्लॉक के अंदर:

$ tweet_template = array ('# theme' => 'twitter_pull_tweet_listing', '#attributes' => array ('params' => $ params));
$ आउटपुट = drupal_render ($ tweet_template, array ('params' => $ params));
$ आउटपुट प्रिंट करें;

मुझे अपने लॉग में निम्न त्रुटि मिलती है:

उपयोगकर्ता त्रुटि: "सामग्री" Drupal \ Core \ Render \ Element में एक अमान्य रेंडर सरणी कुंजी है :: बच्चे () (C की पंक्ति 89: \ xampp \ htdocs \ drupal \ core \ lib \ Drupal \ Core's \ender \ तत्व। php)।

संपादित करें: एक और त्रुटि:

Twig_Error_Loader: टेम्प्लेट "मॉड्यूल / कस्टम / twitter_pull / टेम्पलेट्स / टेम्प्लेट / twitter_pull_tweet_listing.html.twig" (": C: \ xampp \ _tdocs \ drupal" देखने में असमर्थ)। in Twig_Loader_Filesystem-> findTemplate () (C की लाइन 202: \ xampp \ htdocs \ drupal \ core \ seller \ twig \ libig \ libig \ Twig \ Loader_ \ _ system_php)।

मुझे लगता है कि यह त्रुटि हो रही है क्योंकि मैं नामस्थान और ऑटोलोडिंग का सही उपयोग नहीं कर रहा हूं। मैं अपनी टेम्पलेट फ़ाइल कहाँ रखूँ? त्रुटि संदेश के आधार पर, मैंने इसे C: \ xampp \ htdocs \ drupal \ टेम्पलेट्स \ पर भी डालने की कोशिश की, लेकिन यह अभी भी काम नहीं किया।


Twitter_pull_tweet_listing.html.twig में क्या है?
क्लाइव

बस एक प्लेसहोल्डर: पाठ 'यह एक टहनी टेम्पलेट है'
user1015214

किसी विशेष कारण से आप दूसरे तर्क के रूप में मापदंडों की एक सरणी से गुजर रहे हैं drupal_render()? यह एक बूलियन उम्मीद कर रहा है
क्लाइव

नहीं, वह गलती थी। मैंने drupal_render का दूसरा पैरामीटर निकाला और मेरे पास अभी भी यही मुद्दा है। मैं अपने प्रश्न को ऊपर संपादित कर रहा हूं, जिसमें एक दूसरी त्रुटि शामिल है जिसे मैं देख रहा हूं।
user1015214

templates/templates/2 त्रुटि संदेश में हिस्सा मुझे लगता है कि आप की कोशिश करनी चाहिए बनाता है 'template' => 'twitter_pull_tweet_listing',के बजाय 'template' => 'templates/twitter_pull_tweet_listing',मेंhook_theme()
क्लाइव

जवाबों:


24

सामान्य तौर पर Drupal 8 में आपको टेम्पलेट लाइन को छोड़ना चाहिए और टेम्पलेट को अपने हुक के समान नाम देना चाहिए, अंडरस्कोर को डैश में परिवर्तित करना चाहिए। यह बदल दिया गया था क्योंकि D8 में थीम्ड आउटपुट के लिए टेम्प्लेट डिफ़ॉल्ट आउटपुट फॉर्मेट हैं। तो आपके मामले में यह hook_theme():

/**
 *  Implements hook_theme().
 */
function twitter_pull_theme($existing, $type, $theme, $path) {
  return [
    'twitter_pull_tweet_listing' => [
      'variables' => [
        'description' => [],
      ],
    ],
  ];
}

… पर एक टेम्पलेट को इंगित करेगा templates/twitter-pull-tweet-listing.html.twig। (यह लघु सरणी सिंटैक्स का उपयोग कर रहा है ।)

प्रासंगिक परिवर्तन रिकॉर्ड: https://www.drupal.org/node/2231673

और यह भी, एक ब्लॉक या नियंत्रक से, कृपया एक स्ट्रिंग के बजाय एक रेंडर सरणी लौटाएं। इस तरह से परिणामों को बाद में हेरफेर किया जा सकता है और कच्चे डेटा अभी भी लाइन के नीचे पहुंच योग्य है। दूसरे शब्दों में, drupal_render()जब भी संभव हो अपने कोड से कॉल करने से बचें । यह Drupal 7 पर भी लागू होता है: https://www.drupal.org/node/930760#creating

तो अपने ब्लॉक से:

return [
  '#theme' => 'twitter_pull_tweet_listing',
  '#description' => 'foo',
  '#attributes' => [],
];

1
यह जानना अच्छा है यह जानबूझकर :)
क्लाइव

जवाब के लिए धन्यवाद! लेकिन क्या आप थोड़ा और समझा सकते हैं कि मैं सरणी को आउटपुट के रूप में वापस क्यों ला सकता हूं? कुछ समय में ड्रुपल रेंडर को इसे चलाने के लिए बुलाया जाना चाहिए, इसलिए अगर मैं इसे नहीं बुलाता हूं, तो यह कौन करता है?
user1015214

आप Drupal 7 में वैसे भी कर सकते हैं। मैं उत्तर में जोड़ने के लिए कुछ डॉक्स खोजने की कोशिश करूंगा।
कोट्सर

1
थोड़ा विलंब हुआ लेकिन मैंने उत्तर में drupal.org/node/930760#creating का लिंक जोड़ा ।
कोट्टसर

1
वास्तव में मुझे क्या चाहिए, यह भी स्पष्ट अन्वेषण है! धन्यवाद।
जोहान हेस्ट
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.