PbootCMS---二開指南


最近再用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做二次開發了。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM