最近再用PbootCMS做一些二次開發,開發涉及到【菜單】【權限】等等,做一個簡單的記錄,方便后期快速理清開發思路。
一、改為Mysql
對於PbootCMS用來二次開發,就不要用sqlite來開發了。
修改文件:config/database.php
二、開放系統菜單
默認的系統是沒有【系統菜單】功能的,需要改數據庫。
修改數據庫:ay_menu 數據表,系統菜單的狀態改為:1
重新登錄系統:
三、圖標的使用
PbootCMS使用的是 fontawesome 字體圖標庫,該圖標庫收錄了675個圖標。
http://www.fontawesome.com.cn/faicons/
四、新建目錄
例如我們新建一個【續費提醒】模塊:
再次增加一個【續費客戶】菜單:
重新登錄后,就可以看到側欄菜單。
五、新建控制器
默認情況,我們新建模塊,需要在 apps/admin/controller 目錄下新建控制器
例如:RenewalController.php
配置好命名空間后即可訪問。
但是我們看上面的配置都是分模塊的,例如:content,member,system,這個在哪里配置呢?
分模塊配置,需要單獨的配置路由:
位置:apps / common / route.php
六、get 函數
在使用PbootCMS進行二次開發的時候,經常會看到使用 get 函數,例如:
$id = get('id', 'int'); $mcode = get('mcode', 'var'); $keywords = get('keywords', 'vars');
通過該 get 函數,可以用於接收參數,並且制定類型,具體函數類型:core / function / helper.php
然后是這個 filter 方法:
function filter($varname, $condition) { // 變量名稱文本 if (array_key_exists($varname, $condition) && $condition[$varname]) { $vartext = $condition[$varname]; } else { $vartext = $varname; } // 數據源 if (array_key_exists('d_source', $condition)) { switch ($condition['d_source']) { case 'post': $data = @$_POST[$varname]; break; case 'get': $data = @$_GET[$varname]; break; case 'cookie': $data = @$_COOKIE[$varname]; break; case 'session': $data = session($varname); break; case 'both': $data = @$_POST[$varname] ?: @$_GET[$varname]; break; case 'string': $data = $varname; default: error($vartext . '數據獲取方式設置錯誤!'); } // 去空格 if (is_string($data)) $data = trim($data); } else { $data = $varname; // 沒有數據源指定時直接按照字符串過濾處理 } // 數據為空時,進行是否允許空檢測 if (! $data && array_key_exists('d_none', $condition) && $condition['d_none'] === false) { error($vartext . '不能為空!'); } // 判斷是否強制檢測,為true時,意味着如果數據不滿足要求直接報錯,否則返回null if (array_key_exists('d_require', $condition) && $condition['d_require'] == true) { $require = true; } else { $require = false; } // 數據類型檢測 if (array_key_exists('d_type', $condition)) { switch ($condition['d_type']) { case 'int': if (! preg_match('/^[0-9]+$/', $data)) { $err = '必須為整數!'; } break; case 'float': if (! is_float($data)) { $err = '必須為浮點數!'; } break; case 'num': if (! is_numeric($data)) { $err = '必須為數字!'; } break; case 'letter': if (! preg_match('/^[a-zA-Z]+$/', $data)) { $err = '只能包含字母!'; } break; case 'var': if (! preg_match('/^[\w\-\.]+$/', $data)) { $err = '只能包含字母、數字、划線、點!'; } break; case 'bool': if (! is_bool($data)) { $err = '必須為布爾類型!'; } break; case 'date': if (! strtotime($data)) { $err = '必須為日期類型!'; } break; case 'array': if (! is_array($data)) { $err = '必須為數組類型!'; } break; case 'object': if (! is_object($data)) { $err = '必須為對象類型!'; } break; case 'vars': if (! preg_match('/^[\x{4e00}-\x{9fa5}\w\-\.,\s]+$/u', $data)) { $err = '只能包含中文、字母、數字、橫線、點、逗號、空格!'; } break; default: if ($condition['d_type']) error($vartext . '數據類型設置錯誤!'); } } // 非必須或必須但無錯誤時執行 if ((! $require || ($require && ! isset($err)))) { // 正則匹配 if (array_key_exists('d_regular', $condition)) { if (! preg_match($condition['d_regular'], $data)) { $err = '不符合正則表達式規則!'; } } // 最大值匹配 if (array_key_exists('d_max', $condition)) { if (is_numeric($data)) { if ($data > $condition['d_max']) { $err = '不能大於' . $condition['d_max']; } } else { if (mb_strlen($data) > $condition['d_max']) { $err = '長度不能大於' . $condition['d_max']; } } } // 最小值匹配 if (array_key_exists('d_min', $condition)) { if (is_numeric($data)) { if ($data < $condition['d_min']) { $err = '不能小於' . $condition['d_min']; } } else { if (mb_strlen($data) < $condition['d_min']) { $err = '長度不能小於' . $condition['d_min']; } } } } // 如果為必須且有錯誤,則顯示錯誤,如果非必須,但有錯誤,則設置數據為null if ($require && isset($err)) { error($vartext . $err); } elseif (isset($err)) { $data = null; } // 如果設置有默認值,默認值 if (array_key_exists('d_default', $condition)) { $data = (! is_null($data)) ? $data : $condition['d_default']; } if (is_string($data)) { $data = trim($data); // 去空格 $data = preg_replace_r('/(x3c)|(x3e)/', '', $data); // 去十六進制括號 $data = preg_replace_r('/pboot:if/i', 'pboot@if', $data); // 過濾插入cms條件語句 $data = preg_replace_r('/pboot:sql/i', 'pboot@sql', $data); // 過濾插入cms條件語句 $data = preg_replace_r('/GET\[/i', 'GET@[', $data); $data = preg_replace_r('/POST\[/i', 'POST@[', $data); } // 銷毀錯誤 unset($err); // 返回收據 return escape_string($data); }
到此,基本上就可以用PbootCMS做二次開發了。