Monthly Archives: 3月 2012

Vtiger中文文件名的文档上传下载失败

依然是中文编码问题,按以下修改即可。

1、修改 data/CRMEntity.php 中的 uploadAndSaveFile($id,$module,$file_details)方法代码:
$upload_status = move_uploaded_file($filetmp_name,$upload_file_path.$current_id.”_”.$binFile);
修改为
$upload_status = move_uploaded_file($filetmp_name,$upload_file_path.$current_id.”_”.urlencode($binFile));

2、修改 modules/uploads/downloadfile.php

注释掉 39 行:
//$name = html_entity_decode($name, ENT_QUOTES, $default_charset);

在 39行后增加一行代码:
$name=urlencode($name);

在 41 行新增:
$toChineseName = iconv(“utf-8″,”gb2312”,$name);

将52 行
header(“Content-Disposition: attachment; filename=$name”);
修改为
header(“Content-Disposition: attachment; filename=$toChineseName”);
在服务器上存储将中文编码后的 UTF-8 字符串,这样可以避免在不同类型服务器上出现字符乱码,在下载文件的时候,将文件用 GB2312 编码,这样做的原因是,有时候火狐不能识别 E6%BC%94%E8%AE%B2.docx 这样的编码而造成文件名重名不正确。

 

 

vtigercrm自定义的菜单项目

Vtiger CRM 的菜单设计为动态的,并且保存在数据库当中,很容易实现权限管理。

下面为在vtiger crm 5.2.1 上实现的菜单自定义的方法:

菜单定义后台数据库表主要为3个:

vtiger_tab —所有下拉子菜单信息
vtiger_parenttab —主菜单列表
vtiger_parenttabrel—-主菜单包含的子菜单列表

所有主菜单和子菜单尽在其中矣。

CREATE TABLE `vtiger_tab` (
`tabid` int(19) NOT NULL DEFAULT ‘0’,
`name` varchar(25) NOT NULL,
`presence` int(19) NOT NULL DEFAULT ‘1’,
`tabsequence` int(10) DEFAULT NULL,
`tablabel` varchar(25) NOT NULL,
`modifiedby` int(19) DEFAULT NULL,
`modifiedtime` int(19) DEFAULT NULL,
`customized` int(19) DEFAULT NULL,
`ownedby` int(19) DEFAULT NULL,
`isentitytype` int(11) NOT NULL DEFAULT ‘1’,
`version` varchar(10) DEFAULT NULL,
PRIMARY KEY (`tabid`),
UNIQUE KEY `tab_name_idx` (`name`),
KEY `tab_modifiedby_idx` (`modifiedby`),
KEY `tab_tabid_idx` (`tabid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8
CREATE TABLE `vtiger_tab` (
`tabid` int(19) NOT NULL DEFAULT ‘0’, ——————–菜单ID
`name` varchar(25) NOT NULL, ———菜单名字
`presence` int(19) NOT NULL DEFAULT ‘1’,1-屏蔽,0-显示,2–暂时未知
`tabsequence` int(10) DEFAULT NULL,———–tab 顺序
`tablabel` varchar(25) NOT NULL, ———–在界面显示的文字
`modifiedby` int(19) DEFAULT NULL,
`modifiedtime` int(19) DEFAULT NULL,
`customized` int(19) DEFAULT NULL,
`ownedby` int(19) DEFAULT NULL,
`isentitytype` int(11) NOT NULL DEFAULT ‘1’,
`version` varchar(10) DEFAULT NULL,
PRIMARY KEY (`tabid`),
UNIQUE KEY `tab_name_idx` (`name`),
KEY `tab_modifiedby_idx` (`modifiedby`),
KEY `tab_tabid_idx` (`tabid`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8

 

系统登陆后系统为通过下面的sql 语句来获取所有菜单的列表信息的:

select name,tablabel,parenttab_label,vtiger_tab.tabid from vtiger_parenttabrel inner join vtiger_tab on vtiger_parenttabrel.tabid = vtiger_tab.tabid inner join vtiger_parenttab on vtiger_parenttabrel.parenttabid = vtiger_parenttab.parenttabid and vtiger_tab.presence in (0,2) order by vtiger_parenttab.sequence, vtiger_parenttabrel.sequence
以下为以添加一个自定义菜单列为例子:

编辑根目录下的文件:

parent_tadata.php

 

$parent_tab_info_array=array(1=>'My Home Page',2=>'Customer Info',3=>'Sales',4=>'Support',5=>'Analytics',6=>'Inventory',7=>'Tools',8=>'Settings',10=>'my_add');
$parent_child_tab_rel_array=array(1=>array(3,9,),2=>array(6,4,7,9,),3=>array(7,6,4,9,),4=>array(15,6,4,9,),5=>array(25,1,),6=>array(),7=>array(30,),8=>array(),10=>array(9,));

后面的my_add 为我新添加进去的。

在数据库表vtiger_parenttab,添加一条记录:

11,”my_add”,11,0

 

添加一条记录到vtiger_parenttabrel

11,9,11

意思为该菜单下包含一个calander 的菜单列表tabid 为9

可以在表vtiger_tab中看到。

可以执行上面提到的sql 语句检查,可以找到新的定义菜单了。

修改include 下的语言定义文件,否则菜单 会显示为空,不能正常显示:

include/language/en_us.lang.php

‘my_add’ => ‘My Add define’,

 

到此,自定义的菜单项目就已经完成了。

从零开始使用Vtiger CRM进行客户关系管理

本章介绍VtigerCRM首页视图,系统初始化设置,及各种系统设置项。
一、VtigerCRM首页视图

在安装完成Vtiger CRM之后,就可以打开CRM地址,登陆系统;

登录VtigerCRM系统后,可以看到最新的Vtiger CRM系统 中文版标准视图。

从主菜单,我们可以看到Vtiger主要功能模块包括:市场营销、销售管理、售后服务,统计分析,产品管理,系统设置,本文下面主要就是介绍系统设置中的内容。
点击子菜单或主菜单的下拉菜单,可以进入对应模块列表页面,点击新增图标可以新增记录,点击查找图标,可以查找当前模块记录,点击导入图标,可以导入当前模块的记录,点击导出图标,可以导出当前模块的记录。
Continue reading

VtigerCrm报表导出乱码修复

根据上次讲解的导出CSV乱码修复教程,视图模式下导出的CSV文件,均可以正常显示中文,但报表导出EXCEL,依然乱码,修复方法如下:

打开modules\Reports\ReportRun.php,修改:3090行、3099行、3111行、3123行

$worksheet->write(0, $count, iconv("UTF-8", "GBK", $key) , $header);
//原来 $worksheet->write(0, $count, $key , $header);
$worksheet->write($key+1, $dcount, iconv("UTF-8", "GBK", $value));
//原来 $worksheet->write($key+1, $dcount, utf8_decode($value));
$worksheet->write($rowcount, $count, iconv("UTF-8", "GBK", $translated_str));
//原来 $worksheet->write($rowcount, $count, $translated_str);
$worksheet->write($key+$rowcount, $dcount, iconv("UTF-8", "GBK", $value));
 //原来 $worksheet->write($key+$rowcount, $dcount, utf8_decode($value));