DZ 的 DIY 功能,相信瞭解點 DZ 的朋友都知道,所以不做解釋了。
那麼 DIY 的模組模板的語法標籤是什麼呢?
如圖所示,這些就是用在 DIY 模組模板裡的語法標籤。
DZ 門戶目前沒有自定義欄位的功能,需要我們自己自定義欄位。自定義欄位的方法, 就不再贅述了。
那麼我們自定義出來的欄位,怎麼才能在 DIY 裡呼叫呢?
有人說可以用分類資訊裡功能,然並不能。分類資訊的自定義欄位功能裡雖然有關於 DIY 的呼叫標籤,但是這個功能,只是針對論壇版塊的。而且,必須在 DIY 的時候使用靜態模組裡的分類資訊的,資料來源也只能是論壇裡的。所以這不是我們想要的。
那麼到底需要怎麼做才能實現自定義的語法標籤呢?
既然 DZ 的原始碼都在手了,那就直接看相關原始碼咯:
我們需要明確的是模組的相關原始碼都在這個位置:/source/class/block
那麼對應的門戶這塊,就是/source/class/block/portal 了
關於門戶文章的,我們修改其下這個檔案 block_article.php 即可
我們找到 fields 這個方法進行相關修改即可。比如我們現在要加入一個 author 原作者的一個語法標籤。如圖,新增這行程式碼即可。
具體程式碼如下:
function fields() {
return array(
'id' => array('name' => lang('blockclass', 'blockclass_field_id'), 'formtype' => 'text', 'datatype' => 'int'),
'uid' => array('name' => lang('blockclass', 'blockclass_article_field_uid'), 'formtype' => 'text', 'datatype' => 'int'),
'username' => array('name' => lang('blockclass', 'blockclass_article_field_username'), 'formtype' => 'text', 'datatype' => 'string'),
'author' => array('name' => lang('blockclass', 'blockclass_article_field_author'), 'formtype' => 'text', 'datatype' => 'string'),
'avatar' => array('name' => lang('blockclass', 'blockclass_article_field_avatar'), 'formtype' => 'text', 'datatype' => 'string'),
'avatar_middle' => array('name' => lang('blockclass', 'blockclass_article_field_avatar_middle'), 'formtype' => 'text', 'datatype' => 'string'),
'avatar_big' => array('name' => lang('blockclass', 'blockclass_article_field_avatar_big'), 'formtype' => 'text', 'datatype' => 'string'),
'url' => array('name' => lang('blockclass', 'blockclass_article_field_url'), 'formtype' => 'text', 'datatype' => 'string'),
'title' => array('name' => lang('blockclass', 'blockclass_article_field_title'), 'formtype' => 'title', 'datatype' => 'title'),
'pic' => array('name' => lang('blockclass', 'blockclass_article_field_pic'), 'formtype' => 'pic', 'datatype' => 'pic'),
'summary' => array('name' => lang('blockclass', 'blockclass_article_field_summary'), 'formtype' => 'summary', 'datatype' => 'summary'),
'dateline' => array('name' => lang('blockclass', 'blockclass_article_field_dateline'), 'formtype' => 'date', 'datatype' => 'date'),
'caturl' => array('name' => lang('blockclass', 'blockclass_article_field_caturl'), 'formtype' => 'text', 'datatype' => 'string'),
'catname' => array('name' => lang('blockclass', 'blockclass_article_field_catname'), 'formtype' => 'text', 'datatype' => 'string'),
'articles' => array('name' => lang('blockclass', 'blockclass_article_field_articles'), 'formtype' => 'text', 'datatype' => 'int'),
'viewnum' => array('name' => lang('blockclass', 'blockclass_article_field_viewnum'), 'formtype' => 'text', 'datatype' => 'int'),
'commentnum' => array('name' => lang('blockclass', 'blockclass_article_field_commentnum'), 'formtype' => 'text', 'datatype' => 'int'),
);
}
同時需要修改 function getdata 這個方法 (201~335 行) 。給 author 語法標籤賦予相應的值。也很簡單,加入一個賦值語句即可
$list[] = array(
'id' => $data['aid'],
'idtype' => 'aid',
'title' => cutstr($data['title'], $titlelength, ''),
'url' => fetch_article_url($data),
'pic' => $data['pic'],
'picflag' => $data['picflag'],
'summary' => cutstr(strip_tags($data['summary']), $summarylength, ''),
'fields' => array(
'uid'=>$data['uid'],
'username'=>$data['username'],
'author'=>$data['author'],
'avatar' => avatar($data['uid'], 'small', true, false, false, $_G['setting']['ucenterurl']),
'avatar_middle' => avatar($data['uid'], 'middle', true, false, false, $_G['setting']['ucenterurl']),
'avatar_big' => avatar($data['uid'], 'big', true, false, false, $_G['setting']['ucenterurl']),
'fulltitle' => $data['title'],
'dateline'=>$data['dateline'],
'caturl'=> $_G['cache']['portalcategory'][$data['catid']]['caturl'],
'catname' => $_G['cache']['portalcategory'][$data['catid']]['catname'],
'articles' => $_G['cache']['portalcategory'][$data['catid']]['articles'],
'viewnum' => intval($data['viewnum']),
'commentnum' => intval($data['commentnum'])
)
);
這樣就給 author 該語法標籤賦上值了,此時在 DIY 模板裡就可以呼叫了。
當然細心會發現此時還有個語言的問題,也就是加欄位的那塊程式碼裡的 lang 的問題。
'author' => array('name' => lang('blockclass', 'blockclass_article_field_author'), 'formtype' => 'text', 'datatype' => 'string'),
我們可以看到在 lang 語言包裡,我們還沒有 blockclass_article_field_author,所以在頁面上,我們還看不到其對應的文字內容。
所以我們還需要找到相關的 lang 語言包,增加此 blockclass_article_field_author 對應的文字內容。這個也很簡單。
DZ 的語言包都在/source/language 資料夾下,對應的模組模板的語言包檔案在其下的 lang_blockclass.php 檔案中。
我們只需要在該檔案的 $lang = array(lang 陣列中加入該值即可。
比如這樣:'blockclass_article_field_author' => '原作者名',
至此,我們在門戶文章 DIY 模組模板裡新增的自定義的語法標籤,就搞定了。當然這裡沒有做自定義欄位,只是做了個門戶文章模組模板的 DIY 語法標籤裡沒有的 author 原作者的欄位。自定義的欄位等,方法與此相同啦。大家可以以一舉三。
By the way,希望官方早點給門戶搞一個自定義欄位的功能,這個還是蠻需要的。