Önişleme kancasındaki düğümün içerik türünü kontrol etme


12

Belirli içerik şablonları için twig şablonlarında kullanılabilir hale getirmek istediğim bir dizi değişkenim var.

In MYTHEME.themeI sahiptir:

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();
  }
}

Bu beni kullanmasına izin verir {{ headertext }}ve {{ mycustomblock }}benzeri içerik türü şablonları node--contenttype1.html.twigve node--contenttype2.html.twig. Ancak, yalnızca bir içerik türü için her birine ihtiyacım olduğunda her bir düğüm türü için 'headertext've 'mycustomblock'değişkenlerini oluşturmayı tercih etmem. Bir bloğa sahip bir değişken oluşturmadan önce hangi içerik türünün kontrol edildiğini kontrol eden bir switch veya if ifadesine sahip olmak güzel olurdu.

Düğümün içerik türünü kontrol edebilmemin bir yolu var mı?

denedim

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

Ama bu işe yaramadı.

Yanıtlar:


15

Bir düğümün içerik türünü almak için $variables['node']->getType()veya düğmesini kullanın $variables['node']->bundle(). İlk yöntem sadece ikincisini çağırır, bu yüzden birini veya diğerini çağırmak çok fazla fark etmez.

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

Tek fark, bundle()her varlık için tanımlanmış olmasıdır, çünkü paket kavramı tüm varlıklar için ortaktır, içerik türü ise Drupal çekirdek modüllerinin uyguladığı varlıklardan birinde değiştirilmeden önce düğümler için kullanılan Drupal özelliğidir; kullanmak bundle(), kodu diğer varlık türleri için uyarlamayı kolaylaştırır, ancak kullandığınız kod için durumun böyle olduğunu düşünmüyorum.


5

Kullanmak zorundasın $variables['node']->getType(). Ayrıca, yalnızca bazı görünüm modlarında ihtiyacınız varsa, bunu da kontrol etmeyi düşünün.$variables['view_mode']


2

Kanca işlev adınıza düğümü (ve görünüm türünü) ekleyebilirsiniz:

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

Örneğin, moddaki pagedüğüm türü için full:

function MYTHEME/MYMODULE_preprocess_node__page__full(&$variables) {
  // ...
}
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.