Xoops模組的區塊欄位資料表newblocks裡面除了有儲存設定的options欄位,還有content的text類型欄位,但除了Xoops自訂區塊能夠寫入content以外,模組區塊就只能以陣列方式儲存options欄位,即使能存進去content也讀不出來,原因是modules/system/class/block.php裡面的$edit_form = $edit_func($options);只允許$options傳入,要能讀出content就要修改block.php這才行,方法如下:
略...............
}
根目錄/modules/system/admin/modulesadmin/modulesadmin.php
1、找到以下檔案用編輯器打開
根目錄/modules/system/class/block.php
找到第221行
$edit_form = $edit_func($options);
修改為,加上紅字的$this
$edit_form = $edit_func($options,$this);
2、修改模組區塊函式block_edit,增加$thisvar傳入
//區塊編輯函式
function 模組ID_block_edit($options,$thisvar){略...............
}
3、讀寫content方法如下:
->要寫入資料庫,欄位name請用name='content_block'
->要讀出content請用$thisvar->getVar('content', 'e')
後記
$this->getVar('content', 'e') 為輸出htmlspecialchars()結果,顯示原始碼
$this->getVar('content', 'n') 為輸出資料表原始格式
以上既完成區塊編輯函數(block_edit)也能讀寫content欄位功能開發,實際來測試看看
先在模組區塊中輸入【測試測試測試測試測1352466】
然後儲存,再確認newblocks資料表的content欄位也是有被寫入!!
然後於Xoops的區塊管理->編輯區塊,查看文字框能否讀出寫入的資料,如果能讀出,表示這一整套流程都沒問題,可安心使用。
後記,還需要補一段修改,防止更新模組時Xoops機制寫入content空值,吧原本content欄位內容清空,找到以下程式用筆記本打開
967行找到以下程式
$sql = 'UPDATE ' . $xoopsDB->prefix('newblocks') . " SET name='" . addslashes($block['name']) . "', edit_func='" . addslashes($editfunc) . "', content='', template='" . $template . "', last_modified=" . time() . ' WHERE bid=' . $fblock['bid'];
替換為以下的 //Hack->移除 content=''防止更新模組空值寫入content欄位覆蓋資料
$sql = 'UPDATE ' . $xoopsDB->prefix('newblocks') . " SET name='" . addslashes($block['name']) . "', edit_func='" . addslashes($editfunc) . "', template='" . $template . "', last_modified=" . time() . ' WHERE bid=' . $fblock['bid'];
這樣即使更新模組,原本儲存在content欄位的資料也不會被清空
以上工作心得撰寫,有需要的朋友參考看看
工作心得分享:徐嘉裕 Neil hsu
留言
張貼留言