陳玉
摘? 要:本文主要研究Joomla系統中模塊的工作原理;文章首先分析模塊的結構,然后依次分析模塊中XML文件的工作機理,接著分析模塊中的入口文件,再接著分析模塊中的helper類文件;最后對模塊的一些特點作了總結。
關鍵詞:Joomla;內容管理系統;Joomla模塊結構;Joomla工作原理
中圖分類號:TP311.5?????????? 文獻標識碼:A
1?? 引言(Introduction)
隨著網絡應用的快速發展,內容管理系統應用而生。相比傳統建站模式,內容管理系統具有許多基于模板的優秀設計,可以加快網站的開發速度及減少開發成本。內容管理系統的基本思想是分離內容的管理和設計,頁面存儲在模板里,而內容存儲在獨立的文件中或數據庫中[1]。
2? 國內外發展概況(Developments at home and
abroad)
國外的內容管理系統有WordPress、Joomla及Drupal等,這些系統應用了非常多的建站新技術,同時每個系統都留有第三方開發接口,可供二次開發,具有較大的靈活性。國內比較有名的內容管理系統,如Discuz、DedeCMS和PHPWind等,這幾種系統的優點是訪問速度快,缺點是系統集成度高,不能完全實現模塊化,不便于二次開發,擴展能力不夠強大。
3? Joomla系統中模塊具體研究分析(The concrete
study of modules)
本文主要對Joomla系統的模塊進行分析研究;在Joomla系統中,模塊的典型特點是簡潔、輕量級的,模塊主要是為用戶提供消息和導航選項。針對具體研究實例,文中以Joomla系統中的最新用戶模塊(Latest user module)進行分析研究,最新用戶模塊主要功能是顯示網站新注冊的用戶;同時通過調節模塊參數可以控制顯示的用戶數,也可以顯示用戶相關介紹及聯系信息。
模塊的具體文件和文件夾結構見表1。
表1 模塊結構
Tab.1 The structure of modules
文件?描述
tmpl/default.php?布局文件
helper.php?功能文件
mod_users_latest.php?入口文件
mod_users_latest.xml?安裝文件及選項
根據表中模塊里的各類文件,下面進行具體分析。
3.1?? 模塊中的XML文件
模塊里的xml文件主要包括模塊安裝和卸載時所用到的文件及文件夾信息,同時也包括模塊中一些參數的定義。
<;filename
module="mod_users_latest">;mod_users_latest.php<;/filename>;
<;folder>;tmpl<;/folder>;
<;filename>;helper.php<;/filename>;
<;filename>;index.html<;/filename>;
<;language tag="en- GB">;en- GB.mod_users_latest.ini<;/language>;
<;language tag="en- GB">;en- GB.mod_users_latest.sys.ini<;/language>;
上述代碼主要定義模塊中所用到的相關文件,而文件夾tmpl下的文件只須定義該文件夾即可;代碼中還定義了兩個語言文件,這兩個語言文件將被安裝到Joomla系統的核心語言文件夾下,而不是安裝到擴展語言文件夾下;同時在xml文件中還定義了模塊中參數的屬性,即三個基本屬性和五個高級屬性,限于篇幅這里在代碼中做了省略[2]。
3.2?? 模塊主入口文件
模塊在運行時,需要裝載一個和該模塊文件夾同名的PHP文件,如最新用戶模塊就會裝載modules/mod_users_latest/mod_users_latest.php位置的PHP文件;主入口文件代碼片斷如下:
require_oncedirname(__FILE__).'/helper.php';
$shownumber=$params->;get('shownumber', 5);
$name=moduserslatestHelper::getUsers($params);
$linknames=$params->;get('linknames', 0);
$moduleclass_sfx=htmlspecialchars($params->;
get('moduleclass_sfx'));
requireJModuleHelper::getLayoutPath('mod_users_latest', $params->;get('layout', 'default'));
上述代碼中,require_oncedirname(__FILE__).'/helper.php'語句主要是模塊中需要用到helper類,helper類文件主要是為模塊提供各類方法,模塊的主要處理事宜都集中在helper類中。接下來語句調用getUsers()方法,并將結果存儲到變量$linknames中;在這個方法中利用了一個很重要的$params中間變量,該變量在文件中沒有聲明,到底來自哪里?經過分析后得知結果如此:首先在系統JModuleHelper類的renderModule()方法中,有require $path語句,$path變量中存放模塊入口文件的全名(即mod_users_latest.php);其次在PHP中require命令會將所包含文件“粘貼”般的插入當前文件,由于mod_users_latest.php是一般腳本,不包含類文件,所以require命令包含的文件內容也會被立即執行;最后發現,$params在renderModule()里的早些時候已被定義,所以也就找到了$params變量的出處[2]。endprint
再回到上述代碼片斷的$linknames變量,該變量是在執行模塊布局的時候用到。下面語句行是取得模塊類后綴選項,模塊類后綴允許開發者微調模塊中的CSS文件。最后一行語句是從模塊的參數中取得布局選項。在上述代碼開始,也可以用Joomla自帶的方法JLoader::register()代替require_once,從而取得更快的執行速度。
3.3?? 模塊中的helper類文件
helper類是模塊信息的來源,如下是類中getUsers()方法的代碼片斷:
static function getUsers($params)
{
$db=JFactory::getDbo();
$query=$db->;getQuery(true);
$result=$db->;loadObjectList();
return (array) $result;
}
上述代碼中將方法聲明為靜態,這樣可以通過類名調用。代碼首行定義JDatabase對象$db,在Joomla中可以通過JDatabase對象提取數據庫中的數據,接下來的語句是定義JDatabaseQuery查詢對象,loadObjectList()以數組形式將各行返回。此外,JDatabaseQuery基本上是SQL聲明形式的一個鏡像,不同于SQL聲明,JDatabaseQuery可以以我們想要的任何順序來書寫,而SQL聲明則必須以正確的順序來書寫。JDatabaseQuery可以很好的支持Microsoft SQL Server和MySQL數據庫;當使用JDatabaseQuery建立所有的數據查詢時,查詢都會在這些數據庫中完美運行;這些功能主要得益于在各種數據庫使用SQL命令時,系統的查詢類具有很好的差異適應能力。
3.4?? 模塊中的默認布局文件
默認布局文件代碼片斷如下:
<;?php if (!empty($names)) : ?>;<;ul class="latestusers<;?php echo $moduleclass_sfx ?>;" >;
<;?phpforeach($names as $name) : ?>;
<;li>;<;?php echo $name->;username; ?>;<;/li>;<;?phpendforeach; ?>;<;/ul>;<;?phpendif; ?>;
代碼片斷中if聲明使用了替換性PHP語法,這種用法一般使用在PHP和HTML混合的布局文件中;在這里if聲明主要來判斷$names是否為空,這樣可以避免在頁面上輸出空元素。
上述代碼中用到了$names變量,$names來自于mod_users_latest.php文件中的$names=moduserslatestHelper::getUsers($params)語句。接下來的部分用到了foreach循環,該循環是遍歷數組元素比較方便的方法,$name變量是數組中的當前元素;假如數組為空,程序將徹底跳轉循環。同時在代碼中使用echo命令在屬性中插入變量,在插入變量時需要注意空格的重要性,即在latestusers和echo命令返回的變量之間是不能有空格的,否則會出錯。
4?? 結論(Conclusion)
最后再對上述各部分做一下總結。首先,模塊和Joomla站點的其余部分是無縫接合的;其次,模塊完全支持多種語言,模塊將根據所建立的兩個相應語言文件自動進行顯示;第三,模塊支持替換式布局和模板布局覆蓋,通過使用getLayoutPath()方法來獲得布局文件;第四,模塊允許用戶輸入各類參數選項來控制模塊的運行[3];第五,模塊可以安全防護各類SQL注入和其他站點攻擊行為;最后,模塊可以做到很好的安裝和卸載,更方便站點的維護。
參考文獻(References)
[1] 邊霞,等.基于MVC的文件備份后臺管理系統的設計與實現
[J].計算機工程與設計,2011,32:3195-3198.
[2] 胡建強,馬櫻,朱順痣.基于本體的網絡化軟件需求內容管理
系統的研究與實現[J].計算機應用與軟件,2013,30(12):31-34.
[3] 盛安元,黃存東,張前進.基于開源軟件Drupal工程實踐[J].武
漢工業學院學報,2013,31(2):65-67.
作者簡介:
陳? 玉(1975-),男,碩士,中級實驗師.研究領域:計算機應
用,信息檢索.endprint
再回到上述代碼片斷的$linknames變量,該變量是在執行模塊布局的時候用到。下面語句行是取得模塊類后綴選項,模塊類后綴允許開發者微調模塊中的CSS文件。最后一行語句是從模塊的參數中取得布局選項。在上述代碼開始,也可以用Joomla自帶的方法JLoader::register()代替require_once,從而取得更快的執行速度。
3.3?? 模塊中的helper類文件
helper類是模塊信息的來源,如下是類中getUsers()方法的代碼片斷:
static function getUsers($params)
{
$db=JFactory::getDbo();
$query=$db->;getQuery(true);
$result=$db->;loadObjectList();
return (array) $result;
}
上述代碼中將方法聲明為靜態,這樣可以通過類名調用。代碼首行定義JDatabase對象$db,在Joomla中可以通過JDatabase對象提取數據庫中的數據,接下來的語句是定義JDatabaseQuery查詢對象,loadObjectList()以數組形式將各行返回。此外,JDatabaseQuery基本上是SQL聲明形式的一個鏡像,不同于SQL聲明,JDatabaseQuery可以以我們想要的任何順序來書寫,而SQL聲明則必須以正確的順序來書寫。JDatabaseQuery可以很好的支持Microsoft SQL Server和MySQL數據庫;當使用JDatabaseQuery建立所有的數據查詢時,查詢都會在這些數據庫中完美運行;這些功能主要得益于在各種數據庫使用SQL命令時,系統的查詢類具有很好的差異適應能力。
3.4?? 模塊中的默認布局文件
默認布局文件代碼片斷如下:
<;?php if (!empty($names)) : ?>;<;ul class="latestusers<;?php echo $moduleclass_sfx ?>;" >;
<;?phpforeach($names as $name) : ?>;
<;li>;<;?php echo $name->;username; ?>;<;/li>;<;?phpendforeach; ?>;<;/ul>;<;?phpendif; ?>;
代碼片斷中if聲明使用了替換性PHP語法,這種用法一般使用在PHP和HTML混合的布局文件中;在這里if聲明主要來判斷$names是否為空,這樣可以避免在頁面上輸出空元素。
上述代碼中用到了$names變量,$names來自于mod_users_latest.php文件中的$names=moduserslatestHelper::getUsers($params)語句。接下來的部分用到了foreach循環,該循環是遍歷數組元素比較方便的方法,$name變量是數組中的當前元素;假如數組為空,程序將徹底跳轉循環。同時在代碼中使用echo命令在屬性中插入變量,在插入變量時需要注意空格的重要性,即在latestusers和echo命令返回的變量之間是不能有空格的,否則會出錯。
4?? 結論(Conclusion)
最后再對上述各部分做一下總結。首先,模塊和Joomla站點的其余部分是無縫接合的;其次,模塊完全支持多種語言,模塊將根據所建立的兩個相應語言文件自動進行顯示;第三,模塊支持替換式布局和模板布局覆蓋,通過使用getLayoutPath()方法來獲得布局文件;第四,模塊允許用戶輸入各類參數選項來控制模塊的運行[3];第五,模塊可以安全防護各類SQL注入和其他站點攻擊行為;最后,模塊可以做到很好的安裝和卸載,更方便站點的維護。
參考文獻(References)
[1] 邊霞,等.基于MVC的文件備份后臺管理系統的設計與實現
[J].計算機工程與設計,2011,32:3195-3198.
[2] 胡建強,馬櫻,朱順痣.基于本體的網絡化軟件需求內容管理
系統的研究與實現[J].計算機應用與軟件,2013,30(12):31-34.
[3] 盛安元,黃存東,張前進.基于開源軟件Drupal工程實踐[J].武
漢工業學院學報,2013,31(2):65-67.
作者簡介:
陳? 玉(1975-),男,碩士,中級實驗師.研究領域:計算機應
用,信息檢索.endprint
再回到上述代碼片斷的$linknames變量,該變量是在執行模塊布局的時候用到。下面語句行是取得模塊類后綴選項,模塊類后綴允許開發者微調模塊中的CSS文件。最后一行語句是從模塊的參數中取得布局選項。在上述代碼開始,也可以用Joomla自帶的方法JLoader::register()代替require_once,從而取得更快的執行速度。
3.3?? 模塊中的helper類文件
helper類是模塊信息的來源,如下是類中getUsers()方法的代碼片斷:
static function getUsers($params)
{
$db=JFactory::getDbo();
$query=$db->;getQuery(true);
$result=$db->;loadObjectList();
return (array) $result;
}
上述代碼中將方法聲明為靜態,這樣可以通過類名調用。代碼首行定義JDatabase對象$db,在Joomla中可以通過JDatabase對象提取數據庫中的數據,接下來的語句是定義JDatabaseQuery查詢對象,loadObjectList()以數組形式將各行返回。此外,JDatabaseQuery基本上是SQL聲明形式的一個鏡像,不同于SQL聲明,JDatabaseQuery可以以我們想要的任何順序來書寫,而SQL聲明則必須以正確的順序來書寫。JDatabaseQuery可以很好的支持Microsoft SQL Server和MySQL數據庫;當使用JDatabaseQuery建立所有的數據查詢時,查詢都會在這些數據庫中完美運行;這些功能主要得益于在各種數據庫使用SQL命令時,系統的查詢類具有很好的差異適應能力。
3.4?? 模塊中的默認布局文件
默認布局文件代碼片斷如下:
<;?php if (!empty($names)) : ?>;<;ul class="latestusers<;?php echo $moduleclass_sfx ?>;" >;
<;?phpforeach($names as $name) : ?>;
<;li>;<;?php echo $name->;username; ?>;<;/li>;<;?phpendforeach; ?>;<;/ul>;<;?phpendif; ?>;
代碼片斷中if聲明使用了替換性PHP語法,這種用法一般使用在PHP和HTML混合的布局文件中;在這里if聲明主要來判斷$names是否為空,這樣可以避免在頁面上輸出空元素。
上述代碼中用到了$names變量,$names來自于mod_users_latest.php文件中的$names=moduserslatestHelper::getUsers($params)語句。接下來的部分用到了foreach循環,該循環是遍歷數組元素比較方便的方法,$name變量是數組中的當前元素;假如數組為空,程序將徹底跳轉循環。同時在代碼中使用echo命令在屬性中插入變量,在插入變量時需要注意空格的重要性,即在latestusers和echo命令返回的變量之間是不能有空格的,否則會出錯。
4?? 結論(Conclusion)
最后再對上述各部分做一下總結。首先,模塊和Joomla站點的其余部分是無縫接合的;其次,模塊完全支持多種語言,模塊將根據所建立的兩個相應語言文件自動進行顯示;第三,模塊支持替換式布局和模板布局覆蓋,通過使用getLayoutPath()方法來獲得布局文件;第四,模塊允許用戶輸入各類參數選項來控制模塊的運行[3];第五,模塊可以安全防護各類SQL注入和其他站點攻擊行為;最后,模塊可以做到很好的安裝和卸載,更方便站點的維護。
參考文獻(References)
[1] 邊霞,等.基于MVC的文件備份后臺管理系統的設計與實現
[J].計算機工程與設計,2011,32:3195-3198.
[2] 胡建強,馬櫻,朱順痣.基于本體的網絡化軟件需求內容管理
系統的研究與實現[J].計算機應用與軟件,2013,30(12):31-34.
[3] 盛安元,黃存東,張前進.基于開源軟件Drupal工程實踐[J].武
漢工業學院學報,2013,31(2):65-67.
作者簡介:
陳? 玉(1975-),男,碩士,中級實驗師.研究領域:計算機應
用,信息檢索.endprint