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.incolmalı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_modetü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 includeddosyaların içeriği tam olarak node.preprocess.incdosyaya 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, fullgö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_nodeuygulayarak "otomatikleştirebilirim"call_user_func('_preprocess_' . $vars['type'], $vars);ama muhtemelen basit kalmak en iyisidir.