Sadece benzer bir sorun yaşadım , bu yüzden google beni bu sayfaya getirdi: düğüm ön işleme fonksiyonum o kadar büyük büyüyordu ki, fonksiyonu çok sayıda dosyaya bölmeyi tercih ettim.
Template.php dosyamda, tüm değiştirici işlevleri içeren benzer bir yaklaşım zaten yaptım ve aynı yöntem burada çok iyi çalıştığından, yaklaşımımı paylaşacağımı düşündüm:
klasörün içindeki dosya kurulumuMYTHEME/preprocess
:
- node.preprocess.inc
- node--blog-post.preprocess.inc
- node--device-variation.preprocess.inc
- (...)
Zaten sahip node.preprocess.inc
olmalısın, kendin yaratabilirsin Onları gerçekten nasıl çağırdığınızı oldukça keyfi, ama daha iyi onları tanımlayan ve tüm drupal adlandırma sistemine uygun isimler verin.
bu dosyaların içeriğine doğru!
node.preprocess.inc
, işte böyle bir şey yapıyorum:
<?php
function MYTHEME_preprocess_node(&$variables) {
switch($variables['type']) {
case 'blog_post':
// if the type of the node is a Blog Post, include this:
include 'node--blog-post.preprocess.inc';
break;
case 'device_variation':
// if Device Variation, include this:
include 'node--device-variation.preprocess.inc';
break;
case 'foo':
// ...
break;
}
// additional stuff for all nodes
}
temelde mevcut düğümün tipini değiştiriyoruz. Geçtiğiniz şey size kalmış; #id
, #view_mode
tüm ihtiyaçlarınızı bağlı olarak.
Bir kez eşleşme olduğunda, belirtilen dosyayı yükler ve tam da bu fonksiyonun içinde yazılmış gibi içeriğine göre hareket eder.
bu included
dosyaların içeriği tam olarak node.preprocess.inc
dosyaya koyduğunuz gibi görünür , ancak ön işleme işlevini bir daha çağırmazız:
node--device-variation.preprocess.inc
<?php
// Device Name
$device = drupal_clean_css_identifier(strtolower($variables['title']));
// Determine whether only Device Version is of type 'N/A' and set ppvHasVariations accordingly
$deviceHasVariations = true;
if( $variables['content']['product:field_model_variation'][0]['#options']['entity']->weight == 0 ) {
$deviceHasVariations = false;
}
//...
temelde bunu istediğiniz kadar dosya ile yapabilirsiniz ve hatta birden fazla anahtarı kademeli olarak düzenleyebilirsiniz; örneğin #view_mode
, full
görüntüleme modu için bir dosyaya ve bir diğeriteaser
Bu yardımcı olur umarım, bir daha kimse bu soruya rastlarsa (:
foo_preprocess_node
uygulayarak "otomatikleştirebilirim"call_user_func('_preprocess_' . $vars['type'], $vars);
ama muhtemelen basit kalmak en iyisidir.