web development blog

> 编程 ZurmoCRM 如此纠结你hold得住吗?

 
Zurmo 是一个开源的客户关系管理(CRM)系统,是Yii框架和RedBeanPHP实现的。
 
开发环境:
PHP5.4.30
Zurmo version 2.8.4
 |--Yii 1.1.13
 |--RedBeanPHP ORM 3.2
 
为何纠结?
 
在PHP 开源CRM系统中搭建测试几款crm应用,有悟空CRM(国产),SugarCRM,X2Engine(也是基于Yii开发),CiviCRM等。
 
因为本身对Yii框架比较了解,就在Zurmo和X2Engine上徘徊。喜欢Zurmo的风格,多屏自适应,简洁大方,问题就是速度有点卡卡的,可能是没开启APC的原因,只是用了memcached缓存。而X2Engine相对就没那么高大上,可是比较容易上手,要二次开发比较容易。在一阵纠结后,我还是选择ZurmoCRM作为入手的CRM管理系统。
 

ZurmoCRM程序分析

 

1.他们在Yii的基础上重新封装了core代码,基本上算是废除了模板机制,都是动态控制输出页面结构;

2.他们把一个Page切割的很细,自己写了一套动态的渲染内核,页面的内容结构几乎都是程序生成最后拼接输出的;

3.他们的国际化也不是Yii的方式实现,而是存储在数据中,而且是blog字段保存,要修改也比较麻烦,而且他的更新也是直接从官方读取语言文件,然后写入数据库中。如果要改,则要切断更新,把语言文件下载下来,直接读取本地文件即可;

4.他们也重构了表单渲染模型,采用的是自定义form项对应于一个渲染的节点类的方式实现,这点很麻烦,渲染一个表单则需要联动很多个文件,涉及到多个类

 

ZurmoCRM扩展每个用户可以控制左侧菜单显示的栏目:

 

因为ZurmoCRM并没有实现可以控制每个用户可以访问的菜单,所有人都是一样的,它只是实现了菜单的排序。一开始觉得很简单,但是折腾起来才发现,Yii竟然被Zurmo的团队封装的这么让人纠结,面目全非,只能说I服了You!

 

实现方式:结果分析发现,zurmocrm有个表perusermetadata,是存储了用户的自定义数据,其中有个字段就是序列化的形式保存了菜单的排序,我就从这里入手。在序列化里面放入我们给用户自定义允许显示的菜单。在渲染菜单的时候,我们就截断,做一个匹配,重写菜单项,从而实现菜单显示控制。

 

最后实现在用户-设置-概况(全局)如下图

 

 

总结:

1.如果开启调试模式,debug.php切换成生成模式,怎要清除memcached,以及删除runtime目录,最好是重启一下web服务器,才可以看到效果,或者?clearCache=1清除一下缓存

2.默认语言设置在app/protected/core/models/ActiveLanguage.php

3.url路由控制访问,允许公开访问的路由列表在:app/protected/modules/zurmo/components/BeginRequestBehavior.php

4.最后就是破解

关于自己扩展模块,你会发现你render模板的时候会有zurmo的版权在你页面底部。

经过跟踪发现版权是由cleanAndSanitizeScriptHeader()函数实现,可是在整个应用你又找不到在哪里定义了这个函数?!

其实他采用了十六进制加密,把那个函数编译成一串16进制字符串,然后用eva()执行,从而隐藏了明文定义版权的作用。

知道原理,破解很简单,直接注释这句,或者到在yii框架中的CClientScript.php文件底部看看,你就会找到你想要的。

 

注:本文纯属技术交流,无其他目的。 请勿用于商业或其他非法用途,否则后果自负!

-留言评论-

  • 留言载入中...

-拍砖-

 

首页|前端技术|编程/php|生活|关于我

Copyright © 2012 wmhfly.com