Şu anda Drupal 7 sitemde render önce hemen programatik mantığa bağlı olarak onun 'görünüm modunu' değiştirecek bir düğüm başvurulan görüntü alanı uygulamaya çalışıyorum. Alan şu anda, her biri 'Oluşturulmuş düğüm' alan biçimlendiricisini kullanan görüntüleme modu ayarları aracılığıyla bir dizi içerik türünde oluşturulmaktadır.
ilk girişim
İlk fikrim, bir kancanın bir kanca bir kanca olduğu düşünüldüğünde aşağıdakileri uygulamaktı:
function HOOK_field_formatter_view( $entity_type, $entity, $field ... ){
switch ($display['type']) {
case 'node_reference_node':
/* Programatical logic here to modfy field render settings */
break;
}
}
Açıkçası HOOK'u modülümün adıyla değiştiriyorum.
Yukarıdakilerin orijinal işlevden önce veya sonra tetiklenip tetiklenmeyeceği önemli değildi node_reference_field_formatter_view
, node_reference.module
çünkü ya çıktısını tamamen geçersiz kılacaktım ya da umarım render etmeden önce değerlerini değiştireceğim. Tek sorun, yukarıdaki kanca sadece modül başına çalışıyor gibi görünüyor - yani site çapında değil, bu yüzden temelde benim modül için ateş değil.
Şimdi açıkçası ben oluşturulan bir düğüm çıktı için kendi alan biçimlendirici yazabilirsiniz. Ama zaten var olan bir şey göz önüne alındığında biraz atık gibi görünüyor.
diğer yaklaşımlar
Diğer yaklaşımlarım oldu HOOK_preprocess_node
ve HOOK_preprocess_field
ancak ilki herhangi bir view_mode
bilgi içermiyor ve ikincisi, hepsinin view_mode
farklı seviyelerde bir mülke referansı olan en az 5 farklı karmaşık yapı içeriyor - ve her birini değiştirmek zorunda kalıyor değerler. Belirli view_mode
özellikleri değiştirdiğimde bile sonuçta oluşan görüntü değişmez.
soru
Alan biçimlendiricisinin oluşturulmasından önce (bir katkıda bulunan modülün) ve ayarlarını sayfa başına istek temelinde değiştirmenin temiz bir yolunu bilen var mı? Örneğin, gerçek içerik türünün kalıcı görünüm modu ayarlarını değiştirmek zorunda kalmadan mı?
view_mode
üzerinde hook_preprocess_node
, aptal beni! hook_field_formatter_view_alter()
hook_field_formatter_view_alter()
Muhtemelen bir yılı aşkın bir süredir benzer bir şey arıyorum , maalesef mevcut değil. Bilginizehook_preprocess_node()
kesinlikle yok olmasıview_mode
ona mevcuttur, İçinde$vars['view_mode']
, değil$vars['node']->view_mode
denemek için cazip olmuştur olabilir.