欢迎来到 黑吧安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

Joomla 框架的程序执行流程及目录结构分析

来源:本站整理 作者:佚名 时间:2017-05-28 TAG: 我要投稿

目录
administrator/   # 管理后台目录
bin/             # 该文件夹存放一些基于Joomla框架开发的一些实用的脚本
cache/           # 文件缓存目录
cli/             # 该文件夹存放一些终端使用的命令,用于操作当前的站点
components/      # Joomla组件目录
images/          # 网站内容使用的媒体文件目录,后台有对此文件夹进行管理的功能
includes/        # 运行Joomla需要包含的基础文件
language/        # 语言目录,多语言的翻译都存放在这里
layouts/         # 应该是控制布局的,没有注意过是哪个版本加上的,也没研究过,等有时间了研究一下再写
libraries/       # Joomla使用的库文件
logs/            # 日志目录,一些异常处理都会存放在这个文件夹里,例如后台登录时输入错误的用户名和密码
media/           # Joomla使用到的媒体文件,主要是页面渲染会用到的,存放的内容跟images目录有区别,而且后台是没有对其进行管理的功能的
modules/         # Joomla模块目录
plugins/         # Joomla插件目录
templates/       # Joomla站点模板目录
tmp/             # 临时目录,如安装组件或模块时残留的解压文件等
文件
configuration.php   # Joomla配置文件
htaccess.txt        # 帮助我们生成.htaccess
index.php           # Joomla单入口文件
LICENSE.txt         # 不多叙述
README.txt          # 不多叙述
robots.txt          # 搜索引擎爬行使用的文件
web.config.txt      # 据说是IIS使用的文件
0x01 Joomla的MVC
在Joomla中并不像国内的一些cms一样,主要功能的实现放在组件中,下面就说一说Joomla中的四个非常重要的东西:组件、模块、控制器、视图。
1. 组件
在Joomla中,组件可以说是最大的功能模块。一个组件分为两部分:前台和后台。后台主要用于对对应内容的管理,前台主要用于前台页面的呈现和响应各种操作。其文件目录分别对应于joomla/administrator/components和joomla/components。组件有自己的命名规则,文件夹名须命名为com_组件名,组件的访问也是单文件入口,入口文件为com_组件名/组件名.php。如components/com_content/content.php。
其中option=com_content&view=article&id=7,它会先调用content.php,再由router.php路由到article视图,再调用相应的Model层取出ID=7的分类信息,渲染之后呈现在模板中的jdoc:include type=”component位置上。
2. 模块
与组件(Component)不同的是,模块(Module)是不能通过URL直接访问的,而是通过后台对模块的设置,根据菜单ID(URL中的Itemid)来判断当前页面应该加载哪些模块。所以它主要用于显示内容,而一些表单提交后的处理动作一般是放在组件中去处理的。因此,模块通常都是比较简单的程序,文件结构也很清晰易懂,如modules/mod_login模块中的文件结构如下:
modlogin.xml # 模块配置及安装使用的文件
mod_login.php # 模块入口文件,以mod模块名.php命名,可以看作Controller层
helper.php # 辅助文件,通常数据操作会放在这里,可以看作Model层
tmpl/ # 模板文件夹,View层
| default.php # 默认模板
| default_logout.php # 退出登录模板
2.1 模块调用的另外一个参数
在模板的首页文件中,我们会看到调用模块时有如下代码

jdoc:include type="modules" name="position-7" style="well"
这里多了一个style参数,这个其实是一个显示前的预处理动作,在当前模板文件夹中的html/modules.php中定义,打开这个文件我们就能看到有一个modChrome_well的函数,程序不是很复杂,只是在显示前对html做了下预处理。
2.2 模块的另外一种调用方法
有时候会需要在程序里调用一个模块来显示,可以用以下程序来调用
该程序会显示所有设置在position位置上的模块,当然也会根据菜单ID来判断是否加载
$modules = & JModuleHelper::getModules('position');
foreach($modules as $module){
    echo JModuleHelper::renderModule($module, array('style' = 'well'))
}
3.模板
个人理解,模板就相当于输出的一种格式。也就是在后端已经调用了相关的数据,准备在前端以什么样的格式输出。
在Joomla中,一个页面只能有一个主要内容(组件:component),其他均属于模块。如图:

如果从代码来分析的话,打开index.php(组件下的index.php),除了简单的HTML和php外,还可以看到以下几类语句:
jdoc:include type="head"
jdoc:include type="modules" name="position-1" style="none"

[1] [2] [3]  下一页

【声明】:黑吧安全网(http://www.myhack58.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱admin@myhack58.com,我们会在最短的时间内进行处理。
  • 最新更新
    • 相关阅读
      • 本类热门
        • 最近下载