1. 程式人生 > >外掛引數——Joomla外掛開發

外掛引數——Joomla外掛開發

使用引數

Joomla在很多地方可以設定很多引數。每個擴充套件,都可以新增自己的引數或選項。 引數可以設定基本引數,比如,如果一個外掛自動糾錯,應該新增一些引數,讓管理員設定糾錯如何執行。要不要自動把首字母大寫?要不要刪除段首的空格?通過新增引數可以做到這些。

在XML中定義引數

在XML配置檔案中,引數通過<config>標籤來新增。為外掛新增引數和為元件、模組一樣。 下面的例子顯示一個欄位集,命名為basic,一個輸入欄位,命名為test。這個欄位允許管理員儲存一個值,一遍以後再PHP程式碼中使用。

    <config>
        <fields>
            <fieldset name="basic">
                <field 
                    name="test" 
                    type="text" 
                    defalut=''Hello World''
                    label="PLG_CONTENT_CH04TEST01_FIELD_LABEL_LABEL" 
                    description="PLG_CONTENT_CH04TEST01_FIELD_LABEL_DESC"
                />

當使用Plugin Manager時,它會讀取這個XML檔案,自動轉換為HTML,顯示在編輯區域。 上面的例子是一個欄位集和一個輸入框。Joomla允許很多的欄位集和表格欄位。甚至可以自定義欄位。比如,可以建立一個自定義的下拉框。 <fieldset name="basic">字符集沒有標籤。Joomla自動為basic和advanced新增標籤。也可以通過lable引數自定義標籤。如果沒有lable值,將會自動填充為COM_PLUGINS_CUSTOMX_FIELDSET_LABEL。這個語言字串在com_plugin中定義了。

引數存在哪?如何儲存的? 當使用Plugin Manager

儲存引數時,引數值儲存在資料表#__extensions中的params中,以Json的格式儲存。當從資料庫中讀取後,JSON資料解碼為JRegistry物件,並繫結到外掛物件上。這些是自動完成的。

更多欄位型別

最通用的四種:text, textarea, list, radio。還有些複雜的,比如calendar,combo, color,email, password。 例子,

                <field
                    name="align"
                    type="list"
                    default="left"
                    label="PLG_CONTENT_CH04TEST01_FIELD_ALIGN_LABEL"
                    description="PLG_CONTENT_CH04TEST01_FIELD_ALIGN_DESC"
                >
                    <option value="left">PLG_CONTENT_CH04TEST01_FIELD_ALIGN_OPTION_LEFT</option> 
                    <option value="right">PLG_CONTENT_CH04TEST01_FIELD_ALIGN_OPTION_RIGHT</option> 
                    <option value="center">PLG_CONTENT_CH04TEST01_FIELD_ALIGN_OPTION_CENTER</option> 
                </field> 

下拉列表框通過<option>標籤,來顯示選項。

在php檔案中使用引數

在外掛的php檔案中,使用$this->params這個物件,這是一個JRegistry,包含一個get()方法,引數名作為第一個引數,第二個引數是如果讀取為空的時候的預設值。

public function onContentBeforeDisplay(
$context, &$row, &$params, $page = 0
)
{
$test = $this->params->get(′test′, ′Hello World′);
$row->title = $row->title . ′ [′ . $test . ′]′;
$row->text = $row->text . ′<p>[′ . $test . ′]</p>′;
}

$params$this->params的區別: onContentBeforeDisplay()有四個引數,第三個是$params,也是一個JRegistry物件。區別是, $this->params包含本外掛引數,$params 包含的是內容型別引數。比如,檔案外掛的引數就是Article Manager中的引數。 安全問題: 如果是呼叫個數值,可以做下強制轉換

$integer = (int) $this->params->get(′integer′);

如果用的下拉列表,可以看看是不是在選項中

$value = $this->params->get(′color′);
if (in_array($value, array(′yellow′, ′red′, ′blue′)) == FALSE)
{
$value = ′yellow′;
}