Kısmi bir şablon ekle


19

Drupal 8'i özel bir temayla kullanmaya çalışıyorum, gereksinimlerim için büyük yapı farklılıkları nedeniyle bir sayfam var - front.twig.html ve page.twig.html, kullanıldığı gibi şablon parçaları oluşturmak istiyorum phrozn oder normal bir Symfony2 projesinde, örneğin bir footer.html.twig ve bir header.html.twig. Bu şablonlar / parts / alt dizinine kaydedilir.

Ancak bu şablonları normal olarak adlandırdığımda, şablonun adını taşıyan bir dize alıyorum.

Örneğin:

{# in page.html.twig or page--front.html.twig #}
{% include 'parts/footer.html.twig' %} 

Dosya adını dize olarak döndürür:

parts/footer.html.twig

Bunu Drupal 8 ile yapmak mümkün mü?

Yanıtlar:


33

Göreli yollar yapamazsınız, tüm yollar Drupal kökünden olmalı veya 'şablonlar' dizininizin ad yoluna dayalı olmalıdır: https://www.drupal.org/node/2143557 .

"Drupal kökünden" kaçınır ve en azından https://www.drupal.org/node/2291449 çözülene kadar ad alanlarını kullanırdım .

{% include '@mytheme/parts/footer.html.twig' %}

Düzenleme: Döngü için bazı argümanlar geçirmek veya dahil edilen twigşablonunuza bazı değişkenleri kontrol etmek istiyorsanız şu şekilde yazmalısınız:

{% include '@mytheme/includes/form-block.html.twig' with {dog: true} %}

Düzenleme: Artık https://www.drupal.org/node/2291449 taahhüt edildiğine göre şunları da yapabilirsiniz:

{% include 'footer.html.twig' %}

Dosya adını neden yararlı bir istisna yerine dize olarak gördüğünüz için https://www.drupal.org/node/2369981 adresine bakın .


Peki ya includedeğerler geçiyor? Bağlantılı görüntü oluşturmamak image-formatteriçin urlnull değerini eklemek ve boş bırakmak istediğimi varsayalım .
SaidbakR

Bu cevapta verilen örnekler işe yaramıyor gibi görünüyor.
arnoldbird

3
Unutmayın o @mythemeyoluna giderir mythemedize + /templates. Başka bir deyişle, dizine @mythemegider mytheme/templates.
daniels

@Daniels'den yorumu daha da netleştirmek için. Özel tema adlı edilirse Mytheme ve bulunur 'temalar / özel / Mytheme' sonra Twig ad @mythemeiçin giderir 'temalar / özel / Mytheme / şablonlar' . Adresinde bulunan bir şablon @mytheme/fragments/footer.html.twigeklemek, 'temalar / özel / efsane / şablonlar / fragmanlar / footer.html.twig'
ec0g

15

Tema dizininin tam yolunu kullanın. Ad alanını kullanırsanız, kodu başka bir siteye veya temaya getirirseniz değiştirmeniz gerekir.

Bu çalışmalı:

{% include directory ~ '/templates/parts/footer.html.twig' %}

alt tema yaparken bu çok kullanışlıdır. Bunu Üst temanızda ayarlayın ve ardından alt temanın şablon dizininde bir sürümünün olmasını sağlayın.
Andrew Killen

Benim için işe yarayan tek cevap bu.
arnoldbird

5

Dosya mevcut olmadığında bir yedek oluşturmak için Twig'in bir dizi kullanımını kullanmak da mümkündür.

Örneğin. Footer.html.twig mevcut değilse, defaultfooter.html.twig kullanılır.

{{ include([
  '@yourthemename/parts/footer.html.twig',
  '@yourthemename/parts/defaultfooter.html.twig'
]) }}
Bunu dosya adlarında değişkenlerin kullanımı ile birleştirin ve bir çeşit bağlama bağlı olarak farklı dosyalar ekleyebilirsiniz.

Nb: Hala bunun en iyi uygulama olup olmadığını anlamaya çalışıyorum.


5

withAnahtar kelimeden sonra değişkenleri aktarabileceğinizi unutmayın :

{# template.html will have access to the variables from the current context and the additional ones provided #}
{% include 'template.html' with {'foo': 'bar'} %}

{% set vars = {'foo': 'bar'} %}
{% include 'template.html' with vars %}

Twig belgelerine bakın http://twig.sensiolabs.org/doc/tags/include.html



1

Drupal 8 için

{% include 'FILE_NAME.html.twig' %}Drupal yaptığınızda temaya bir dal dosyası eklenmesi, DOSYA öğesinin geçerli Tema Dizininizde bulunmasını bekler. Sadece oraya koy ve işe yarayacak.

Modülünüze bir dal dosyası ekleme

Bir MODÜL içine eklemek istiyorsanız, TEMA İşlevinde bildirmeniz gerekir. .Module dosyanıza aşağıdakileri ekleyin:

<?php function YOUR_MODULE_NAME_theme($existing, $type, $theme, $path) {   
   'FILE_NAME' => [
      'variables' => [
      ],
      'template' => 'FILE_NAME',
    ], ?>

Ardından Twig dosyanızı YOUR_MODULE / template / FILE_NAME.html.twig dosyasına koyun


Yol hakkında yanlış bilgi. Tema kancalı modülden dosya eklemek için başka bir yola ihtiyacınız vardır: {{include ('@ModuleName / twigFileName.html.twig', {var1: var1Val, var2: var2Val})}} Unutmayın, şablon dosyaları gerekir 'yourModuleName / templates /' içinde olun.
Verter
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.