Drupal 8'de şablon oluşturma


12

Drupal 8'de bir şablon oluşturmaya çalışıyorum. Drupal 7'de hook_theme ile bir tema oluşturacağım, modülümde şablonlar dizini oluşturacağım, şablon dosyasını bırakacağım ve theme () ile görüntüleyebilirdim. Drupal 8 ile ekipmanı nasıl yaparım? Aşağıdakileri denedim, ancak hata veriyor:

Twitter_pull.module içinde

/ **
 * Hook_theme () uygular.
 * /
işlev twitter_pull_theme ($ mevcut, $ türü, $ tema, $ yol) {
  dönüş dizisi (
    'twitter_pull_tweet_listing' => dizi (
      'değişkenler' => dizi (
        'description' => dizi (),
      ),
      'template' => 'templates / twitter_pull_tweet_listing',
    ),
  );
}

İçinde twitter_pull / şablonlar: twitter_pull_tweet_listing.html.twig

Bloğumun içinde:

$ tweet_template = dizi ('# theme' => 'twitter_pull_tweet_listing', '#attributes' => dizi ('params' => $ params));
$ output = drupal_render ($ tweet_template, array ('params' => $ params));
print $ output;

Günlüklerimde şu hatayı alıyorum:

Kullanıcı hatası: "içerik", Drupal \ Core \ Render \ Element :: children () (C: \ xampp \ htdocs \ drupal \ core \ lib \ Drupal \ Core \ Render \ Element satırında geçersiz bir oluşturma dizisi anahtarıdır. pHP).

EDIT: Başka bir hata:

Twig_Error_Loader: "modüller / custom / twitter_pull / templates / templates / twitter_pull_tweet_listing.html.twig" şablonu bulunamadı (C: \ xampp \ htdocs \ drupal). Twig_Loader_Filesystem-> findTemplate () 'de (C: \ xampp \ htdocs \ drupal \ core \ vendor \ twig \ twig \ lib \ Twig \ Loader \ Filesystem.php satır 202).

Bu hata olduğunu düşünüyorum, çünkü ad alanlarını kullanmıyorum ve otomatik olarak doğru yüklemiyorum. Şablon dosyamı nereye koyacağım? Hata mesajına dayanarak, C: \ xampp \ htdocs \ drupal \ templates \ 'de bile koymaya çalıştım ama hala işe yaramadı.


Twitter_pull_tweet_listing.html.twig'de neler var?
Clive

sadece bir yer tutucu: 'bu bir dal şablonu' metni
user1015214

Bir parametre dizisini ikinci argüman olarak iletmeniz için herhangi bir neden var mı drupal_render()? Bir boolean bekliyor
Clive

Hayır, bu bir hataydı. Ben drupal_render ikinci parametresini çıkardı ve hala aynı sorunu var. Yukarıdaki sorumu görüyorum, ikinci bir hata eklemek için.
user1015214

templates/templates/2 hata mesajında parçası bana denemelisiniz düşündürüyor 'template' => 'twitter_pull_tweet_listing',yerine 'template' => 'templates/twitter_pull_tweet_listing',içindehook_theme()
Clive

Yanıtlar:


24

Genel olarak Drupal 8'de, şablon çizgisini dışarıda bırakmanız ve şablonu, kancalarınızla aynı şekilde adlandırmanız ve alt çizgileri tirelara dönüştürmeniz gerekir. Bu, şablonlar D8'deki temalı çıktı için varsayılan çıktı biçimi olduğu için değiştirildi. Yani sizin durumunuzda hook_theme():

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

… Adresindeki bir şablona işaret eder templates/twitter-pull-tweet-listing.html.twig. (Bu, kısa dizi sözdizimi kullanıyor .)

İlgili değişiklik kaydı: https://www.drupal.org/node/2231673

Ayrıca, bir blok veya denetleyiciden lütfen dize yerine bir oluşturma dizisi döndürün. Bu şekilde sonuçlar daha sonra manipüle edilebilir ve ham verilere hala ulaşılabilir. Başka bir deyişle, drupal_render()mümkün olduğunda kodunuzdan arama yapmaktan kaçının . Bu Drupal 7 için de geçerlidir: https://www.drupal.org/node/930760#creating

Yani bloğunuzdan:

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

1
Kasıtlı olduğunu bilmek güzel :)
Clive

Cevap için teşekkürler! Ama diziyi neden çıktı olarak geri verebileceğimi biraz daha açıklayabilir misiniz? Bir zamanlar drupal render'ın çalıştırılması için çağrılması gerekir, bu yüzden onu aramazsam, kim yapar?
user1015214

Bu arada Drupal 7'de de yapabilirsiniz. Cevaba eklemek için bazı dokümanlar bulmaya çalışacağım.
Cottser

1
Biraz gecikti ama cevapta drupal.org/node/930760#creating bağlantısını ekledim .
Cottser

1
Tam olarak ihtiyacım olan şey, ayrıca açık bir açıklama! Teşekkür ederim.
Johan Haest
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.