در قالب k2 ای که داریم (و یا قالب دیفالت خود k2) فایل های زیر رو توضیح میدم:
category_item.php
وقتی نوع منو ی categories رو انتخاب میکنیم، هر یک آیتم ای که نمایش داده میشه از این فایل خونده میشه.
latest_item.php
وقتی نوع منو ی Latest items from (one or more) users or categories رو انتخاب میکنیم، هر یک آیتم ای که نمایش داده میشه از این فایل خونده میشه.
item.php
این هم که مشخصه، نمایش تکی یک آیتم هست.
<?php
require_once (JPATH_ADMINISTRATOR.DS.'components'.DS.'com_k2'.DS.'lib'.DS.'JSON.php'); //By Hossein
$json = new Services_JSON;
$extraFields = $json->decode($this->item->extra_fields);
$tempExf = array();
foreach ($extraFields as $exf)
{
$tempExf = null;
$tempExf[$exf->id] = $exf->value;
}
$this->item->extra_fields = $tempExf;
?>
<?php echo @$this->item->extra_fields[$extrafieldID]; ?>
در k2 اکسترافیلد ها به شکل unicode ذحیره میشوند و به همین علت اگر ما در دیتابیس به آنها نگاه کنیم کد های کاراکتر های فارسی را میبینیم و نه خود آن ها را.
برای تبدیل این کد ها به کاراکتر های قابل فهم برای انسان، ما از کلاس Json که خود k2 دارد استفاده کرده ایم.
در خط آخر نیز، $extrafieldID شماره ی شناسه ی اکسترافیلدی است که میخواهیم نمایش بدهیم.
البته این موضوع در مورد نمایش تک آیتم کاملا متفاوت است، چرا که خود k2 زحمت این تبدیل را هنگام بارگزاری یک مطلب برای ما میکشد.
لذا در فایل item.php فقط لازم است به این طریق extrafield مورد نظر خود را پیدا کنید:
<?php if($this->item->params->get('itemExtraFields') && count($this->item->extra_fields)): ?>
<!-- Item extra fields -->
<div class="myextrafield">
foreach ($this->item->extra_fields as $key=>$extraField){
if($extraField->name == 'myextrafield' AND $extraField->value){
echo $extraField->value;
}
}
?>
<div class="clr"></div>
</div>
<?php endif; ?>
در اینجا myextrafield نامی است که ما برای extrafield خود معین کرده ایم.
بقیه ی کد واضح به نظر میرسه. اگر مشکلی بود توی کامنت ها در خدمت هستم.
موفق و پیروز باشید
یا علی