AKCMS的二次开发

来自站长百科
跳转至: 导航、​ 搜索

导航: 返回上一页

AKCMS的二次开发流程:

AKCMS目录结构[ ]

注意:本文仅供开发者参考,站长绕行无需关注。

AKCMS目录结构:

  1. cache:存放一些缓存数据,比如getitems如果指定了expire属性,就会作为文件缓存在这里
  2. data:MySQL版本备份恢复数据的文件存放在这里,SQlite版本的数据文件默认放在这里
  3. dic:词库在这里
  4. editor:阉过的所见即所得编辑器FCKeditor在这里
  5. fore:前端调用的接口程序在这里
  6. images:图片文件在这里,水印文件也在这个文件夹
  7. include:公用的一些程序文件
  8. install:需要复制到根目录的文件存放在这里
  9. language:语言包
  10. logs:日志文件存放的地方
  11. smarty:阉过的smarty相关程序在这里
  12. templates:后台模板文件夹
  13. templates/ak:或者是别的前台模板文件夹
  14. templates_c smarty:模板生成的临时文件在这里
  15. themes:下载的风格放在这个文件夹里可以导入
  16. tools:工具程序放在这里
  17. 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

再刷新后台即可看到左侧菜单中增加了百度搜狐两个项目。

Akcms09.jpeg

利用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();