joomla 1.5 笔记
Joomla1.5 笔记
MVC结构
index.php?option=组件名&view=视图名&controller=控制器名&layout=视图分页名
index.php?option=com_test
模板和组件com_test的展示
index2.php?option=com_test
仅组件com_test的展示
组件开发需要在数据库添加记录,并以com_开头,组件分前台与后台,后台组件放在administrator/components下,前台组件放在components下。
Task是Controller下的分支,没有Task时用默认处理。
建立了View可以用 index.php?option=com_test&view=? 来显示,不需要写Controller,但必需有Controller存在
命名规则:
Controller
类名:控制器名Controller, 控制器名随时,但会影响View和Model的命名
文件名随时,由主文件调用
View
类名:控制器名View视图名
放在views目录下,以视图名作为目录名,主文件为view.html.php,模板页在tmpl下
Model
类名:控制器名Model视图名
放在models目录下,以视图名为文件名
Model:
继承JModel,所有以get开头的成员函数都作用参数。比如getXXX(), 从View中可以用$this->get('xxx')获取返回值
Controller:
JController成员名对应task名
常用功能
获得表单提交数据:
JRequest::getCmd( 'task' ); 过滤提交数据
JRequest::getInt('limit', 0); 取整型提交数据
JRequest::getVar('message', ''); 直接取提交数据
绑定模板数据:
view.html.php:
$this->assignRef('lists', 'value');
$mainframe (class JApplication):
$mainframe->getCfg('sitename'); 网站名
$mainframe->getCfg('mailfrom'); 管理员名
$mainframe->getCfg('fromname'); 邮箱
$mainframe->isSite() 判断是否前台
当前完整Url:
$uri = JFactory::getURI();
$uri->toString()
网站根地址:
JURI::base()
配置文件设置方法:
// Get the path of the configuration file
$fname = JPATH_CONFIGURATION.DS.'configuration.php';
// clear cache
$cache = JFactory::getCache();
$cache->clean();
// Update the credentials with the new settings
$config =& JFactory::getConfig();
$config->setValue('config.form_email', 'xxx');
// Get the config registry in PHP class format and write it to configuation.php
jimport('joomla.filesystem.file');
if (!JFile::write($fname, $config->toString('PHP', 'config', array('class' => 'JConfig')))) {
die(JText::_('ERRORCONFIGFILE'));
}
路由地址为HTML全地址:
JRoute::_( 'index.php?option=com_ccNewsletter' );
获得工厂对象:
$user =& JFactory::getUser(); 用户对象
$db =& JFactory::getDBO(); 数据操作对象
$document =& JFactory::getDocument(); 上下文对象
$lang =& JFactory::getLanguage(); 语言包对象
数据库对象操作:
$db =& JFactory::getDBO();
$db->setQuery($sql);
$db->loadObjectList(); 对象列表
$db->loadObject(); 一行对象
$db->loadResult(); 单个结果
$db->Quote(); 过滤敏感字
$db->query();
Document对象操作:
$document->addStyleSheet(url); 添加样式
$document->addScript(url); 添加脚本
语言对象操作:
$lang->_lang === 'en-GB' or $lang->_lang === 'zh-TW'
用户对象操作:
$user->get('guest') 是否登录,登录了返回false
$user->xxx 可以直接访问数据库中的字段,xxx为字段名
$user->setParam('xxx') 设置默认参数以外的参数
$user->getParam('xxx') 提取参数
获得组件的Menuid:
$menu = &JSite::getMenu();
$Items = $menu->getItems('link', 'index.php?option=com_idoblog&view=idoblog');
$Itemid=$Items[0]->id;
获得当前Menuid:
$menus = &JSite::getMenu();
$menu = $menus->getActive();
发送Email:
$sent = JUtility::sendMail(发送者邮箱, $contactname, 接收者邮箱, $subject, $body, true);
if (!$sent) {
$this->setError("Send email failed.");
}
Javascript弹出小窗口:
<a class="modal" href="xx" rel="{handler: 'iframe', size: {x: 570, y: 350}}">xx</a>
JFolder用法:
JFolder::files($path, 'jpg|png|JPG|PNG', false, true); 指定目录下的文件列表
防止刷新提交:
view: <?php echo JHTML::_( 'form.token' ); ?>
controller: JRequest::checkToken() or jexit( 'Invalid Token' );
地址操作
给当前地址添加参数:
$uri = JFactory::getURI();
$uri->setQuery($uri->getQuery().'&lang=en');
$uri->toString()
JRoute::_("&limitstart=");
JHTML控件
日历:
JHTML::_('calendar', '1980-1-1', 'ielts_score_date', 'ielts_score_date', '%Y-%m-%d', array('class'=>'short', 'size'=>'25', 'maxlength'=>'19'))
日期显示:
JHTML::_('date', <data>, JText::_('DATE_FORMAT_LC2'));
载入脚本:
JHTML::script('upload.js', 'components/com_smipa/js/', false);
JTHML::Stylesheet('style.css', 'components/com_smipa/css/');
JHTML::_('behavior.mootools'); 载入mootools
JHTML::_('select.booleanlist', 'published','class="inputbox"', $item->published); //不能用于tinyint(1)类型
<input type="checkbox" name="custom_link" value="1" <?php echo $this->item->xxx?'checked="checked"':'' ?> /> //适用于tinyint(1)
JHTML::_('list.category', 'catid', $option, intval($item->catid));
JHTML::_('list.specificordering', $item, $item->id, $query,1);
JHTML::_('select.genericlist',$list,'postname',null,'id','title', 'default-value');
模块开发
$params->get("count", "0"); //在modules中获取参数
选择模板:
require JModuleHelper::getLayoutPath('mod_menu', 'default');
<jdoc:include type="head" /> //这句话引入了页面的header部分。
<jdoc:include type="modules" name="top" style="xhtml" /> //模块组位,name在xml文件上描述
<jdoc:include type="component" style="xhtml" /> //组件位
style是可选的,可选值定义在/templates/system/html/modules.php,能添加新的style
$this->countModules('left') //如果left有模块显示,则返回true
模块输出到任何位置:
$module = JModuleHelper::getModule('custom',$title);
echo JModuleHelper::renderModule($module);
模板位置:
----------------------------------
/templates/xxxx/index.php //模板页面,php和html描述
templateDetails.xml //模板结构描述
/element/template_thumbnail.png //140*90的截图
/element/css/template_css.css //模板CSS
---------------------------------
模板配置文件:
<files> 部分包含模板涉及到的重要文档
<images> 部分包含涉及到的图片文件
<css> 部分是css文件
<languages> 不用说是语言文件
<positions> 定义了模板中的模块位置
<params> 模板中的参数
<filename>params.ini</filename>
<folder>images/</folder>
$this->baseurl
$this->language;
$this->params->get('widthStyle') //在视图中获取参数
$this->template //当前模板名
$user= JFactory::getUser();
自定义模块style:
function modChrome_{style_name}($module, &$params, &$attribs)
{
$url = isset($attribs['url']) ? $attribs['url'] : '#'; //接收参数
if (!empty ($module->content)) : ?>
<div class="moduletable<?php echo $params->get('moduleclass_sfx'); ?>">
<?php if ($module->showtitle != 0) : ?>
<h3><?php echo $module->title; ?><a href="<?php echo $url ?>">Read More</a></h3>
<?php endif; ?>
<?php echo $module->content; ?>
</div>
<?php endif;
}
插件开发
插件在plugins目录里以插件类型命名的目录下。每个类型都有个example.php的例子可以作为建立插件类与事件处理的参考。
XML参数
参数类型:
<param name="" type="text" default="" label="" description="" />
<param name="" type="radio" default="" label="" description="">
<option value=""></option>
</param>
<param name="" type="list" default="" label="" description="">
<option value="">Use Global</option>
</param>
<param name="description" type="textarea" default="" label="Description" description="" rows="5" cols="30" />
在非文章组件/模块内调用分类参数
<params addpath="libraries/joomla/html/parameter/element/category">
<param name="catid" type="category" label="Category" description="Choose a category..." />
...
</params>
组件参数取值方法:
global $mainframe;
$params =& $mainframe->getParams('com_xxx');
$params->get(key)
$cparams =& JComponentHelper::getParams('com_media');
Component参数(基于组件,即option的值):
位置: 组件后台根目录下的config.xml
后台设置点: 在menus里选中组件类型后可以设置
JToolBarHelper::preferences('com_xxx')
Basic参数(基于Menu,即Itemid的值):
位置: 安装包XML,写在<params>节点
前台view/tmpl下,与layout同名的XML,可参考con_content的XML
后台设置点: 在menus里选中组件类型后可以设置
后台组件功能开发
配置组件后台子级菜单:
-------------------------
安装组件包前,在后台组件的安装XML里修改submenu节点,安装后会自动在menu与组件节点添加对面的名称。安装组件包后如有修改需求,可以在#__component表中修改submenu
-------------------------
工具栏(ToolBar):
-----------------------------
JHTML::_('behavior.tooltip'); 启动toolbar
JToolBarHelper::title(JText::_('Newtech'), 'generic.png');
JToolBarHelper::save();
JToolBarHelper::custom('publish', 'publish', '', JText::_( 'CC_ENABLED' ), true);
JToolBarHelper::preferences('com_xxx'); 参数设置,对应config.xml
JToolBarHelper::customX(<task>, 'new.png', 'new.png', 'Create', false);
---------------------------
controller中:
------------------------
$this->setRedirect( 'index.php?option=com_ccNewsletter&controller=newsletter', $msg );// 页面跳转
JController->getModel(); // 得到对应的model实例,可以获得组件所有model
model中:
---------------------------
JModel->getTable 获得表实例,只可以获得对应的table
table中:
-------------------------------
$post = JRequest::get("post");
JTable->bind($post); //对应POST数据更新表
JTable->check(); //检查数据的正确性
JTable->store(); //把数据表写入到数据库
view中:
------------------------------
JView->getModel 只可以获得对应的model
JView->get("xxx") 调用对应model的方法
------------------------------
加在后台模板中的验证脚本:
<script type="text/javascript">
function submitbutton(pressbutton) {
var form = document.adminForm;
if (pressbutton == 'cancel') {
submitform( pressbutton );
return;
}
email = form.mail.value;
pattern = /^([a-zA-Z0-9_-])+@([a-zA-Z0-9_-])+(.[a-zA-Z0-9_-])+/;
flag = pattern.test(email);
if(!flag)
{
alert("Invalid Email");
return;
}
submitform(pressbutton);
}
</script>
多语言 (language)
多语言包注意事项:
JText::_("")函数会把字串转成大写再搜索语言包中的字串,如果找不到对应的语言包,就会原样输出。
权限管理 (ACL)
添加权限
JAuthorization::addACL(访问资源节点(组件), 访问资源(具体权限), 访问对象节点(users), 访问对象(组))
验证权限
JUser::authorize(访问资源节点(组件), 访问资源(具体权限))
添加新的权限
61行: libraries/joomla/user/authorization.php
后台菜单权限验证
34行: administrator/modules/mod_menu/help.php
组件后台验证一般写在组件入口中,如admin.frontpage.php
组件前台验证一般写在view.html.php中
加载juqery.js
把jquery copy到media/system/js下
调用JHTML::script('jquery.js');
自定义事件 (event)
以VM插件为例
把插件安装包XML中group="vm"
插件代码:
jimport( 'joomla.plugin.plugin' );
$mainframe->registerEvent( 'onEventType', 'plgFunction' );
function plgFunction(){
// 处理过程
}
触发事件
JPluginHelper::importPlugin('vm');
$dispatcher =& JDispatcher::getInstance();
$dispatcher->trigger('onEventType'); // 触发onEventType事件
sh404sef
应该在页面和参数都调好后再开sh404sef,如果因为sh404sef生成错误地址所影响,可以在后台查询地址路径再修改。
h2:
sh404sef默认把h1标签改成h2,这个要在后台设置。
404:
sh404sef安装后会自动新建404的文章页,当找不到页面会自动跳到404文章页。但默认没有指定Itemid,可能页面会受影响,可以在后台高级设置页上修改以下参数:
$shDefaultParams['sh404SEF_PAGE_NOT_FOUND_FORCED_ITEMID'] = 0;
page title:
开了sh404sef后page title需要在sh404sef的配置中设置,比如首页的title,要在URL Manager中的Home page Meta处修改
局部关闭sef:
以virtuemart为例
components/com_sh404sef/sef_ext/com_virtuemart.php
在对应的case支点最下方(即break之上)加上 $dosef = false;
.号替换:
URL最尾带后缀会使rewrite不生效,所以404后台配置需要把.替换掉。例如: .|-
地址出现中文:
由于sh404sef默认使用title作为URL,对于中文网站也将使用中文title为URL,这样就会生成中文URL,解决方法是把Use Title Alias, Use category alias, Use section alias, Use menu alias全部选上。
VM 结构
vm的page是页面逻辑部分,template是视图部分,func是业务逻辑部分
可以通过URL的page参数找到对应的page程序,阅读代码可以找到template的准确位置
有关功能性程序,可以跟据页面代码中找到form中的func参数,之后利用后台List Modules功能找到代码。
比如:
1: 从页面的form找到参数,func = orderStatusSet
2: 到后台的List Modules找到与订单相关的order Module
3: 点击order Module的function list,找到记录如下:
Function Name: orderStatusSet
Class Name: ps_order
Class Method: order_status_update
4: 找到ps_order.php,这个是ps_order类的代码,里面能找到方法order_status_update,就是我们要修改的代码部分。
page的位置:
administrator/components/com_virtuemart/html/
template的位置:
com_virtuemart/themes/default/templates/
class的位置:
administrator/components/com_virtuemart/classes/
VM 设置问题
paypal接口调试模式:
后台 > Store > List Payment Methods > PayPal > Configuration
修改为:
$url = "https://www.sandbox.paypal.com/cgi-bin/webscr";
后台的List Modules可以针对几种用户进行功能设置,比如可以把帐户分成管理员与仓库管理员。
VM有子产品概念,可以实现不同属性不同价格。要添加子产品必须先Add Attribute。
VM 模板位置
Featured Products模板:
components/com_virtuemart/themes/default/templates/common/featuredProducts.tpl.php
分页模板:
administrator/components/com_virtuemart/classes/pageNavigation.class.php
产品列表页模板(可添加)
Category Browse Page:
components/com_virtuemart/themes/default/templates/browse/Browse_x.php
产品内容页模板(可添加)
Category Flypage:
components/com_virtuemart/themes/default/templates/product_details/flypage_x.php
components/com_virtuemart/themes/default/theme.php
输出附件缩略图片,不包含原图,flypage_images.tpl依赖于此函数
function vmlistAdditionalImages( $product_id, $images, $title='', $limit=1000 )
产品列表默认次序修改:
23行: administrator/components/com_virtuemart/html/shop_browse_queries.php
VM email
Ask a question about this product
咨询邮件内容(客户):
VM语言包common
VM_ENQUIRY_SHOPPER_EMAIL_MESSAGE
咨询邮件内容(店主):
VM语言包common
VM_ENQUIRY_VENDOR_EMAIL_MESSAGE
咨询邮件模板:
components/com_virtuemart/themes/default/templates/order_emails/enquiry_email.tpl.php
Checkout邮件:
components/com_virtuemart/themes/default/templates/order_emails/confirmation_email.tpl.php
订单更新状态邮件:
365行: administrator/components/com_virtuemart/classes/ps_order.php
转载于:https://www.cnblogs.com/catcat811/archive/2011/08/30/2159093.html
joomla 1.5 笔记相关推荐
- Joomla 学习笔记-----Joomla 安装
Joomla 学习笔记-----Joomla 安装 1.Joomla安装 自己建的web服务器地址:10.170.89.116 下载Joomla 3.2 并解压 解压后的目录: 使用FileZill ...
- 公司Joomla项目笔记1
joomla简介 Joomla!是一套全球知名的内容管理系统.Joomla!是使用PHP语言加上MySQL数据库所开发的软件系统,可以在Linux. Windows.MacOSX等各种不同的平台上执行 ...
- 2011寒假-joomla学习笔记
1,搭建Joomla 需要吧PHP.ini,的display_errors关掉! 2.后台管理 作业: 1,熟悉joomla的数据库操作 2,开发插件 3,设计模板 4,模块 数据库操作 1, JTa ...
- 《安全测试指南》——信息收集测试【学习笔记】
[信息收集测试] 1.搜索引擎信息收集(OTG-INFO-001) 通过搜索引擎收集以下: · 网络拓扑图和配置 · 管理员和其他员工的归档文章和邮件 · 登录过程和用户名的格式 · 用户名和密码 · ...
- joomla 标准激活的php mail 功能,php 通过joomla jmail 类使用 gmail smtp 账号发送邮件的简单示例...
php通过joomla jmail 类使用 gmail smtp 账号发送邮件,感兴趣的小伙伴,下面一起跟随512笔记的小编罗X来看看吧. 经测试代码如下: /** * 通过joomla jmail ...
- 织梦轻量级mvc框架笔记
为什么80%的码农都做不了架构师?>>> 织梦cms简单易用 是我们这些水货站长首选的cms 但随着功能的扩展,织梦好像渐渐的变得臃肿不堪,可扩展性不好,结构不是很清晰 , ...
- 学习笔记-B/S - Exploits
B/S - Exploits 免责声明 本文档仅供学习和研究使用,请勿使用文中的技术源码用于非法用途,任何人造成的任何负面影响,与本人无关. 大纲 各类论坛/CMS框架 AEM 74CMS dedeC ...
- 《Web安全渗透全套教程(40集)》学习笔记 | SQL注入攻击及防御
学习视频来源:B站<Web安全渗透全套教程(40集)> 个人在学习的同时,也验证了视频中的实验部分,现将授课笔记和实验笔记整理下来. SQL注入危害 SQL基础回顾 连接数据库 查看数据库 ...
- amazeui学习笔记--css(常用组件6)--图标Icon
amazeui学习笔记--css(常用组件6)--图标Icon 一.总结 1.关注用法即可:在 HTML 上添加添加 am-icon-{图标名称} class. <span class=&quo ...
- 关于《Python黑帽子:黑客与渗透测试编程之道》的学习笔记
本篇文章是学习<Python黑帽子:黑客与渗透测试编程之道>的笔记,会持续地将书上的代码自己敲一遍,从而让自己对Python的安全编程有更多的了解,同时希望各位可以给给建议,不足之处太多了 ...
最新文章
- [knownledge][latex] LaTex入门
- 15.10.4 捕获异常
- embedding亦福亦祸?XGBoost与LightGBM的新机遇
- 在QEMU硬件环境中启动 kernel 2.6 + busybox as rootfs
- SQLite3中核心C API
- 怀念本科时代----科学入门的导师肖建华老师
- 2020.07笔记本选购指南
- ProGuard详解 - Java代码混淆
- 需求变更对软件质量的影响
- Ceph文件系统与原生磁盘读写性能的比较
- 谈谈我做技术经理的经验和教训
- B区路上看到了美女。。。
- 掌握IDEA的这两款插件,写“破解补丁”分分钟
- 爪哇国新游记之十三----XML文件读写
- Eval Reset忘记重置怎么办
- Window 的标志
- MySql 数据库10038问题终极解决
- Java opencv4 如何识别一张图片的你想要的物体的数量
- python七彩同心圆_用pygame做一个简单的python小游戏---七彩同心圆
- 2020应届毕业生,Android春招总结,已入职小米,进阶加薪全靠它
热门文章
- [实战]MVC5+EF6+MySql企业网盘实战(20)——Bootstrap Paginator
- 通过迁移的方式解决Active Directory服务器问题之5-恢复服务器的应用
- sqlplus下无法shutdown情况下不妨试试crsctl stop crs
- 堪称神级的Spring Boot手册,从基础入门到实战进阶
- 使用 Redis 实现一个轻量级的搜索引擎,牛逼啊!
- 5 年 Java 面试大厂遭淘汰,面试官:连这个源码都不懂
- 毕业了5年的同学突然告诉我,他已经是架构师了!
- 35+ 个 Java 代码性能优化总结
- 为了解决架构的问题,我们需要先理解敏捷的真谛
- 如何在Linux系统列出systemd下所有正在运行的服务