一、 Discuz 之 block 簡介
discuz 的 block 指的是 diy 功能中可自定義表單樣式,表單標題,並實現自己來設置數據調用。可以從門户->模塊管理->數據調用中進去,並添加新數據。

通過內部調用或者外部調用可以將數據調用到任何一個位置。

配置文件存放在 sourceclassblock 目錄下。
二、文件解析
用户想自定義表單字段來進行填寫內容的話需要重新創建文件
*/
//模塊名稱 模塊分類
function name() {
return "自己的數據";
}
/**
* 必須!
* 返回一個數組: 第一個值為本數據類所在的模塊分類;第二個值為模塊分類顯示的名稱 (顯示在 DIY 模塊面板)
* @return
*/
function blockclass(){
return array('othermk', "[開發] 模塊");
}
/**
* 必須!
* 返回數據類中可供 「模塊樣式」 使用的字段。
* 格式見示例:
* name 為該字段的顯示名稱
* formtype 決定編輯單條數據時該字段的顯示方式: 類型有: text, textarea, date, title, summary, pic; 詳見 portalcp_block.htm 模板 (搜 $field[formtype])
* datatype 決定該字段的數據展示,類型有: string, int, date, title, summary, pic; 詳見 function_block.php 中 block_template 函數
* @return
*/
//這個模塊要返回的字段
function fields() {
return array(
'title' => array('name' => '名稱', 'formtype' => 'title', 'datatype' => 'title'),
'url' => array('name' => '地址', 'formtype' => 'text', 'datatype' => 'string'),
'img' => array('name' => '圖片', 'formtype' => 'pic', 'datatype' => 'pic'),
);
}
/**
* 必須!
* 返回使用本數據類調用數據時的設置項
* 格式見示例:
* title 為顯示的名稱
* type 為表單類型, 有: text, password, number, textarea, radio, select, mselect, mradio, mcheckbox, calendar; 詳見 function_block.php 中 block_makeform() 函數
* @return
*/
//設置需要帥選的參數 然後參數會自動傳給 getdata($style, $parameter)
function getsetting() {
global $_G;
$settings = array();
$settings = array(
'titlelength' => array(
'title' => '標題',
'type' => 'text',
'default' => ""
)
);
return $settings;
}
/**
* 必須!
* 處理設置參數,返回數據
* 返回數據有兩種:
* 一種是返回 html,放到模塊 summary 字段,直接顯示; 返回格式為: array('html'=>'返回內容', 'data'=>null)
* 一種是返回 data,通過模塊樣式渲染後展示,返回的數據應該包含 fields() 函數中指定的所有字段; 返回格式為: array('html'=>'', 'data'=>array(array('title'=>'value1'), array('title'=>'value2')))
* 特別的:
* parameter 參數包含 getsetting() 提交後的內容;並附加了字段:
* items ,為用户指定顯示的模塊數據條數;
* bannedids ,為用户選擇屏蔽某數據時記錄在模塊中的該數據 id 。 應該在獲取數據時屏蔽該數據;
*
* 如果返回的數據給 data, 那麼應該包含 fields() 函數指定的所有字段。並附加以下字段:
* id 標誌該數據的 id,如果用户屏蔽某數據時,會將該數據的 id 添加到 parameter[bannedids] 裏
* idtype 標誌該數據的 idtype
*
* @param $style 模塊樣式 (見 common_block_style 表) 。 可以根據模塊樣式中用到的字段來選擇性的獲取/不獲取某些數據
* @param $parameter 用户對 getsetting() 給出的表單提交後的內容。
* @return
*/
//返回數據的函數,自己發揮吧,一定要保證你返回的字段 在上個 fields 函數裏面要有
function getdata($style, $parameter) {
// 返回summary
return array('html' => '這是一個演示模塊數據類
', 'data' => null);
// 返回數據
// 需要注意: 除 id,idtype, title, url, pic, picflag, summary 幾個字段外,其它字段需要放到 fields 數組裏。 可以參考系統內置模塊類 source/class/block/block_thread.php
return array('html'=>'', 'data' => array(
array(
'id' => '1',
'idtype' => 'sampleid',
'title' => 'title1',
'url' => '#',
'pic' => 'nophoto.gif',
'picflag' => '1',
'summary' => '',
'fields' => array(
'field1' => 'value1'
)
)
));
}
}
?>
1 、 name 函數
/**
* 必須!
* 返回本數據調用類的顯示名稱 (顯示在創建模塊時選擇 「模塊數據」 的下拉列表裏)
* @return
*/
//模塊名稱 模塊分類
function name() {
return "自己的數據";
}

2 、 blockclass 函數
/**
* 必須!
* 返回一個數組: 第一個值為本數據類所在的模塊分類;第二個值為模塊分類顯示的名稱 (顯示在 DIY 模塊面板)
* @return
*/
function blockclass(){
return array('othermk', "[開發] 模塊");
}

相當於給該 diy 命名
3 、 fields 函數
/**
* 必須!
* 返回數據類中可供 「模塊樣式」 使用的字段。
* 格式見示例:
* name 為該字段的顯示名稱
* formtype 決定編輯單條數據時該字段的顯示方式: 類型有: text, textarea, date, title, summary, pic; 詳見 portalcp_block.htm 模板 (搜 $field[formtype])
* datatype 決定該字段的數據展示,類型有: string, int, date, title, summary, pic; 詳見 function_block.php 中 block_template 函數
* @return
*/
//這個模塊要返回的字段
function fields() {
return array(
'title' => array('name' => '名稱', 'formtype' => 'title', 'datatype' => 'title'),
'url' => array('name' => '地址', 'formtype' => 'text', 'datatype' => 'string'),
'img' => array('name' => '圖片', 'formtype' => 'pic', 'datatype' => 'pic'),
);
}
這個函數就是表單的參數函數,可以通過這個來設置表單分類名稱。比如活動中:活動標題、地點、時間、參與方式啥的,都可以進行自定義,大概效果如圖所示。

4 、 getsetting 函數
/**
* 必須!
* 返回使用本數據類調用數據時的設置項
* 格式見示例:
* title 為顯示的名稱
* type 為表單類型, 有: text, password, number, textarea, radio, select, mselect, mradio, mcheckbox, calendar; 詳見 function_block.php 中 block_makeform() 函數
* @return
*/
//設置需要帥選的參數 然後參數會自動傳給 getdata($style, $parameter)
function getsetting() {
global $_G;
$settings = array();
$settings = array(
'titlelength' => array(
'title' => '標題',
'type' => 'text',
'default' => ""
)
);
return $settings;
}

三、數據調用
1 、簡單調用
這個暫時不做説明,用 [loop] 調用即可。
2 、用函數調用
block_get 函數
function block_get_batch($parameter) {
global $_G;
$bids = $parameter && is_array($parameter) ? $parameter : ($parameter ? explode(',', $parameter) : array());
.
.
.
if($styleids) {
block_getstyle($styleids);
}
}
可以用這個函數進行調用表中數據。
因為在 function_core.php 中簡化了函數 block_get_batch 可以用 block_get 代替。
function block_get($parameter) {
include_once libfile('function/block');
block_get_batch($parameter);
}
使用方法
//$parameter 可以是多個值,如:$parameter = '31,32,33';
$parameter = '31';
$bid= 31;
$items = block_get($parameter);
var_dump($_G['block'][$bid]['itemlist']);

block_display 函數
function block_display($bid) {
include_once libfile('function/block');
block_display_batch($bid);
}
首先要在頁面使用 block_get 函數,然後使用 block_display 函數,函數的意思很明顯,獲取和展示。並且展示的時候是帶有 diy 模板樣式的。