AKCMS的二次开发
导航: 返回上一页
AKCMS的二次开发流程:
AKCMS目录结构[ ]
注意:本文仅供开发者参考,站长绕行无需关注。
AKCMS目录结构:
- cache:存放一些缓存数据,比如getitems如果指定了expire属性,就会作为文件缓存在这里
- data:MySQL版本备份恢复数据的文件存放在这里,SQlite版本的数据文件默认放在这里
- dic:词库在这里
- editor:阉过的所见即所得编辑器FCKeditor在这里
- fore:前端调用的接口程序在这里
- images:图片文件在这里,水印文件也在这个文件夹
- include:公用的一些程序文件
- install:需要复制到根目录的文件存放在这里
- language:语言包
- logs:日志文件存放的地方
- smarty:阉过的smarty相关程序在这里
- templates:后台模板文件夹
- templates/ak:或者是别的前台模板文件夹
- templates_c smarty:模板生成的临时文件在这里
- themes:下载的风格放在这个文件夹里可以导入
- tools:工具程序放在这里
- update:升级程序放在这里
AKCMS二次开发常见问题[ ]
如何在AKCMS中的HOOK(钩子)执行自己的代码[ ]
本功能为二次开发者设计,站长看不懂不影响正常使用,绕行即可。
在二次开发中常常遇到这样的情况,希望自己的代码在页面打开之前有机会执行。比如这种需求:判断是搜索引擎的蜘蛛,就做出一定的动作。这样的代码就需要在页面打开之前执行。
不需要修改AKCMS的代码即可实现这样的功能,不修改AKCMS代码的好处是保持以后升级的时候不需要把修改过的文件,修改过的代码merge到新的版本中,始终保持独立。
AKCMS 2.7以上版本在动态执行时会检查(/plugins/runtime/)中是否有_before.php结尾的文件,如果有就在页面打开之前执行他们。页面打开完毕后检查(/plugins/runtime/)中是否有_after.php结尾的文件,如果有就执行他们。
例如这个需求:把所有动态执行的每一次访问的访问地址都记下日志以便分析。
拷贝以下代码:
<?php error_log($_SERVER['REQUEST_URI']."\n", 3, AK_ROOT.'./logs/log.txt'); ?>
保存为/plugins/runtime/log_after.php即可。
注意:生成静态页之后,直接就是HTML文件的显示,当然不能执行任何代码,所以本文所说的功能都是针对AKCMS动态执行时而言。
如何在AKCMS菜单中增加项目[ ]
网站维护中经常有一些常用的网址,可以放到浏览器的收藏夹,缺点是换一台电脑这些网址就找不到了,AKCMS 2.7开始,允许您自己将常用网址自己增加到菜单中。
您可以按照这样的格式写一个文件:
搜狐,http://www.sohu.com 百度,http://www.baidu.com
保存为:/plugins/menu.lst
利用AKCMS的公用函数编写单独的PHP程序[ ]
只要包含/akcms/include/common.inc.php即可引用AKCMS的公用函数。引用之后会初始化一系列变量供后面的程序使用:
- $os:操作系统(windows或linux)
- $lr:不同操作系统下默认的换行符
- $__dbtype:数据库类型(mysql或sqlite)
- $__callmode:调用类型(web或command)
- $onlineip:IP地址
- $thetime:程序开始执行时的时间戳
- $db:数据库对象(创建数据库链接需要时间,如果程序中不需要数据库查询,为节省时间,可以在引用common.inc.php之前初始化一个$nodb = 1;即可)
- $systemurl:系统地址
- $homepage:首页地址
当服务器配置自动为GET、POST等注册全局变量时,common.in.php会unset掉这些全局变量。
可使用的功能函数
- debug($variable, $exit = 0, $type=0);//输出一个变量的内容,当第二个参数不为空则exit,$type决定了输出的类型,默认0是虚线框显示;1是alert弹出来;2 也是alert,不过前后不加<script>标签,适用于本身就在标签中;3是直接输出,适用于命令行程序中显示。
- monitor($message = );//打一个计时点,当解决效率问题的时候,可以在程序中加入多个计时点,配合monitor_log就可以知道每一段代码消耗了多少时间,从而发现问题。
- monitor_log($log = );//输出计时点的分析结果,如果$log指定的话分析结果将计入日志文件
注意事项[ ]
当一次性执行大量查询的时候可能会占用大量内存,因为$db数据库对象每次查询都会把SQL语句放到数组中,当同时进行大量查询时,数组过大占用太多内存。解决方法是在执行query方法后清空查询语句的数组:
$db->query($sql); $db->queries = array();