Joomla代码中, 组件是如何被调用并渲染的呢?
在描述 /index.php的时候,我们看到根据option参数,$mainframework->dispatch(),就进入了组件的调用并渲染的过程,我们来看看JSite 的dispatch都做了什么工作。
dispatch 最关键的是这几句话:
$document->setTitle( $params->get('page_title') ); //设置标题
$document->setDescription( $params->get('page_description') ); //设置meta
$contents = JComponentHelper::renderComponent($component);
$document->setBuffer( $contents, 'component');
可以看到最为关键的是 JComponentHelper::renderComponent($component);
再看看这一行程序完成了那些工作
$task = JRequest::getString( 'task' );
// Build the component path
$name = preg_replace('/[^A-Z0-9_\.-]/i', '', $name);
$file = substr( $name, 4 );
// Define component path
define( 'JPATH_COMPONENT', JPATH_BASE.DS.'components'.DS.$name);
define( 'JPATH_COMPONENT_SITE', JPATH_SITE.DS.'components'.DS.$name);
define( 'JPATH_COMPONENT_ADMINISTRATOR', JPATH_ADMINISTRATOR.DS.'components'.DS.$name);
// get component path
if ( $mainframe->isAdmin() && file_exists(JPATH_COMPONENT.DS.'admin.'.$file.'.php') ) {
$path = JPATH_COMPONENT.DS.'admin.'.$file.'.php';
} else {
$path = JPATH_COMPONENT.DS.$file.'.php';
}
这部分实际上确定了那个compoent下的组件文件被引入,并取得了task,中间一部分兼容代码就不看了
我们来看关键代码:
ob_start();
require_once $path;
$contents = ob_get_contents();
ob_end_clean();
这部分代码就是包含了组件的开始文件,而这个文件,我们在组件开发的时候用到的。这个文件引入了controller 文件,并根据task决定进入那个分支。
再深入下去就是组件的整个生成过程,以后再看了。
在描述 /index.php的时候,我们看到根据option参数,$mainframework->dispatch(),就进入了组件的调用并渲染的过程,我们来看看JSite 的dispatch都做了什么工作。
dispatch 最关键的是这几句话:
$document->setTitle( $params->get('page_title') ); //设置标题
$document->setDescription( $params->get('page_description') ); //设置meta
$contents = JComponentHelper::renderComponent($component);
$document->setBuffer( $contents, 'component');
可以看到最为关键的是 JComponentHelper::renderComponent($component);
再看看这一行程序完成了那些工作
$task = JRequest::getString( 'task' );
// Build the component path
$name = preg_replace('/[^A-Z0-9_\.-]/i', '', $name);
$file = substr( $name, 4 );
// Define component path
define( 'JPATH_COMPONENT', JPATH_BASE.DS.'components'.DS.$name);
define( 'JPATH_COMPONENT_SITE', JPATH_SITE.DS.'components'.DS.$name);
define( 'JPATH_COMPONENT_ADMINISTRATOR', JPATH_ADMINISTRATOR.DS.'components'.DS.$name);
// get component path
if ( $mainframe->isAdmin() && file_exists(JPATH_COMPONENT.DS.'admin.'.$file.'.php') ) {
$path = JPATH_COMPONENT.DS.'admin.'.$file.'.php';
} else {
$path = JPATH_COMPONENT.DS.$file.'.php';
}
这部分实际上确定了那个compoent下的组件文件被引入,并取得了task,中间一部分兼容代码就不看了
我们来看关键代码:
ob_start();
require_once $path;
$contents = ob_get_contents();
ob_end_clean();
这部分代码就是包含了组件的开始文件,而这个文件,我们在组件开发的时候用到的。这个文件引入了controller 文件,并根据task决定进入那个分支。
再深入下去就是组件的整个生成过程,以后再看了。
发表评论
-
joomla 模块modules开发教程
2010-05-12 14:16 2800模块是页面扩展轻量级方式,相对组件更为灵活。模块通常用来做页面 ... -
joomla 1.5——JDocument类用法
2010-04-22 14:46 1391文档类,提供一个容易 ... -
[翻译] Joomla XML 解析器规范 上
2010-04-22 14:45 1079概述 Joomla! 1.5 新增 JSimpleXML 类 ... -
Joomla插件开发规范
2010-04-22 14:44 1407概述:JPlugin Joomla 1.5的新功能 为了更好 ... -
joomla源代码探析续(三十一) JHTML 类常用的方法
2010-04-22 14:37 1740我曾经在几篇文章中涉及到JHTML的方法使用,这里不再说了,请 ... -
joomla源代码探析续(三十) JDate类参考
2010-04-22 14:36 1082JDate类与JString类一样是Joomla!中的基础类, ... -
joomla源代码探析续(二十九) JHTML 与JHTMLSelect 类的使用
2010-04-22 14:33 1207我们在form表单生成的过程中,经常需要有select 标签或 ... -
joomla源代码探析续(二十八) 如何扩展JTable类
2010-04-22 14:30 1063JTable类是Active Record设计模式(web应用 ... -
joomla源代码探析续(二十七)组件后台如何设置参数
2010-04-22 14:29 927以下的方法可以在管理后台中添加一个Parameters设置的按 ... -
joomla源代码探析续(二十六)JUser对象和用户权限判断
2010-04-22 14:23 1862每一个访问Joomla网站的用户都对应这一个JUser对象,通 ... -
joomla源代码探析续(二十五)JRequest对象的变量获取过程
2010-04-22 14:22 1182Joomla 1.5 RC3版本的SEF存在不少问题,前段时间 ... -
joomla源代码探析续(二十四)JPagination类
2010-04-22 14:22 1126JPagination类是Joomla的通用分页功能的封装类, ... -
Joomla源代码解析(二十二) 模块是如何被调用执行并渲染(下)
2010-04-22 14:16 951上一文章中提到了getBuffer函数,在函数中实际上调用了r ... -
模块是如何被调用执行并渲染?
2010-04-22 14:12 852以前的文章中,关于/index.php我们已经分析完了 $ma ... -
Joomla源代码解析(二十) MVC组件的执行
2010-04-22 14:10 926以前的文章中,我们曾经说过 $mainframework-&g ... -
Joomla源代码解析(十九) JController
2010-04-22 14:05 893同样 JController 是MVC中重要的起点,正式这个类 ... -
Joomla源代码解析(十八) Jview
2010-04-22 14:03 971MVC模式中,重要的一环,JView 和 tmpl目录中的模板 ... -
Joomla源代码解析(十六) JTable是什么 不指定
2010-04-22 14:01 1460JTable是什么? JTable是数据库中数据表在程序中的表 ... -
Joomla源代码解析(十四) JRequest类 不指定
2010-04-22 13:58 863这是另一个Joomla扩展中最常用的类,这个类封装了客户端提交 ... -
Joomla源代码解析(十三) JText类
2010-04-22 11:25 1223Joomla 最常用的类之一,使用方式JTEXT::_('JJ ...
相关推荐
本篇将深入探讨Joomla组件开发的详细过程,并结合源代码进行解析。 一、Joomla组件概述 在Joomla中,组件是最大的功能单元,它由多个部分组成,包括模型、视图、控制器、模板和语言文件等。组件开发涉及以下几个...
**Joomla 2.5.16 源代码详解** Joomla,作为一个开源的内容管理系统(CMS),在网站开发领域有着广泛的应用。Joomla 2.5.16 是该系统的一个版本,提供了丰富的功能和易用性,适用于构建各种类型的网站,包括企业...
这个组件被描述为“非常好用”,表明它提供了用户友好的界面和高效的功能,是网站交互和社区建设的良好工具。 聊天室组件对于任何网站来说都是一个宝贵的资源,特别是那些需要实时交流和互动的社区网站。它允许用户...
同时,开发者也可以根据需要扩展或修改组件的源代码,实现更高级的定制化需求。 总的来说,Joomla社区管理组件提供了一套全面的工具,帮助网站管理员建立活跃的在线社区。从用户注册、互动到内容管理,组件都提供了...
8. **安全与优化**:确保所有安装的组件都来自可信赖的源,并保持Joomla核心及所有扩展的最新状态,以防止安全漏洞。 通过熟练掌握Joomla中的Tab组件,你可以创建出更具有交互性和用户体验的网站。这种组件化的内容...
**Joomla 1.6 文件上传下载组件** Joomla 1.6 文件上传下载组件是一款专为Joomla 1.6版本设计的扩展程序,它允许网站管理员在网站上创建一个安全、用户友好的文件上传和下载平台。该组件不仅提高了用户交互性,还为...
### Joomla组件翻译篇知识点解析 #### 一、MVC组件开发概述 - **MVC(Model-View-Controller)架构**:这是一种常见的软件设计模式,主要用于简化开发过程并提高代码可维护性。在Joomla中,它被广泛应用于组件开发...
【标题】:“Joomla组件开发” 在Joomla这个流行的开源内容管理系统(CMS)中,组件是构建网站功能的核心模块。Joomla组件开发是一项技术性较强的任务,涉及到PHP编程、MVC设计模式、数据库交互以及前端技术等多个...
【标题】"JOOMLA 房地产组件"是一款专为Joomla 2.5平台设计的扩展,旨在帮助用户在网站上构建功能丰富的房地产信息管理系统。这个组件将为用户提供一个全面的平台,用于展示房产信息,包括房源详情、地理位置、价格...
**Joomla文章显示组件** Joomla文章显示组件是一款专为Joomla内容管理系统设计的模块,旨在帮助用户更高效地管理和展示网站上的文章。这个组件具备69个可配置参数,这意味着用户可以根据自己的需求定制文章的展示...
Joomla K2文章管理组件是一款针对Joomla CMS的高级内容管理解决方案。K2不仅提供了基本的文章发布功能,还集成了许多增强的特性,使得内容管理更为灵活和强大。这款组件适用于构建复杂的内容结构,如博客、新闻网站...
"joomla组件开发模板helloWord"是一个专门为Joomla开发者设计的简易模板,旨在加速组件开发过程,让开发者能快速上手并构建自己的组件。 首先,我们来看`com_helloworld.xml`文件,这是Joomla组件的核心配置文件,...
**JCalPro** 是一款专为 **Joomla 1.5** 架构设计的日程管理组件,旨在帮助用户高效地管理和展示各种日历事件。标题中的 "JCalPro - Joomla1.5下的日程管理组件" 明确指出了这款组件的核心功能和其适用的 CMS(内容...
开发者应根据组件需求创建配置参数,这些参数将被存储在数据库中,并在运行时被组件引用。 ### 4. 添加类别 (Joomla-3.2-Hello-World-Component-step-12-adding-categories.zip) 类别是组织内容的有效方式,特别是...
**Joomla 会员积分组件详解** Joomla 是一个流行的开源内容管理系统(CMS),它允许用户构建功能丰富的网站和在线应用程序。在Joomla中,会员积分系统是提升用户体验和互动性的重要工具,尤其对于论坛和商业网站而...
Joomla媒体管理组件扩展可以取代Joomla系统的媒体管理。上传文件和插入文件一步到位, 插入文件更加容易。 内置搜索功能,让你迅速定位你想要插入的资源, 改进系统不支持中文名称。 本扩展可以支持中文名称资源...
通过解析这个XML文件,Joomla的安装程序可以知道如何正确地处理组件的安装过程。 4. **packages**:这是一个目录,通常包含组件的子模块、插件或其他附加组件。在Zoo组件的案例中,这个目录可能包含了各种预设的...