joomla15代码分析.docx
- 文档编号:23749481
- 上传时间:2023-05-20
- 格式:DOCX
- 页数:67
- 大小:49.85KB
joomla15代码分析.docx
《joomla15代码分析.docx》由会员分享,可在线阅读,更多相关《joomla15代码分析.docx(67页珍藏版)》请在冰豆网上搜索。
joomla15代码分析
joomla源代码探析
(一)准备工作
2007-12-1518:
12管理员847次点击
Tags:
源代码一个代码过程生成
用Joomla建站一段时间了,由于采用了1.5RC3版,建站过程中发现了不少的问题,为了解决这些问题,看了不少的源代码,打算写一下源代码的学习过程。
首先是准备工作,源代码的学习过程其实也是一个不断测试代码的过程,所以:
1、搭建一个测试网站,我建议在本机上架一个WAMP环境,嘿嘿,为什么选择WAMP,主要个人习惯了,做了6年的linux下的程序员,还是不习惯emacs,呵呵,windows下的编辑器好用。
2、搭建测试网站建议直接采用SVN下来的代码,在windows上装一个tortoiseSVN,就可以了,joomlaSVNreposity的地址是http:
//joomlacode.org/svn/joomla/development/trunk
3、编辑器,我觉得挺重要的,我推荐使用UEStudio,用上你就知道了,能自动根据源码中的内容,生成类和函数的标签,你就不需要寻找document的生成器了。
4、搭建完成后,用UE建一个project,导入源代码,时间有点点长,它在分析代买生成TAG,生成后,你就点击“标签”,就可以看到全部的类和函数,习惯了VC的编辑环境的人,肯定喜欢这个。
5、搜寻代码学习的资源,目前我也没找到,我只在http:
//dev.joomla.org上查看了framework的文章,中文资源似乎就更少了,我是说1.5版的,1.0版的有几个中文网站谈到部分的代码问题,但是我没仔细看过质量到底如何。
到现在位置,已经建立了研究环境,下一步就是“开始”
joomla源代码探析
(二)目录结构
2007-12-1520:
51管理员849次点击
Tags:
结构目录首先熟悉完毕
测试网站搭建完毕,首先来熟悉一下,1.5RC3版的目录结构:
1、componets所有安装的组件的,前端用户界面相关程序都在这里,每个组件一个子目录,通常是com_***
2、plugins所有的插件,涉及的程序文件和模板文件,资源等等
3、modules所以安装的模块相关的程序和资源
4、includes涉及重要的类,定义等等
5、languages,下面是所有的语言文件,新的规范是一种语言一个目录,比如英文就是en-GB,中文简体就是zh-CN,目录下是相应的语言定义文件,命名规则是语种.组件名字(插件名字).ini,比如zh-CN.com_showcase.inizh-CN.plg-***.ini等等。
6、templates没说的,一种模板一个目录
7、library最重要的目录之一了,下面都是重要的类文件,子目录结构对应类名称,比如
jimport('joomla.environment.uri');
那么对应的是joomla/environment/uri.hp文件
其他的cache,logs目录就不说了,以后用的到。
joomla源代码探析(三)万源之源
2007-12-1620:
15管理员816次点击
Tags:
探析源代码joomla
万源之源,这个名字非常有意思,老是让我想起小时候,玩的那种圆圆的纸牌,在土地中玩的,用自己的纸牌把别人的打翻了就赢了别人的,大部分都是纸壳剪的,偶尔也有用油毡纸,或者石棉纸做的,通常把这种好的牌或者那种连赢了几次的纸牌作为自己的镇家宝贝,在牌背面上写上“保家之宝”,也有“宝家之宝”,我曾经留了几张一直到高三毕业。
哈哈哈!
现在不知道去那里了,也许父母还留着吧。
documentroot/index.php,以及template/***/index.php,可以称为万源之源,因为可以说所有的页面都是这两个文件的成果。
/index.php是所有页面程序的起点,让我们来看看这个文件到底做了什么?
define('_JEXEC',1); //标志这是一个跟文件
define('JPATH_BASE',dirname(__FILE__));//取得Documentroot,就是/index.php所在的绝对路径
define('DS',DIRECTORY_SEPARATOR);//定义目录分隔符
require_once(JPATH_BASE.DS.'includes'.DS.'defines.php');//defines.php定义了一些目录变量,以后详细的写
require_once(JPATH_BASE.DS.'includes'.DS.'framework.php');
//framework.php是另一个非常重要的文件,在framework.php读入了config.php中定义的变量,同时
//framework中引入了一些的基础类,例如JFactory,JUser等等
//全局对象,工厂类JFactory,JFactory符合设计模式中的工厂模式,基本生成的对象大部分是单例模式,接下来我详细描述JFactory,JFactory在/libraries/joomla/factory.php中定义,
$mainframe=&JFactory:
:
getApplication('site');
//取得JApplication对象,JApplication是一个工厂类,提供了一些指定对象的生成,并提供了一系列的api函数
//application初始化过程,设置语言,并缺的editor的设置,并生成Juser对象
$mainframe->initialise();
//引入system组的插件
JPluginHelper:
:
importPlugin('system');
//触发初始化完毕后定义的pluging响应事件
$mainframe->triggerEvent('onAfterInitialise');
//route()函数,根据url生成进行解析,设置JRequest
$mainframe->route();
//authorization
$Itemid=JRequest:
:
getInt('Itemid');
$mainframe->authorize($Itemid);
//触发route后plugin
JDEBUG?
$_PROFILER->mark('afterRoute'):
null;
$mainframe->triggerEvent('onAfterRoute');
//根据JRequest的的option参数,dispatch到那个组件,也就决定页面的内容部分是那个组件生成
$option=JRequest:
:
getCmd('option');
$mainframe->dispatch($option);
//触发dispatch后的plugin
JDEBUG?
$_PROFILER->mark('afterDispatch'):
null;
$mainframe->triggerEvent('onAfterDispatch');
//页面的渲染过程,生成整个页面html
$mainframe->render();
//triggertheonAfterDisplayevents
JDEBUG?
$_PROFILER->mark('afterRender'):
null;
$mainframe->triggerEvent('onAfterRender');
echoJResponse:
:
toString($mainframe->getCfg('gzip'));
以上是/index.php的内容,从这个index.php的引出了几个重要的文件需要我们去注意
/includes/defines.php
/includes/framework.php
/libraries/joomla/application.php
/libraries/joomla/factory.php
接下来我们主要看看这些文件。
joomla源代码探析(四)defines.php
2007-12-1620:
42管理员599次点击
Tags:
路径主要文件一个时候
其实这个文件没什么好说的,主要就是定义一些路径,贴出来,主要是以后文件中提这些路径的时候,有一个印象
$parts=explode(DS,JPATH_BASE);
//Defines
define('JPATH_ROOT', implode(DS,$parts));
define('JPATH_SITE', JPATH_ROOT);
define('JPATH_CONFIGURATION',JPATH_ROOT);
define('JPATH_ADMINISTRATOR',JPATH_ROOT.DS.'administrator');
define('JPATH_XMLRPC', JPATH_ROOT.DS.'xmlrpc');
define('JPATH_LIBRARIES', JPATH_ROOT.DS.'libraries');
define('JPATH_PLUGINS',JPATH_ROOT.DS.'plugins' );
define('JPATH_INSTALLATION',JPATH_ROOT.DS.'installation');
define('JPATH_THEMES' ,JPATH_BASE.DS.'templates');
define('JPATH_CACHE', JPATH_BASE.DS.'cache');
这些路径在以后的文件中经常用到。
joomla源代码探析(五)framework.php
2007-12-2217:
12xieyingwu649次点击
Tags:
文件这个引入下面基本
/include/framework.php这个文件在index.php中是最早引入的文件之一,这个文件主要实现了一些基本类的引入,下面我们逐一看一下:
require_once(JPATH_LIBRARIES.DS.'loader.php');//loader.php是一个载入类的基本工作,最重要的是Jimport
比如jimport('joomla.environment.response' );实际上就include_once/libaries/jooma/environment/response.php
require_once(JPATH_CONFIGURATION.DS.'configuration.php');//引入了configuration.php
jimport('joomla.base.object');
jimport('joomla.environment.request');
JRequest:
:
clean();//清空Jrequest
//Systemconfiguration
$CONFIG=newJConfig();//读取配置文件,生成Jconfig对象
if(JDEBUG){
jimport('joomla.utilities.profiler');
$_PROFILER=&JProfiler:
:
getInstance('Application');
}
以上这段主要是如果配置处于debug状态,那么就生成$_PROFILER,这个对象主要要用来,记录页面执行到某一节点的执行时间,内存状态调试信息。
jimport('joomla.environment.response' );
jimport('joomla.application.menu'); //needstobeloadedlater
jimport('joomla.user.user');
jimport('joomla.environment.uri');
jimport('joomla.factory');
jimport('joomla.methods');
jimport('joomla.html.html'); //needstobeloadedlater
jimport('joomla.utilities.array'); //needstobeloadedlater
jimport('joomla.utilities.error');
jimport('joomla.utilities.utility');
jimport('joomla.utilities.string');//needstobeloadedlater
jimport('joomla.filter.output');
jimport('joomla.version'); //needstobeloadedlater
jimport('joomla.event.*');
这些引入的类中,比较重要的是factoryusermenu,需要仔细研究一下,其他的用的时候,再仔细看文档就行啦,
当然,methods也包含了很多基本的函数和类,尤其是需要了解SEF的时候。
接下来,我们将仔细看看/index.php中$mainframe=&JFactory:
:
getApplication('site')这句话到底完成了什么工作。
Joomla源代码解析(六)JDocument类的几个常用的方法
在google搜索我的网站就会发现一些,因为没有注意meta和title所有的开源项目相关的页面title和meta都一样,对用户很不友好,根本无法分清那个链接是说什么内容的,那么这里就需要JDocuement类来解决问题
用法很简单,首先取得document对象$document=&JFactory:
:
getDocument();
然后:
$document->setTitle(*****);
$document->setDescription(*****);//添加meta
$document->addStyleSheet(*****)//添加CSS文件
$document->addScript(*****)//添加js脚本
$document->setLanguage(***)//设置语言文件
其他还有一些setModifiedDate等,其他基本就不常用了,记住这些就行啦!
Joomla源代码解析(七)JFactory类
2007-12-3016:
18joomla544次点击
Tags:
返回实例调用这个数据
JFactory类,正如其名,这是一个工厂类,应该是简单工厂模式的标准实现。
这个类几个重要的函数分别返回几个重要的实例。
1、getACL调用_createACL返回joomla.user.authorization的实例,数据来源
2、getApplication调用joomla.application.application的实例获取函数JApplication:
:
getInstance,也就是我们在index.php中提到的$mainframework
3、getConfig调用_createConfig返回joomla.registry.registry实例,返回配置参数
4、getDBO调用_createDBO,返回数据连接JDatabase的实例,这个是以后扩展模块要经常用到的
5、getDocument调用_createDocument根据请求的格式,返回JDocumentRaw或者JDocumentHtml实例
6、返回Juser实例
7、getLanguage调用_createLanguage返回joomla.i18n.language的实例,以后在多语言环境经常用到。
其他的比如getMailer,getCache等就不在写了
Joomla源代码解析(八)JDatabase类
2007-12-3016:
33joomla549次点击
Tags:
函数返回一个数据库数据
这是数据库connector类,封装了与数据库操作的一系列操作。
目前有两个子类,JDatabaseMysql,JDatabaseMysqli,这个类为以后扩展到其他数据库留出了接口。
关于一些具体函数没有什么特殊的,基本对应mysql的函数的一些特征,对于这个类应用基本都是首先setquery,然后load
或者直接执行executequery,主要还是不要混淆load开头的几个函数的具体功能:
1、loadObject以对象的形式返回结果集的第一行数据
2、loadObjectList对应上一个函数,返回一个对象的集合
3、loadResult返回第一行的第一个字段或者NULL
4、loadResultArray返回某一字段的数据到一个数组中
5、loadRow返回第一行数据,应该是数组形式
6、loadRowList对应上一个函数,返回行数据的集合
还有一个函数很重要就是setUTF,这个函数决定了数据库能显示中文。
Joomla源代码解析(九)JUser类
2007-12-3019:
17joomla518次点击
Tags:
用户信息相关函数程序
user类处理所有程序中与用户交互的相关事情。
这个类的构造函数调用load函数,输入的参数是用户id,可以初始化用户的相关信息,这些信息包括aid,gid,usertype,username,name,id等等,这些信息在扩展中经常用到。
同时,在程序中,用刚刚说过的getUser,取得当前登录用户实例。
具体用法如下:
$user=&JFactory:
:
getUser();
$userId=(int)$user->get('id');
根据gid可以判断用户的相关的组以及组权限。
了解了Juser类,还需要了解一下JUserHelper类,这个类包括了与用户活动相关的几个函数,比如获得随机密码以及取得加密密码等。
同样getUserId根据用户名取得用户ID也是经常用到的。
Joomla源代码解析(十)JPathJFileJFolder类
2007-12-3019:
54joomla584次点击
Tags:
生成模块代码函数非常
这几个类都是filesystem包中的重要类,具体的使用看我在模块快速生成器中的代码,函数意义都非常明确:
if(JFolder:
:
exists($targetpath))JFolder:
:
delete($targetpath);
JFolder:
:
create($targetpath);
JFolder:
:
create($targetpath.DS.'tmpl');
以上是目录使用的例子
$sfile=$sourcepath.DS.'index.html';
$tfile=$targetpath.DS.'index.html';
JFile:
:
copy($sfile,$tfile);
$files[]=$tfile;
文件拷贝
$sfile=$sourcepath.DS.'helper.php';
$data=JFile:
:
read($sfile);
$tfile=$targetpath.'/helper.php';
JFile:
:
write($tfile,$data);
$files[]=$tfile;
unset($data);
文件读取和写入
Joomla源代码解析(十一)JHtml类
2008-01-0111:
00管理员546次点击
Tags:
一个显示用到函数看看
JHtml没有几个函数,但是在组成页面已经模板书写过程中经常用到,比如:
JHTML:
:
_('date',$this->item->date,JText:
:
_('DATE_FORMAT_LC5'))
以及在后台管理中常用到的
来看看这几个函数:
calendar显示一个日历插件
date显示格式化日期
iframe插入一个iframe
image插入一个图片
link插入一个超链
以上是常用的函数,函数的以用方式就如例子。
Joomla源代码解析(十二)JToolBarHelperJToolBar类
2008-01-0111:
09管理员426次点击
Tags:
管理后台过程经常比如
这个两个类是后台管理过程经常用到的,比如:
JToolBarHelper:
:
title( JText:
:
_('{{component}}Manager'),'generic.png');
JToolBarHelper:
:
deleteList();
JToolBarHelper:
:
editListX();
JToolBarHelper:
:
addNewX();
这几句就添加了三个按钮,添加,删除,修改
其实还有几个常用的
preview//预览
publish//发布
cancel//取消
比较常用的就这几个了,主要是在后台管理toolbar上的按钮。
相关按钮的动作对应后台管理的task,相应的对做要在controller中生命。
Joomla源代码解析(十三)JText类
2008-01-0111:
22管理员422次点击
Tags:
常用Joomla语言文件存储
Joomla最常用的类之一,使用方式JTEXT:
:
_('JJJJJ')
JJJJJ对应语言文件中的相应字符串。
为了实现多语言这个是常用的。
当然如果你以utf-8字符集存储php文件,对于中文就不用考虑那么多了,不过不够规范喓。
要是只是自己用,也无所谓啦,开发要快点。
呵呵!
推荐还是用吧!
Joomla源代码解析(十四)JRequest类
2008-01-0119:
04joomla442次点击
Tags:
Joomla提交信息得到get
这是另一个Joomla扩展中最常用的类,这个类封装了客户端提交的请求相关的信息,通过这个类你可以得到用户提交的相关信息和数据,有几个重要的函数:
首先是get($hash),我们看看部分源码就知道,get得到什么了
switch($hash)
{
case'GET':
$input=$_GET;
break;
case'POST':
$input=$_POST;
break;
case'FILES':
$input=$_FILES;
break;
case'COOKIE':
$input=$_COOKIE;
break;
case'ENV' :
$input=&$_E
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- joomla15 代码 分析