上一次分享到一個后台組件開發,也許我講的不是很明白,不過你們把源代碼拿去以后應該可以看懂,我是完全按照MVC模式開發的。今天呢,就來分享一下前台組件開發,我這里的前台組件和后台組件都是單獨開發,前台組件是沒有后台管理的,僅僅是開發顯示效果,因為默認的排版方式就是那么兩種,如果客戶需要個性化的,就必須自己開發,下來我們就開發了。說一下目的,我要開發的是顯示文章的列表樣式,和自帶的博客樣式,默認樣式不同的,找到前台組件目錄components在里面新建一個文件夾就叫做com_more吧,在里面新建文件more.xml這個是打包安裝文件,models文件夾是模塊文件夾,views是視圖文件夾,controller.php是控制器,more.php是入口文件。開發過程中我們可以用index.php?option=com_more來查看效果,由於這個例子簡單,沒有更多控制器和視圖,所以還是比較容易理解。最后我會分享給你們插件開發的教程兩本。
現在一步一步來,more.xml是安裝文件,不是必須的,如果要打包分享別人通過zip上傳方式安裝才需要,一般工作中沒有必要去寫那個文件,特別是當文件特多的時候,我們直接上傳開發文件和手動配置數據庫同樣可以。先來看more.php入口文件吧,
defined('_JEXEC') or die; jimport('joomla.application.component.helper'); require_once( JPATH_COMPONENT.DS.'controller.php' ); $controller = new MoreController(); $controller->execute(JRequest::getVar('task',null,'default','cmd')); $controller->redirect();
里面的1-3行是每個組件必須,任何組件都這么寫,分別是防止意外加載,載入助手函數,再入控制器文件,4行是創建一個控制器對象,5行是執行任務,最后跳轉,MoreController()是采用組建名+controller來命名的,joomla隨處可見這種命名方式。
接着來看controller.php控制器代碼
defined('_JEXEC') or die( 'Restricted access' ); jimport('joomla.application.component.controller'); class MoreController extends JController { function display() { parent::display(); } }
很簡單吧,就是繼承了父類joomla的控制器而已,沒啥好說的。復雜一點的事models里面,他是一個模型,就是處理數據的,他把處理的數據給了views文件夾里面的more下面的view.html.php,在這個文件里面,我們首先是獲得模型,然后把處理數據的方法返回的數據復制給模版。$this->assignRef('category', $category);就是賦值給category,這里其實可以不需要模型,我們直接在這個文件里面寫查詢數據,然后把值賦給變量,不過就不是MVC模式了。
最后就是在views\more\tmpl里面default.php的顯示文件了,這里就是控制顯示效果了,把處理的數據結果都在這里顯示,通過循環,可以取出數據值。這里也是可以寫查詢語句的,有時候為了開發方便就直接在這里寫了,不過后期維護組件的人就不容易看懂了,怎么做自己看着辦吧。在joomla里面查詢數據用的最多,所以
$db=&JFactory::getDBO(); $query="SELECT * FROM #__content"; $db->setQuery($query); $list=$db->loadObjectList();
這幾句用的最多,幾乎開發插件、組件、模塊都有可能用到的。最后用循環取出$list值。
好了一個組件基本就完成了,最后附上組件完整代碼,以及兩本開發教程都是中文版的,一本是API講解,一本是插件組建模塊開發。
(原創 by Yoby)