আমার কেবলমাত্র একটি অনুরূপ সমস্যা ছিল যার কারণেই গুগল আমাকে এই পৃষ্ঠায় নিয়ে এসেছিল: আমার নোড প্রিপ্রোসেস ফাংশনটি এত বড় হয়ে উঠছিল যে আমি ফাংশনটি একাধিক ফাইলে বিভক্ত করব।
আমি ইতিমধ্যে আমার টেমপ্লেট.এফপি ফাইলে অনুরূপ পন্থা করেছি যার মধ্যে সমস্ত পরিবর্তনকারী ফাংশন রয়েছে এবং একই পদ্ধতিটি যেহেতু এখানে পুরোপুরি ভালভাবে কাজ করে, তাই আমি ভেবেছিলাম যে আমি আমার পদ্ধতিটি ভাগ করব:
ফোল্ডারের ভিতরে ফাইল সেটআপMYTHEME/preprocess
:
- node.preprocess.inc
- node--blog-post.preprocess.inc
- node--device-variation.preprocess.inc
- (...)
আপনার নিজের ইতিমধ্যে থাকা উচিত node.preprocess.inc
, অন্যরা নিজেরাই তৈরি করতে পারেন। আপনি কীভাবে তাদের ডাকছেন তা বরং স্বেচ্ছাচারিতামূলক, তবে তাদের এমন নাম দিন যা সুন্দরভাবে তাদের সনাক্ত করে এবং পুরো ড্রুপাল নামকরণ সিস্টেমের সাথে ফিট করে।
এই ফাইলগুলির বিষয়বস্তু পর্যন্ত!
node.preprocess.inc
, এখানে আমি এই জাতীয় কিছু করছি:
<?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
}
আমরা মূলত বর্তমান নোডের ধরণের মাধ্যমে স্যুইচ করি। আপনি যা পরিবর্তন করেন তা আপনার উপর নির্ভর করে; #id
, #view_mode
সমস্ত আপনার সঠিক প্রয়োজনের উপর নির্ভর করে।
কোনও ম্যাচ হয়ে গেলে, এটি নির্দিষ্ট ফাইলটি লোড করে এবং তার বিষয়বস্তুর উপর ঠিক এমনভাবে কাজ করবে যেন ঠিক এই ফাংশনের ভিতরেই এটি লেখা হয়েছিল।
এই included
ফাইলগুলির বিষয়বস্তু হুবহু দেখে মনে হচ্ছে আপনি এটিকে node.preprocess.inc
ফাইলটিতে রেখেছিলেন , যদি না আমরা প্রিপ্রসেসিফিকেশন ফাংশনটিকে আবার কল না করি:
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;
}
//...
আপনি মূলত এটি হিসাবে যতগুলি ফাইল চান তা করতে পারেন এবং একাধিক সুইচও ক্যাসকেড করতে পারেন, উদাহরণস্বরূপ, নির্দিষ্ট নোড প্রিপ্রোসেস ফাইলগুলি আরও উপর নির্ভর করে ভাগ করা মোডের #view_mode
জন্য একটি ফাইল রয়েছে full
এবং অন্যটির জন্যteaser
আশা করি এটি সাহায্য করে, যদি কেউ আবার কখনও এই প্রশ্নে হোঁচট খায় (:
foo_preprocess_node
এটিকে প্রয়োগ করে "স্বয়ংক্রিয় "ও করতে পারতামcall_user_func('_preprocess_' . $vars['type'], $vars);
তবে সহজ থাকাই সবচেয়ে ভাল।