文章列表
Joomla 1.5 RC3版本的SEF存在不少问题,前段时间架站的时候曾经仔细看过这部分,昨天做apache转向的时候,突然发现又都忘记了,再回忆一次,记录下来。
/index.php 中$mainframe->route(); 这一函数中实现了从URI中获取相关参数并填充到JRequest中,我们来看看这个函数的实现过程。
这个函数的代码清单如下:
function route()
{
// get the full request URI
$uri = clone(JURI::getInstance());
$router =& $this->getRouter ...
JPagination类是Joomla的通用分页功能的封装类,从RC3开始一直存在一些问题,目前的版本大的问题都解决了,但是sef开启的状态下,可能url还存在一些问题,至少我的站点是这样的。源代码中的类函数与英文文档中的略有不同,暂时以源代码中的为准。
__construct 构造函数
这个构造函数有三个参数:
$total 是集合中记录总数
$limitstart 是当前页的第一个记录在集合中的顺序号
$limit 每页的显示总数
使用的例子 $pageNav = new JPagination( $total, $limitstart, $limit )
getLimitBox ...
上一文章中提到了getBuffer函数,在函数中实际上调用了render ,这个对象是JDocumentRendererModule 类的实例,我们看看JDocumentRendererModule 的render函数。
if (!is_object($module))
{
$module =& JModuleHelper::getModule($module);
if (!is_object($module))
{
if (is_null($content)) {
return '';
} else {
/**
...
以前的文章中,关于/index.php我们已经分析完了 $mainframe->dispatch()是引入了组件,并被执行。我们知道对于Joomla,一个页面只能有一个或者0个组件,而上,下左右的碎片都是module,module是页面丰富的有效补充。比如我们知道菜单是 mod_mainmenu,而footer是mod_footer等等,那么这些module是怎么被引入的,并最后执行的?
秘密都在$mainframe->render()这个函数上,我们看看这个函数都做了什么工作。
以下是JSite 的render 函数的内容
$document =& JFacto ...
以前的文章中,我们曾经说过 $mainframework->dispatch 是如何最终调用组件的,通过这个dispatch,最终 include 相应组件目录下的 组件名称.php 文件,现在我们来看看,这个文件是怎么按部就班的联系了MVC模式相关的各个文件。
require_once (JPATH_COMPONENT.DS.'controller.php');
// Require specific controller if requested
if($controller = JRequest::getVar('controller')) {
require_once (JPA ...
同样 JController 是MVC中重要的起点,正式这个类决定的动作的下一步流向,我们来看看表格提交数据的典型的controller的代码:
function edit()
{
JRequest::setVar( 'view', 'hello' );
JRequest::setVar( 'layout', 'form' );
JRequest::setVar('hidemainmenu', 1);
parent::display();
}
/**
* save a record (and redirect to main page)
* @return voi ...
MVC模式中,重要的一环,JView 和 tmpl目录中的模板,共同决定了,页面html的代码,Jview是在Jmodel和template之间的桥梁。我们扩展做自己的组件,都需要扩展 Jview的子类。这个类其实需要看看它的变量和函数也就理解:
跟数据相关的部分:
_defaultModel 默认的model ,可以通过 setModel 进行设置。同时function &get 可以从指定的model调用函数返回相应的数据
_models 存贮model的数组,getModel,可以从中返回指定的Model
assign assignref,数据赋值函数,这两个函数的任务是 ...
JTable是什么?
JTable是数据库中数据表在程序中的表达,其实JTable更对应着表中的一行,以及相应的操作。Joomla中的 JTable**对应中数据库中 **表,我们在使用的时候要针对我们自己所使用的表扩展自己的JTable.我们需要关注的是JTable的函数checkin,checkout ,这两个函数对更新的数据进行合法性检查,我个人觉得对于数据完整性的检查应该放在Jtable的check中。
Jtable 比较常用的函数,看名字就明白了,记住几个吧:
delete,store,bind,load,setError等,具体还是需要用的时候看看源代码吧。
数据表类
Met ...
Joomla代码中, 组件是如何被调用并渲染的呢?
在描述 /index.php的时候,我们看到根据option参数,$mainframework->dispatch(),就进入了组件的调用并渲染的过程,我们来看看JSite 的dispatch都做了什么工作。
dispatch 最关键的是这几句 ...
这是另一个Joomla扩展中最常用的类,这个类封装了客户端提交的请求相关的信息,通过这个类你可以得到用户提交的相关信息和数据,有几个重要的函数:
首先是get($hash),我们看看部分源码就知道,get得到什么了
switch ($hash)
{
case 'GET' :
$input = $_GET;
break;
case 'POST' :
$input = $_POST;
break;
case 'FILES' :
$input = $_FILES;
break;
case 'COOKIE' :
...
Joomla 最常用的类之一,使用方式JTEXT::_('JJJJJ')
JJJJJ对应语言文件中的相应字符串。
为了实现多语言这个是常用的。当然如果你以utf-8字符集存储php文件,对于中文就不用考虑那么多了,不过不够规范喓。
要是只是自己用,也无所谓啦,开发要快点。
呵呵!推荐还是用吧!
这个两个类是后台管理过程经常用到的,比如:
JToolBarHelper::title( JText::_( '{{component}} Manager' ), 'generic.png' );
JToolBarHelper::deleteList();
JToolBarHelper::editListX();
JToolBarHelper::addNewX();
这几句就添加了三个按钮,添加,删除,修改
其实还有几个常用的
preview //预览
publish //发布
cancel //取消
比较常用的就这几个了,主要是在后台管理toolbar ...
JHtml 没有几个函数,但是在组成页面已经模板书写过程中经常用到,比如:
JHTML::_('date', $this->item->date, JText::_('DATE_FORMAT_LC5'))
以及在后台管理中常用到的
来看看这几个函数:
calendar 显示一个日历插件
date 显示格式化日期
iframe 插入一个iframe
image 插入一个图片
link 插入一个超链
以上是常用的函数,函数的以用方式就如例子。
这几个类都是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($ ...
user 类处理所有程序中与用户交互的相关事情。
这个类的构造函数调用load函数,输入的参数是用户id,可以初始化用户的相关信息,这些信息包括 aid ,gid,usertype,username,name,id等等,这些信息在扩展中经常用到。
同时,在程序中,用刚刚说过的getUser,取得当前登录用户实例。具体用法如下:
$user =& JFactory::getUser();
$userId = (int) $user->get('id');
根据 gid 可以判断用户的相关的组以及组权限。
了解了Juser类,还需要了解一下 JUserHelper类,这个 ...