در فایلهای tpl دروپال 7 و یا فایلهای twig دروپال 8 خیلی وقتها پیش میاد که میخواهید به یک متغییری دسترسی داشته باشید تا آن را چک کنید یا نمایش دهید ولی هرچقدر متغییرها و آرایه های موجود را با dpm یا krumo یا kint زیر رو میکنید آن را پیدا نمی‎کنید.

در هر دو نسخه دروپال 7 و 8 کافیه به سادگی در PreProccess مربوط به آن متغییر را فراخوانی کنید تا در فایل قالب بتوانید از آن استفاده کنید.

مثلا اگر در فایل مربوط به یک page بودید preproccess مربوط به آن و اگر در فایل مربوط به block بودید در preproccess مربوط به آن و همینطور اگر در فایلهای مربوط به node یا region یا html یا views بودید.

مثلا میخواهیم در فایل node.html.twig یا در فایل node--nodeType.html.twig یک متغییر اضافه شود که زمان ایجاد محتوا را به صورت (مدت گذشته مثلا: 2 روز و 3 ساعت قبل) نمایش دهد.

تابع preproccess مربوط به node را در فایل توابع قالب (دروپال 7: template.php)  (دروپال 8: mytheme.theme) ایجاد میکنیم و در آن NodeType مورد نظر را چک میکنیم و اگر دلخواه ما بود متغییر مورد نظر را ایجاد و به آرایه Variables اضافه میکنیم. در نتیجه هر چه در آرایه Variables وجود داشته باشد در فایل twig یا tpl در دسترس خواهد بود.

 

<?php
# Define node PreProccess function
function myTheme_preprocess_node(&$variables) {
	# Check if NodeType is MyNodeType
	if($variables['node']->getType() == "myNodeType"):
		# Get created time
		$created_time = $variables['node']->created->value;
		# make ago time by date formatter and add to $variables['created_ago']
		$date_formatter = \Drupal::service('date.formatter');
		$variables['created_ago'] = $date_formatter->formatDiff($created_time, REQUEST_TIME, [
			'granularity' => 2,
			'return_as_object' => TRUE,
		]);
	endif;
}
?>

 

همچنین از تابع myTheme_preprocess میتوانیم برای تعریف متغییرها در تمام فایلهای theme استفاده کنید:

 

<?php
function myTheme_preprocess(&$vars) {
	# add GLOBALS array to all theme files
	$vars['globals'] = $GLOBALS;
	
	# add current page langugae id
	$vars['current_language'] = \Drupal::languageManager()->getCurrentLanguage()->getId() == 'zh-hans' ? 'ch' : \Drupal::languageManager()->getCurrentLanguage()->getId();

	# add the theme full path
	$vars['theme_full_path'] = $GLOBALS['base_url'].'/'.drupal_get_path('theme', 'sfae');
}
?>

 

در مثال فوق سه متغییر جدید به تمام فایلهای theme اضافه شده است. متغییر اول آرایه Globals را اضافه میکند. متغییر دوم شناسه زبان فعال کاربر در هر صفحه را به تمام فایلها theme اضافه میکند. و متغییر سوم آدرس کامل دایرکتوری theme را در فایلهای twig قابل دسترس میکند.

 

موفق باشید

 

ارسال پیام