Bölgeye göre bloklar için bir tema kanca önerisi nasıl yapılır?


14

Drupal 8 olduğundan, şablon adlandırma kurallarında , yerleştirildiği bölgeye göre belirli bir blok şablonu yüklemek mümkün değildir ( "Bölge başına blok işaretleme ve bölge başına blok şablonlama özelliği kaldırıldı" ). Ancak belirli bir bölgeye yerleştirilirse bloklar için farklı html'ye ihtiyacım var. Bunu nasıl başarabilirim?

MYMODULE_theme_suggestions_block_alter'ı kullanmayı düşündüm ama mevcut bölgeyi nasıl alacağımı bilmiyorum.

Yanıtlar:


20

Blok Varlığı alırsanız bölge alabilirsiniz.

.module veya .theme dosyası

use Drupal\block\Entity\Block;

function MODULE_theme_suggestions_block_alter(array &$suggestions, array $variables) {
  if (!empty($variables['elements']['#id'])) {
    $block = Block::load($variables['elements']['#id']);
    $suggestions[] = 'block__' . $block->getRegion() . '__' . $variables['elements']['#id'];
  }
  /* Use this 'else if' only if you are using page_manager module and want to know which region is the block */
  else if (isset($variables['elements']['#configuration']['region'])) {
    $suggestions[] = 'block__page_' . $variables['elements']['#configuration']['region'] . '__' . end(explode(':', $variables['elements']['#plugin_id']));
  }
  return $suggestions;
}

Edit 1: Cover page_manager module case.


Neredeyse mükemmel. #İd öğesinin gerçekten orada olduğundan emin olmak için bir isset () eklemeniz gerekir. Örneğin, page_manager kullanıyorsanız ve blokları oraya yerleştirirseniz, #id kodunuz olmaz.
Berdir

@Berdir teşekkürler;). Ben bu durumda olduğunu düşünüyorum isset()bir yoksa, çünkü gerekli değildir #ido zaman geçmesi, NULLhiç ::loadfonksiyonu ve sadece dönüş NULL. Sonunda $block, NULLve hiçbir şey olmayacak. Benim dev env Drupal 8.0.4 - page_manager-1.0-alpha23 (daha önce hiç bu modülü kullanmamış) test edilmiştir.
Vagner

Evet, isset () gerekli. var olmayan bir dizi anahtarına erişmek bir PHP bildirimi ile sonuçlanır. Günlüklerinizi kontrol edin ve göreceksiniz. Ben her zaman verilen örnek settings.php varsayılan varsayılan ayrıntılı hata görüntüleme ile geliştirmek için tavsiye ederim.
Berdir
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.