ECMall二次开发文档-ecmall模板教程
- 格式:doc
- 大小:66.00 KB
- 文档页数:13
接口开发文档一、开发包目录结构1.1demo 文件夹包含了sdk 接口调用源代码,可供二次开发参考。
使用 C++开发的 MFC 程序。
1.2dll 文件夹包含了二次开发所需的所有动态库,demo 编译好的e xe 文件需要放在该文件夹才可以运行。
1.3include 文件夹包含了二次开发所需要的头文件。
1.4lib 文件夹包含了二次开发所需要的l ib 静态库。
1.5DSS 二次开发指南(C++).pdf指导二次开发用户如何新建V S2005 工程运行d emo 文件夹中的d emo。
1.6Version.xmldpsdk 开发包的程序版本信息。
1.7常见问题解答.pdf二次开发常见问题以及解决方式。
1.8大华平台S DK 开发手册(C++版).chm二次开发接口使用说明。
二、术语和缩略语1、D PSDK:DSS 平台二次开发S DK 包2、C MS:中心管理服务3、D MS:设备管理模块4、d emo:程序示例(功能类似D SS 平台客户端)5、w eb 管理员端:在浏览器中输入D SS 平台的i p 即可打开管理员端6、C ameraID:通道i d,形如:10000010$1$0$07、D eviceID:设备i d三、Demo 操作方法3.1 运行d emo把“demo/bin/”目录下面的3个文件,如下图所示3.2 登陆平台登陆界面如图 1 所示,其中: IP:DSS 平台ip 地址;端口:9000;用户名:web 管理员端配置的用户;密码:web管理员端配置的用户对应的密码。
点击“登录”按钮,登陆平台。
登陆成功的界面如图2所示:1235图2主界面上图选中的 5个模块分别是:1、组织树;2、实时视频;3、本地录像;4、云台操作;5、执行结果。
3.3 主界面功能介绍3.3.1、组织树操作步骤:点击“加载所有组织结构”按钮加载组织结构是其他操作的前提,是为了获取 DSS平台上所有的设备信息。
企业应用集成工具(EAI)二次开发1.概述U850企业应用集成工具(EAI)是U850与外部系统的数据接口,EAI提供了一些组件,可以在这些组件的基础上进行二次开发(以下简称“EAI二次开发”),实现与外部系统的集成。
不同系统集成的关键是遵循共同的数据标准,U850根据自己系统提出了一套数据标准,包括各种单据和基础档案,外部系统如果要和U850集成则必须遵循这一标准。
这套标准用XML 描述,因此数据流都为XML格式。
EAI二次开发可分为两种模式:注意:文中所有编程都以VB为例一、直接利用EAI管理工具。
在开始菜单中选择企业应用集成工具,登录企业应用集成主界面。
在这里可以将U850数据以标准XML文件的形式导出U850数据库或将标准XML数据文件导入U850系统。
二次开发程序员只需编写一个工具将标准XML数据文件进行适当转换写入外部系统或取出外部系统数据写成标准XML数据文件。
(参看EAI安装目录\xml\Samples\下的例子)数据流程如下:这种开发模式比较简单,优点是:充分利用EAI工具提供的功能,编程简单;缺点是:只能提供批量导入导出功能。
二、利用EAI提供的组件,进行灵活的二次开发。
包括两种方式:本地COM方式、Internet方式。
1)本地COM方式:这种方式可根据开发者的需要批量处理或者实时处理。
接口调用非常简单,简化了编程。
开发者只需将标准数据传入接口,如下:Set Obj=CreateObject(U8Distribute.iDistribute)Str = obj. Process(sXml)sXml为标准数据串,具体格式后面会说明。
2)Internet方式:http.Open "Post",http_name & “import.asp", True //指定服务器ASPhttp.send dom.xml //把xml数据发送到服务器端strRet= http.responseText //strRet :返回的xml格式的回执信息2.数据格式标准EAI可以导入导出的数据范围包括:Ø总帐§凭证§银行对账单Ø工资管理§人员档案§工资项目数据Ø固定资产§固定资产卡片Ø成本管理§材料消耗数据Ø资金管理§资金内部结算单Ø应收管理§应收单§收款单Ø应付管理§应付单§付款单Ø采购管理§采购订单§采购到货单§采购发票Ø销售管理§销售订单§发货单§销售发票§销售发票_导入到内部结算单Ø库存管理§入库单§出库单§库存量Ø基础档案§部门档案§职员档案§地区分类§客户分类§客户档案§供应商分类§供应商档案§存货分类§存货档案§结算方式§付款条件§开户银行§仓库档案§收发类别§销售类型§计量单位§计量单位组§产品结构§采购类型§成套件§费用项目§发运方式§货位档案§自定义项档案§项目§会计科目§外币§凭证类别§常用摘要提示:EAI安装目录\xml\Operation\dir.xml保存了相关定义下面一个例子是从U8导出的部门档案的片断:<?xml version="1.0" encoding="gb2312" ?><ufinterface sender="001" receiver="u8" roottag="department" docid=".533424" proc="Query" codeexchanged="N" exportneedexch="N" display="部门档案" family="基础档案" billtype=""> <department><code>1</code><endflag>0</endflag><name>综合处</name><rank>1</rank><manager/><prop>管理兼技术</prop><phone/><address/><remark/><creditline/><creditgrade/><creditdate/><offergrade/><offerrate/></department><department><code>109</code><endflag>1</endflag><name>厂办公室</name><rank>2</rank><manager/><prop>管理</prop><phone/><address/><remark/><creditline/><creditgrade/><creditdate/><offergrade/><offerrate/></department>…………</ufinterface>EAI中所有的标准数据文件都有类似于上例的结构,首先,有一个名为ufinterface的元素,ufinterface再有若干个子元素组成,不同应用的子元素有不同的格式。
ECSHOP 模板结构说明(适用版本v2.1.5+)名称类型备注(作用或意义)文件(目录)名可否更改images 目录存放模板图片目录不可更改library 目录存放模板库文件目录不可更改screenshot.png 图片用于“后台管理-> 模板管理-> 模板选择”显示模板缩略图。
不可更改style.css css样式表不可更改备注:模板文件共32个(格式:.dwt)。
提醒:1, 更改模板文件里面库文件的内容是无效的,页面刷新时,程序自动重新载入库文件内容到模板文件里(以库文件内容为准)。
2, 模板内所有id值为ECS_ 开头的都必须保留(和ajax相关)。
3, 非库文件内容不可放置到可编辑区域内,否则设置模板时,非库文件内容将被覆盖删除。
activity.dwt 模板文件活动列表页不可更改article.dwt 模板文件文章内容页不可更改article_cat.dwt 模板文件文章列表页不可更改article_pro.dwt 模板文件文章内容页(如免责声明等) 不可更改auction.dwt 模板文件拍卖商品详情页不可更改auction_list.dwt 模板文件拍卖商品页不可更改brand.dwt 模板文件商品品牌页不可更改brand_list.dwt 模板文件商品品牌列表页不可更改catalog.dwt 模板文件所有分类页不可更改category.dwt 模板文件商品列表页不可更改compare.dwt 模板文件商品比较页不可更改flow.dwt 模板文件购物车和购物流程页不可更改gallery.dwt 模板文件商品相册页不可更改goods.dwt 模板文件商品详情页不可更改group_buy_goods.dwt 模板文件团购商品详情页不可更改group_buy_list.dwt 模板文件团购商品列表页不可更改index.dwt 模板文件首页不可更改message.dwt 模板文件信息提示页不可更改message_board.dwt 模板文件留言板页不可更改myship.dwt 模板文件我的配送页不可更改pick_out.dwt 模板文件选购中心页不可更改quotation.dwt 模板文件报价单页不可更改receive.dwt 模板文件收货确认信息页不可更改respond.dwt 模板文件在线支付结果提示信息页不可更改search.dwt 模板文件商品搜索页不可更改snatch.dwt 模板文件夺宝奇兵页不可更改tag_cloud.dwt 模板文件标签云页不可更改topic.dwt 模板文件专题前台页不可更改user_clips.dwt 模板文件用户中心页(包含:欢迎页,我的留言,我的标签,收藏商品,缺货登记列表,添加缺货登记。
ecmall方法文档ecmall/eccore /ecmall.php常量:define('START_TIME', ecm_microtime());/* 判断请求方式*/define('IS_POST', (strtoupper($_SERVER['REQUEST_METHOD']) == 'POST'));//判断请求方式是不是post传来的./* 判断请求方式*/define('IN_ECM', true);/* 定义PHP_SELF常量*/define('PHP_SELF', htmlentities(isset($_SERVER['PHP_SELF']) ? $_SERVER['PHP_SELF'] : $_SERVER['SCRIPT_NAME']-));/* 当前ECMall程序版本*/define('VERSION', '2.2 beta');/* 当前ECMall程序Release */define('RELEASE', '20091230');类ECMall方法startup(config = array())类object方法_error($msg,$obg = '')has_error()//检测是否存在错误get_error()//获取错误列表类Lang方法&get($key='')//获取指定键的语言项load($lang_file)//加载指定的语言至全局语言数据中fetch($lang_file)//获取一个语言文件的内容lang_file($file)类Conf方法load($conf)get($key = '')&v($is_new = false, $engine = 'default')//获取试图连接&m($model_name, $params = array(), $is_new = false)//获取一个模型&bm($model_name, $params = array(), $is_new = false)//获取一个业务模型c(&$app)//获取当前控制器实例&cc()import()//导入一个类strtokey($str,$owner = '')//将default.abc类的字符串转为$default['abc'];trace($var)//跟踪调试dump($arr)//rdump的别名rdump($arr)//格式化显示出变量vdump(arr)//格式化并显示出变量类型&db()//创建MySQL数据库对象实例get_domain()//获得当前的域名size_url()//获得网站的URL地址sub_str($string, $length = 0, $append = true)//截取UTF-8编码下字符串的函数real_ip()//获得用户的真实IP地址is_email($user_email)//验证输入的邮件地址是否合法is_time($time)//检查是否为一个合法的时间格式gd_version()获得服务器上的GD 版本addslashes_deep($value)//递归方式的对变量中的特殊字符进行转义addslashes_deep_obj($obj)//将对象成员变量挥着输注的特殊字符进行转义stripslashes_deep($value)//递归方式的对变量中的特殊字符进行转义make_semiangle($str)//将一个字符中含有拳脚的数字字符/字母/空格或'%+-()'字符转换为响应半角字符format_fee($fee)//格式化费用:可以输入数字或百分比的地方compute_fee($amount,$rate,$type)//根据总金额和费率计算费用real_server_ip()//获取服务器的IPget_crlf()//获取用户操作系统的换行符;ecm_iconv($source_lang, $target_lang, $source_string = '')//编码转换函数ecm_json_encode($value)ecm_josn_decode($value,type = 0)get_object_vars_deep($obj)//返回由对象属性著称的关联数组file_ext($filename)db_create_in($item_list,$field_name = '')//创建像这样的查询:"IN('a','b')"ecm_mkdir($absolute_path, $mode = 0777)//创建目录(如果该目录的上级目录不存在,会先创建上级目录),依赖于ROOT_PATH 常量,且只能创建ROOT_PATH 目录下的目录目录分隔符必须是/ 不能是\ecm_rmdsir($dir)//删除目录,不支持目录中带..price_format($price, $price_format = NULL)ecm_setcookie($key, $value, $expire = 0, $cookie_path=COOKIE_PATH, $cookie_domain=COOKIE_DOMAIN)//设置cookieecm_getcookie($key = '')//获取COOKIE的值ecm_iconv_deep($source_lang,$target_lang,$value)//对数组转码ecm_fopen($url, $limit = 500000, $post = '', $cookie = '', $bysocket = false, $ip = '', $timeout = 15, $block = true)//fopen封装函数html_filter($html)//危险HTML 过滤器clean_cache()//清理系统所有编译器文件,缓存文件,模板结构数据trim_right($str)//去掉字符串右侧可能出现的乱码_at($fun)//通过该函数运行函数可以抑制错误outer_call($func, $params=null)//调用外部函数reset_error_handler()is_from_browser()//返回是否是通过浏览器访问的页面ecm_define($source)//从文件或数组中定义常量ecm_microtime()//获取当前的微秒数ecmall/eccore/model/model.base.php//除本基类文件外,所有的模型类的类名的构造规则应该是模型名(首字母大写)+model 组成,文件名必须是模型名+.model组成如有一个用户模型,模型名为user,则其文件名应为user.model.php,类名为UserModel类:BaseModel extends Obiect属性:var $db = null;/* 所映射的数据库表*/var $table = '';/* 主键*/var $prikey= '';/* 别名*/var $alias = '';/* 模型的名称*/var $_name = '';/* 表前缀*/var $_prefix = '';/* 数据验证规则*/var $_autov = array();/* 查询统计*/var $_last_query_count = -1;/* 临时保存已删除的数据*/var $_dropped_data = array();/* 关系(定义关系时,只有belongs_to以及has_and_belongs_to_many需要指定reversevar $_relation = array();方法:__construct($params,$db)BaseModel($params,$db)getName()//获取模型名称get($params)//获取单一一条记录get_unfo($id)//根据ID取得信息find($params = array())//根据一定条件找出相关数据(不连接其他模型,直接通过JOIN 语句来查询)findAll($params = array())//关联查找关于多对多关系的记录getRelatedDate($relation_name, $ids, $find_param = array())//获取一对多,多对多的关联数据add($data, $compatible = false)添加一条记录createRelation($relation_name, $id, $ids)//添加多对多关联的中间表关系数据updateRelation($relation_name, $id, $ids, $update_values)//更新多对多关系中的关系数据unlinkRelation($relation_name, $conditions, $ids = null)//去除多对多的关联连接_relationLink($action,$relation_name,$id,$ids,$update_values = array())//多对多关联表操作edit($conditions, $edit_data)//简化更显操作drop($conditions, $fields = '')简化删除记录操作dropDependentData($keys)//删除依赖数据_getExtLimit($ext_limit, $alias = null)//获取扩展限制getDroppedDate()//获取实时保存的已删除记录getCount()//获取统计数_saveDroppedDate($sql)//临时保存已删除的记录数据_updateLastQueryCount($sql)//更新查询统计数_getConditions($conditions,$if_add_alias = false)//获取条件语段_getSetFields($date)//获取设置字段getRealFields($src_fields_list)//获取查询时的字段列表_getFieldTable($owner)//解析字段所属_getInsertInfo($data)//获取插入的数据的sql_valid($data)//验证数据合法性,当时验证vrule中指定的字段,并且只当$date中这支了其值是才验证_initFindParams($params)_joinModel(&$table,$join)//按指定的方式LEFT,JOIN指定关系的表_getHoinString($relation_info)getRelation($relation_name = null)//获取关系信息getRelationByType($relation)assemble($relation_name,$assoc_date,$pri_date)dateEnough($date)getRequiredFields()//获取必须的字段列表* 用于统计*/function getOne($sql){return $this->db->getOne($sql);}function getRow($sql){return $this->db->getRow($sql);}function getCol($sql){return $this->db->getCol($sql);}function getAll($sql){return $this->db->getAll($sql);}ecmall/eccore/model/mysql.php类cls_mysql方法__construct($params,$db)cls_mysql()//db构造函数connect($dbhost, $dbuser, $dbpw, $dbname = '', $charset = 'utf8', $pconnect = 0, $quiet = 0)//连接数据库select_database($dbname)set_mysql_charset($charset)fetch_array($charset)query($sql,$type = '',$times=0)function prefix($sql){return preg_replace('/\s\`ecm_(.+?)\`([,|\s]?)/', ' ' .DB_PREFIX. '$1$2', $sql);}function affected_rows(){return mysql_affected_rows($this->_link_id);}function error(){return mysql_error($this->_link_id);}function errno(){return mysql_errno($this->_link_id);}function result($query, $row){return @mysql_result($query, $row); }function num_rows($query){return mysql_num_rows($query);}function num_fields($query){return mysql_num_fields($query);}function free_result($query){return mysql_free_result($query);}function insert_id(){return mysql_insert_id($this->_link_id); }function fetchRow($query){return mysql_fetch_assoc($query);}function fetch_fields($query){return mysql_fetch_field($query);}function version(){return $this->version;}function ping(){if (PHP_VERSION >= '4.3'){return mysql_ping($this->_link_id);}else{return false;}}function escape_string($unescaped_string){if (PHP_VERSION >= '4.3'){return mysql_real_escape_string($unescaped_string);}else{return mysql_escape_string($unescaped_string);}}function close(){return mysql_close($this->_link_id);}ErrorMsg($message = '',$sql = '')selectLimit($sql,$num,$start = 0)//仿真Adodb 函数getOne($sql,$limited = false)getOneCache($sql,$cached = 'FILEFIRST')getAll($sql)getAllWithIndex($sql_statement,$index_key)//以主键索引形式返回结果集getAllCached($sql, $cached = 'FILEFIRST')getRow($sql,$limited = false)getRowCached($sql,$cached = 'FILEFIRST')getCol($sql)getColCached($sql,$cached = 'FILEFIRST')autoExecute($table,$field_values,$mode = 'INSERT',$where = '',$querymode = '')autoReplace($table,$field_values,$update_values,$where = '',$querymode = '')setMaxCacheTime($second)getMaxCacheTime()getSqlCacheData($sql,$cached = '')//获取数据记录集缓存setSqlCacheData($result,$data)table_lastupdate($tables)//获取SQL 语句中最后更新的表的时间,有多个表的情况下,返回最新的表的时间get_table_name($query_item)set_disable_cache_tables($tables)//设置不允许缓存的表ecmall/eccore/model/template.php类ecsTemplate方法__constructecsTemplateassign($tpl_var,$value = '')display($filename,$cache_id = '')//显示页面函数display_cache()//显示缓存数据fetch($filename,$cache_id = '')//处理模板文件make_compiled($filename)//编译模板函数fetch_str($source)is_cached($filename,cache_id = '')select($tag)//处理()标签get_val($val)//处理smarty标签中的变量标签make_var($val)//处理去掉$的字符&get_tempalte_vars($name = null)_compile_if_tag($tag_args,$elseif = false)_compile_foreach_start($tag_args)push_vars($key,$val)//将foreach的key,item放入临时数组pop_vars()//弹出临时数组的最后一个_compile_smarty_ref(&$indexes)//处理smarty揩油的预定义变量Java_script($args)//脚本标签style($args)//样式标签smarty_prefilter_preCompile($source)//替换模板中图片路径url_rewrite($arr)// 返回URL重写后的字符串/* 处理动态模板*/insert_mod($name)//处理动态内容str_trim($str)//处理'a=b c=d k=f'类字符串,返回数组_eval($content)_require($filename)_html_options($arr)display_widgets($arr)html_radion($arr)html_checkbox($arr)html_page_links($arr)_init_page_param($arr)html_page_selector($arr)html_page_simple($arr)html_img_yesorno($arr)html_sort_link($arr)cycle($arr)image($arr)make_array($arr)smarty_create_pages($pagams)get_custom_model($id,$dir)//获取自定义模块get_lang($key)//编译时解析语言_sprintf($arr)//解析sprinf标签ecmall/eccore/model/template.php控制器基础类BaseApp extends Object方法_constructBaseAppdo_actionindexassign($k, $v = null)//给视图传递变量display($n)//显示视图_init_view()//初始化视图连接_config_view()//配置视图_run_action()//运行动作_init_session()//初始化Session_get_run_time($precision = 5)//获取程序运行时间destruct()//控制器结束运行后执行import_from_csv($filename,$header = true,$from_charset = '',$to_charset = '',$delimiter = ',')export_to_csv($data,$filename,$to_charset = '')//导出csv文件_replace_special_char($str,$replace = true)ecmall/eccore/model/message.base.php消息接收方法_trigger_message($arr)show_message($msg)show_warning($msg)_message($msg,$type)exception_handler($errno,$errstr,$errfile,$errline)put_log($err,$msg,$file,$line)//写入log文件类Message extends MessageBase方法_construct($str='',$errno=null)Message($str,$errno = null)handle_meassage($msg)report_link($err,$msg,$file,$line)//生成bug报告连接add_link($text,$href='javascript:history.back()')//添加一个连接到消息页面display()//显示消息页面。
二次开发培训文档一、ECOLOGY系统框架结构1、主要的程序结构EcologyClassbean 存放编译后的CLASS文件js 系统中使用的JA V ASCRIPT和VBSCRIPT脚本Css 系统中JSP页面使用的样式ImagesImages_faceImages_frame 系统中使用的图片的存放目录CrmWorkflow 该功能分文件夹存放每个功能的文件WEB-INFProp 系统配置文件存放Service 系统的接口配置文件的存放二、说明一个JSP页面,一个JA V A程序的基本组成,如何阅读JSP页面1、一个jsp页面通常需要包含什么内容2、如何阅读一个JSP页面由于ECOLOGY系统支持多语言,因此在JSP页面上一般不出现中文,全部使用标签的形式来显示中文:比如:在IE上显示“姓名”那么在JSP页面中将通过<%=SystemEnv.getHtmlLabelName(413,user.getLanguage())%>这样的形式来表示,其中的数字413就是表示姓名,同时可以通过“select labelname from htmllabelinfo where indexid=413 and languageid=7”来获取到“姓名”这个显示名称,其中languageid=7表示中文显示名称,languageid=8表示英文显示名称.delete from HtmlLabelIndex where id=81249delete from HtmlLabelInfo where indexid=81249INSERT INTO HtmlLabelIndex values(81249,'选择范围')INSERT INTO HtmlLabelInfo VALUES(81249,'选择范围',7)INSERT INTO HtmlLabelInfo VALUES(81249,'Range of choice',8)INSERT INTO HtmlLabelInfo VALUES(81249,'選擇範圍',9)3、JA V A程序的基本组成在ECOLOGY中开发JA V A程序建议继承weaver.general. BaseBean,在BaseBean 中主要封装了两个方法:写日志文件,获取配置文件中的参数值。
ecshop二次开发手册【基本结构】【基本熟悉】前言:ECSHOP是一套完整的网络商店解决方案,包括前台的商品展示、购物流程和强大易用的后台管理。
由于ecshop简单易用,使用者几乎可以在3几分钟简单的设置一下就可以拥有一个网上商店系统,所以很多的B2C站点都选择了使用ECShop网上商店系统,但是有时候我们需要做一些ecshop本来没有的功能或者前端展示,这时候就需要我们自己去进行对ecshop的二次开发了。
一、ecshop系统功能二次开发ecshop的代码结构非常易懂,只有有一点php基础都可以在原有的程序基础上进行修改,或功能插件的开发。
ecshop中的一些公用函数都会放在includes文件夹里,而这些公用函数几乎我们都可以用来参照一下就能轻松做出我们想要的其他功能了。
我们要对ecshop进行二次开发,简单来说其实就是对数据库的读写操作,所以只要我们读懂ecshop的数据库操作类,接下来的实现就很轻松了。
ecshop的数据库操作类是很强大的,一些常用的函数如下:1.获取单条记录$GLOBALS['db']->getRow($sql);2.获取单一字段$GLOBALS['db']->getOne($sql);例如查询产品总数:echo $GLOBALS['db']->getOne(…SELECT COUNT(*) FROM … .$GLOBALS['ecs']->table(…goods‟) ;3.获取所有记录$GLOBALS['db']->getAll($sql);4.执行sql语句$GLOBALS['db']->query($sql);//执行删除(DELETE),插入(INSERT),更新(UPDATE)等操作可用此方法5.把数组元素插入数据库$parent['goods_number'] = ‟1′;$parent['parent_id'] = 0;$GLOBALS['db']->autoExecute($GLOBALS['ecs']->table(…cart‟), $parent, …INSERT‟);基于此基础上就能轻松进行ecshop二次开发了。
二次开发手册业务流程定制1.基础业务单据方案定义基础业务单据适用于采用主-明细结构的业务流程,主表和明细表为一对多的关系,并通过一个字段关联(一般为DJID),如采购入库单、处方划价单等。
如图:1.1方案总体方案编号:业务方案的编号,每个方案都有一个编号,编号不能重复。
方案名称:方案的名称,同时也是方案窗体的标题。
单据标识: 单据编号的开头部分单据编号长度: 单据编号的总长度单据编码格式: YYYY 代表四位的年,YY代表两位的年,MM:两位月,DD:两位日,CZY:操作员编号,用'+'号连接各个部分也可使用固定字符。
如:'SFD'+YYYY+MM+DD ,设置编码格式后单据标识不起作用,但同样受到编号长度的约束。
主明细关键字段: 定义主表和明细表的关键字段,一般为'DjID'明细序号字段: 定义明细表的序号字段,一般为'Xh'(如图:)1.2基础业务单据方案主要构成要素:主表SQL: 定义单据数据主表的数据来源的SQL语句。
主表用来存储单据主体数据,如单据编号、日期、操作员、以及明细表的汇总信息等。
明细表SQL: 定义单据明细数据来源的SQL语句。
明细表用来存储明细数据一次检索SQL: 定义辅助明细数据输入的检索数据来源的SQL语句;一次检索数据只作为数据的来源,不存储数据。
插入明细数据时,扫描明细数据字段和检索数据字段,如果字段名称相同则将检索数据写入该字段。
二次检索SQL: 定义在一次检索完成之后的辅助明细数据输入的检索数据来源的SQL语句;是一次检索的补充。
比如做门诊收费功能时用做选择处方。
保存执行SQL: 定义单据在保存时执行的SQL语句。
1.3相关设置:显示一次检索:设置是否显示检索栏。
(有的业务单据不需要检索栏)数字码字段:当输入框中输入纯数字时,将以设置的数字码字段进行动态查找汉字码字段:当输入框中含有汉字时,将以设置的汉字码字段进行动态查找拼音码字段:当输入框中为字母时,将以设置的拼音码字段进行动态查找条形码字段:当输入框中为输入条码时,将以设置的条形码字段定位检索数据二次检索输入提示:设置二次检索时的输入提示二次检索后结束输入:设置是否在二次检索后结束输入(具体参看图形)1.4打印设置报表名称:打印样式的文件名,不用加后缀单据SQL语句:打印数据来源的SQL语句保存后默认打印:设置保存后是否默认为打印1.5颜色设置明细网格显示选项背景色:指定明细网格的背景色,默认为白色行醒目显示条件:定义明细数据行醒目显示的条件,当满足条件时,该行将以指定的颜色显示。
在ECSHOP会员中心实现物流跟踪或包裹跟踪(非jquery版)前些日子,本站已经发表过一篇讲述“在ECSHOP会员中心集成物流跟踪或快递跟踪功能”的文章,不过以前那个方法用到了 jquery 。
今日公布的这个教程是不用JQUERY的方法。
下面是具体的修改教程:1)、首先下载物流跟踪插件 ecshop_express.rar,点击这里下载将它下载到你网站根目录的 plugins 子目录中,然后右键点击 ecshop_express.rar 文件,选择 "解压到 ecshop_express " ,解压后 ecshop_express 子目录下应该只存在两个文件: express.php 、snoopy.php2)、以下修改是以官方默认模板为例,其他模板本文不做讲解,请自行对照解决。
打开 /themes/default/user_transaction.dwt 文件将{$order.invoice_no}修改为<b id="shipping_name">{$order.shipping_name}</b> <bid="invoice_no">{$order.invoice_no|strip_tags}</b>接着,将<!--{if $order.to_buyer}-->修改为至此,大功告成,是不是比那个使用JQUERY的方法还简单。
到后台订单里发布一个运单号去看一下效果吧,下面是我在自己网站测试的效果在Ecshop商品详情页的本店售价中显示当前登录会员的等级价格问题描述:会员登录状态下,在ECSHOP商品详情页的本店售价中显示当前登录会员对应的等级价格,在未登录状态下,则还默认显示原来的本店售价。
解决方法:这个需要修改ECSHOP程序代码来实现。
其实也非常简单,只需要修改一行代码即可。
ecshop二次开发手册【基本结构】【基本熟悉】前言:ECSHOP是一套完整的网络商店解决方案,包括前台的商品展示、购物流程和强大易用的后台管理。
由于ecshop简单易用,使用者几乎可以在3几分钟简单的设置一下就可以拥有一个网上商店系统,所以很多的B2C站点都选择了使用ECShop网上商店系统,但是有时候我们需要做一些ecshop本来没有的功能或者前端展示,这时候就需要我们自己去进行对ecshop的二次开发了。
一、ecshop系统功能二次开发ecshop的代码结构非常易懂,只有有一点php基础都可以在原有的程序基础上进行修改,或功能插件的开发。
ecshop中的一些公用函数都会放在includes文件夹里,而这些公用函数几乎我们都可以用来参照一下就能轻松做出我们想要的其他功能了。
我们要对ecshop进行二次开发,简单来说其实就是对数据库的读写操作,所以只要我们读懂ecshop的数据库操作类,接下来的实现就很轻松了。
ecshop的数据库操作类是很强大的,一些常用的函数如下:1.获取单条记录$GLOBALS['db']->getRow($sql);2.获取单一字段$GLOBALS['db']->getOne($sql);例如查询产品总数:echo $GLOBALS['db']->getOne(‘SELECT COUNT(*) FROM ‘ .$GLOBALS['ecs']->table(‘goods’) ;3.获取所有记录$GLOBALS['db']->getAll($sql);4.执行sql语句$GLOBALS['db']->query($sql);//执行删除(DELETE),插入(INSERT),更新(UPDATE)等操作可用此方法5.把数组元素插入数据库$parent['goods_number'] = ’1′;$parent['parent_id'] = 0;$GLOBALS['db']->autoExecute($GLOBALS['ecs']->table(‘cart’), $parent, ‘INSERT’);基于此基础上就能轻松进行ecshop二次开发了。
ecshop 订单快递单批量打印二次开发教程教程开始: 1.admin\templates\order_list.htm ,在1 <input name="print" type="submit" id="btnSubmit4" value="{$lang .print_order}" class="button" disabled="true" onclick="this.for m.target = '_blank'" />后,添加1 <input name="print_shopping" type="submit" id="btnSubmit6" valu e="批量打印快递单" class="button" disabled="true" onclick="this.form.target = '_blank'" />2.admin\order.php ,在1 2 /* 去发货 */elseif (isset($_POST['to_delivery']))前,添加//批量打印快递单elseif (isset($_POST['print_shopping'])){$region_array = array();$region_id = !empty($_CFG['shop_country']) ? $_CFG['shop_country'] . ',' : '';$region_id .= !empty($_CFG['shop_province']) ? $_CFG['shop _province'] . ',' : '';$region_id .= !empty($_CFG['shop_city']) ? $_CFG['shop_city'] . ',' : '';$region_id = substr($region_id, 0, -1);$region = $db->getAll("SELECT region_id, region_name FR OM " . $ecs->table("region") . " WHERE region_id IN ($region_id )");if (!empty($region)){foreach($region as $region_data){$region_array[$region_data['region_id']] = $region_data['reg ion_name'];}}$smarty->assign('shop_name', $_CFG['shop_name']);$smarty->assign('province', $region_array[$_CFG['shop_pro vince']]);$smarty->assign('city', $region_array[$_CFG['shop_city']]);$smarty->assign('shop_address', $_CFG['shop_address']);$smarty->assign('service_phone',$_CFG['service_phone']);//以上是系统参数$order_sn_list = array();$order_sn_list = explode(',', $_POST['order_id']);foreach ($order_sn_list as $order_sn){/* 取得订单信息 */$order = order_info(0, $order_sn);$smarty -> assign('order',$order);$shipping = $db->getOne("SELECT * FROM " . $ecs->table( "shipping") . " WHERE shipping_id=" . $order['shipping_id']);if (empty($shipping['shipping_print'])){echo $smarty->fetch("str:" . $shipping['shipping_print']);}else{$shipping_code = $db->getOne("SELECT shipping_code FR OM " . $ecs->table('shipping') . " WHERE shipping_id=" . $order[ 'shipping_id']);if ($shipping_code){include_once(ROOT_PATH . 'includes/modules/shipping/' . $ shipping_code . '.php');}if (!empty($_LANG['shipping_print'])){echo $smarty->fetch("str:$_LANG[shipping_print]");}else{echo $_LANG['no_print_shipping'];}}}exit;}3.这是最重要的一点,其他地方根本没说过,害得作者君我折腾了两三天。
ecshop订单操作的状态对应的值ecshop电子商务系统中,ECSHOP的订单有很多的状态。
这些状态,是维持和保证ECSHOP后台操作订单状态转换的依据。
order_status=0表示订单未确认order_status=1表示订单已经确认order_status=2表示订单已经取消pay_status=0表示未付款pay_status=2表示已付款shipping_status=3表示已配货shipping_status=1表示已发货shipping_status=2表示已收货总结以上ecshop订单的状态,方便开发人员总结开发操作。
、Ecshop前台显示已售出的数量category.php下面的category_get_goods函数中foreach循环添加$arr[$row['goods_id']]['count']=selled_count($row['goods_id']);文件的最后部分添加函数function selled_count($goods_id){$sql="select sum(goods_number)as count from ".$GLOBALS['ecs']->table('order_goods')."where goods_id='".$goods_id."'";$res=$GLOBALS['db']->getOne($sql);if($res>0){return$res;}else{return('0');}}模板goods_list.lbi<a href="javascript:;"id="compareLink"html"}','{$goods.type}')"class="f6">{$pare}</a>下添加销售量:{$goods.count}如何轻松实现ecshop不同商品调用不同模板我们这里就按照分类来调用模板假如有4个分类CAT_ID为1234对应的模板goods.dwt goods1.dwt goods2.dwt goods3.dwt那麽在goods.php中找到$smarty->display('goods.dwt',$cache_id);switch($goods['cat_id']){case1:$smarty->display('goods.dwt',$cache_id);break;case2:$smarty->display('goods1.dwt',$cache_id);break;case3:$smarty->display('goods2.dwt',$cache_id);break;case4:$smarty->display('goods3.dwt',$cache_id);break;}如何将ecshop会员注册页的E-MAIL由必填项改为非必填项看到论坛里有不少朋友发帖询问解决办法,故共享之。
二次开发报告模板篇一:二次开发合同拟稿二次开发合同甲方(盖章):乙方(盖章):授权代表签字:日期:年月日授权代表签字:日期:年月日附注:1、请加盖骑缝章,否则视为合同未签署或生效。
2、甲乙双方的签字代表应为法定代表人或授权代表。
一、项目要求1、项目名称:2、开发内容:3、技术指标二、成果交付1、研究开发成果交付的内容:文档:软件产品:2、交付形式、数量文档:电子文档份,纸质文档份。
软件产品:以当面形式提交正式软件,原件份。
3、研究开发成果交付的时间:乙方于本合同签订生效后将研究开发成果交付至交货地点。
4、研究开发成果交付的地点:。
三、系统验收1、系统安装调试完毕后,由甲方组织进行一次系统测试,测试通过后出具测试报告,同时进行系统验收,由双方授权代表确认签署《软件二次开发验收单》,乙方同时提供相关成果交付物。
2、如系统最终验收不合格,则乙方应在甲乙双方共同确认的工作日内修改完毕,并经甲方签字确认后验收合格,若甲方验收仍未通过,则按乙方违约责任处理。
四、服务费用与付款方式1、二次开发服务费用的计价方式:二次开发服务费用= 。
2、本项目二次开发服务费用:人*天,即元,大写:元整。
3、付款方式:甲方于本合同生效之日起的个工作日内,向乙方支付本合同总费用的%,即元,大写:。
在甲乙双方签字确认,乙方依据甲方开发需求完成附件一中的所有开发项目并通过甲方测试验收之日起的个工作日内,甲方向乙方支付本合同项下费用的%,即人民币元整,大写:元整。
在甲乙双方签字确认,乙方完成本合同约定的所有开发项目并由甲方实际无问题运行个工作日后即通过项目总体验收。
通过项目总体验收之日起的个工作日内,甲方向乙方支付本合同项下全部费用的%,即人民币元整,大写:元整。
经乙方增值研发部门评估,以上的工作内容的实际开发量为人*天,经甲乙双方相互协调,及考虑到甲乙双方多次合作的情况下,将费用折扣为以上价格,乙方增值开发部门开发计划仍以天的工作内容安排。
ecshop模板修改!!!!!!ECshop 模板制作教程(转) 收藏授人以鱼,不如授人以渔,EC 就算作再多的模板,肯定也满足不了我们的需要,更何况各行有各行的门道,EC 统一做出来的模板也不一定合适于我们这个行业用,因此,只有我们真正掌握了自己做模板、修改模板的功夫,才能真正的打造适合自己的电子商务平台,真正打造符合自己行业内的客户习惯的电子商务平台。
本教程适用于了解ECshop 和ECshop 模板DIY 以及它们的日常使用,在查看前阁下需要至少会使用一种编辑器(exp:Dreamweaver 、editplus 、emacs 、vi 、ee ... 意思就是可视化的html 编辑器或者直接文本编辑器,我在讲的时候用Dreamwaver 来讲,这样比较适合初学者和设计师)。
这个教程目前由我一个人维护,但我相信,过不了多久就会有多人持续地维护。
其中的内容需要不断地更新。
如果您有兴趣参加,嘿嘿,PM 我。
我们一起为大家服务啊。
通过对本教程的学习,只要您边看边跟着做,一定能够学会自己做模板的。
:)下列章节的适用于ECshop 程序。
同时这里许多内容和一些Smarty 相关。
假如您已经熟悉这些内容可跳过不阅读。
假如您是ECshop 新手并且想DIY 一下自己的店铺,那您应该认真详细地从头到尾读一遍下面章节。
(ps :大家不要紧张,我会尽量用人类的语言和大家交流,实在万不得已才会用机器语言展示给大家)希望大家能够通过本教程,想要什么模板都能自己做出来。
哈哈!一起加油吧!第一章ECshop 模板基础读取本部分内容,您将了解:☆每个前台页面所对应的模板页面,模板文件的目录结构。
☆一些最基本的ECshop 模板修改方法。
☆模板的路径以及相关包含文件的方法(深入了解Dreamweaver 模板制作)。
☆一些常用模板例子讲解。
模板存放路径:ecshop/themes/xxxxx 其中的xxxxx 就是某一套模板,如,系统一般会自带的模板文件名叫做default ,(即,ecshop/themes/default )里面放的就是安装时的默认模板,以下所有的说明都是针对默认模板来讲解。
Ecshop⼆次开发-增加⽤户订单编辑功能Ecshop⼆次开发,增加⽤户订单编辑功能(上)Ecshop是⼀款开源免费的⽹上商店系统。
功能很强⼤,但是也有很多的不⾜,不过幸好该系统是开源的,可以⾃⼰修改扩展很不错。
呵呵,下⾯就介绍⼀下我怎么扩展⽤户的订单编辑功能。
第⼀步:准备模版⽂件。
修改模板⽂件中的user_transaction.dwt。
在⽂件中增加⼀段⽤户显⽰⽤户编辑订单的界⾯模版,其实该模版可以从该⽂件中的详细订单显⽰界⾯模板修改过来,只要截取商品列表和费⽤总计部分就好!1、搜索””,在该代码的前⾯加⼊:编辑订单2、搜索“”,在其之前加⼊:{insert_scripts files=?transport.js?}修改订单{$goods.market_price}–>{$lang.goods_name}{$lang.goods_attr}{$lang.goods_price}{$lang.gb_deposit}{$lang.number}{$lang.subtotal}操作target="_blank">{$goods.goods_name}0} –>({$lang.accessories})({$/doc/9e69fc293169a4517723a33c.html rgess}){$goods.goods_attr|nl2br}{$goods.goods_price}{$goods.subtotal}{$lang.drop}{$lang.shopping_money}{$lang.gb_deposit}: {$order.formated_goods_amount}Submit费⽤总计{/if}{$lang.goods_all_price}{$lang.gb_deposit}: {$order.formated_goods_amount}- {$lang.discount}: {$order.formated_discount}+ {$lang.tax}: {$order.formated_tax}0} –>+ {$lang.shipping_fee}: {$order.formated_shipping_fee}0} –>+ {$lang.insure_fee}: {$order.formated_insure_fee}0} –>+ {$lang.pay_fee}: {$order.formated_pay_fee}0} –>+ {$lang.pack_fee}: {$order.formated_pack_fee}0} –>+ {$lang.card_fee}: {$order.formated_card_fee}0} –>- {$lang.order_money_paid}: {$order.formated_money_paid}0} –>- {$/doc/9e69fc293169a4517723a33c.html e_surplus}: {$order.formated_surplus}0} –>- {$/doc/9e69fc293169a4517723a33c.html e_integral}: {$order.formated_integral_money}0} –>- {$/doc/9e69fc293169a4517723a33c.html e_bonus}: {$order.formated_bonus}{$lang.order_amount}: {$order.formated_order_amount}{$lang.notice_gb_order_amount}{$/doc/9e69fc293169a4517723a33c.html e_more_surplus}:第⼆步、编辑user.php⽂件1、在$ui_arr 中加⼊"modify“.* 显⽰页⾯的action列表*/$ui_arr = array(?register?, …login?, …profile?, …order_list?, …modify…,?order_detail?, …address_list?, …collection_list?,'message_list?, …tag_list?, …get_password?, …reset_password?, …booking_list?, …add_booking?, …account_raply?,'account_deposit?, …account_log?, …account_detail?, …act_account?, …pay?, …default?, …bonus?, …group_buy?, …group_buy_detail?, …affiliate?, …comment_list?,'validate_email?,'track_packages?, …transform_points?);2、在下⾯所⽰代码中,增加$smarty->assign(?allow_to_modify?,1);/* 未发货,未付款时允许更换⽀付⽅式和修改订单*/if ($order['order_amount'] > 0 && $order['pay_status'] == PS_UNPAYED && $order['shipping_status'] == SS_UNSHIPPED){$payment_list = available_payment_list(false, 0, true);$smarty->assign(?allow_to_modify?,1);3、在“//删除订单中的商品”的⽅⾯,加⼊下载代码:/*修改订单*/elseif($action==?modify?){function multiArraySearch($needle, $haystack){$value = false;$x = 0;foreach($haystack as $temp){// print_r($temp);$search = array_search($needle, $temp);if (strlen($search) > 0 && $search >= 0){$value[0] = $x;//$value[1] = $search;}$x++;}return $value;}include_once(ROOT_PATH . …includes/lib_transaction.php?);include_once(ROOT_PATH . …includes/lib_payment.php?);include_once(ROOT_PATH . …includes/lib_order.php?);include_once(ROOT_PATH . …includes/lib_clips.php?);if($_REQUEST['do']=="del"){$oid=$_REQUEST['oid'];$gid=$_REQUEST['bid'];$sql="select goods_price,goods_number from ".$ecs->table("order_goods")." where goods_id=$gid";$result=$db->getrow($sql);$order = get_order_detail($oid, $user_id);//取得订单$sql="delete from ".$ecs->table("order_goods")." where goods_id=$gid and order_id=$oid";//删除商品$db->query($sql);$sql="select configure from ".$ecs->table("shipping_area")." where shipping_id=".$order['shipping_id'];$shipping_fee=$db->getrow($sql);$tempa=unserialize($shipping_fee['configure']);$shipping=multiArraySearch("free_money",$tempa);$free_money=$tempa[$shipping[0]]['value'];//找出免运费的额度$market_price=$order['goods_amount']-$result['goods_price']*$result['goods_number'];$inv_id=array_search($order['inv_type'],$GLOBALS['_CFG']['invoice_type']['type']);$rate= floatval($GLOBALS['_CFG']['invoice_type']['rate'][$inv_id])/100;$tax=$order['tax']-($result['goods_price']*$result['goods_number'])*$rate;$addpay_fee=pay_fee($order['pay_id'],$result['goods_price']*$result['goods_number']);//删除的⽀付费⽤$pay_fee=$order['pay_fee']-$addpay_fee;$order_amount=$market_price-$discount+$tax+$pay_fee;$shipping_fee=$order['shipping_fee'];if($market_price>=$free_money){$order_amount=$order_amount-$shipping_fee;$shipping_fee="0.00";}else{if($shipping_fee<=0){$shipping=multiArraySearch("basic_fee",$tempa);$shipping_fee=$tempa[$shipping[0]]['value'];//找出基本运费的$order_amount=$order_amount+$shipping_fee;}}$sql="update".$ecs->table("order_info")."setgoods_amount=?".$market_price."?,discount=?".$discount."?,shipping_fee=?".$shipping_fee."?,tax=?".$tax."? ,pay_fee=?".$pay_fee."?,order_amount=?".$order_amount."? where order_id=$oid";$db->query($sql);$order = get_order_detail($oid, $user_id);//再⼀次查检订单参数if($order['goods_amount']<=0){$sql="delete from ".$ecs->table("order_info")." where order_id=$oid";$db->query($sql);ecs_header("Location: user.php?act=order_list");exit();}ecs_header("Location: user.php?act=modify&order_id=".$oid);exit();}if($_REQUEST['do']=="update"){//更新商品数量$oid=$_REQUEST['oid'];$gid=$_REQUEST['bid'];$nums=$_REQUEST['good_number'];foreach($nums as $gid=>$num){$sql="select goods_price,goods_number from ".$ecs->table("order_goods")." where goods_id=$gid";$result=$db->getrow($sql);$order = get_order_detail($oid, $user_id);//取得订单$sql_storage = "SELECT goods_name,goods_number FROM " .$ecs->table(?goods?). " WHERE goods_id = $gid";$storage_num = $db->getRow($sql_storage);//库存if($result['goods_number']==$num){continue;}elseif($num<=0){show_message("对不起,您修改的商品数量不能为0,或⼩于0!", "返回", …user.php?act=modify&order_id=?.$oid, …error?);exit();}elseif ($num>$storage_num['goods_number']){show_message("对不起,您修改的商品数量不能⼤于该商品:".$storage_num['goods_name'].",库存数:".$storage_num['goods_number']."!", "返回", …user.php? act=modify&order_id=?.$oid, …error?);exit();}$addnum=$num-$result['goods_number'];$sql="update ".$ecs->table("order_goods")." set goods_number=".$num." where goods_id=$gid and order_id=$oid";//添加商品$db->query($sql);$sql="select configure from ".$ecs->table("shipping_area")." where shipping_id=".$order['shipping_id'];$shipping_fee=$db->getrow($sql);$tempa=unserialize($shipping_fee['configure']);$shipping=multiArraySearch("free_money",$tempa);$free_money=$tempa[$shipping[0]]['value'];//找出免运费的额度$market_price=$order['goods_amount']+$result['goods_price']*$addnum; //修改后商品总价格$inv_id=array_search($order['inv_type'],$GLOBALS['_CFG']['invoice_type']['type']);$rate=floatval($GLOBALS['_CFG']['invoice_type']['rate'][$inv_id])/100;$tax=$order['tax']+($result['goods_price']*$addnum)*$rate;//修改后税额$addpay_fee=pay_fee($order['pay_id'],$result['goods_price']*$addnum- $school_dis);//⽀付费⽤$pay_fee=$order['pay_fee']+$addpay_fee;$order_amount=$order['order_amount']+($result['goods_price']*$addnum)-$school_dis+($result[' goods_price']*$addnum)*$rate+$addpay_fee;//修改后订单总额$shipping_fee=$order['shipping_fee'];if($market_price>=$free_money){$order_amount=$order_amount-$shipping_fee;$shipping_fee="0.00";}else{if($shipping_fee<=0){$shipping=multiArraySearch("basic_fee",$tempa);$shipping_fee=$tempa[$shipping[0]]['value'];//找出基本运费的$order_amount=$order_amount+$shipping_fee;}}//更新订单信息$sql="update ".$ecs->table("order_info")." set goods_amount=?".$market_price."?,discount=?".$discount."?,shipping_fee=?".$shipping_fee."?,tax=?".$tax."?,pay_fee=?".$pay_fee."? ,order_amount=?".$order_amount."? where order_id=$oid";$db->query($sql);}$order = get_order_detail($oid, $user_id);//再⼀次查检订单参数if($order['goods_amount']<=0){$sql="delete from ".$ecs->table("order_info")." where order_id=$oid";$db->query($sql);ecs_header("Location: user.php?act=order_list");exit();}ecs_header("Location: user.php?act=order_detail&order_id=".$oid);exit();}$order_id = isset($_GET['order_id']) ? intval($_GET['order_id']) : 0;$order = get_order_detail($order_id, $user_id);/* 订单商品*/$goods_list = order_goods($order_id);foreach ($goods_list AS $key => $value){$goods_list[$key]['market_price'] = price_format($value['market_price'], false);$goods_list[$key]['goods_price'] = price_format($value['goods_price'], false);$goods_list[$key]['subtotal'] = price_format($value['subtotal'], false);}$smarty->assign(?order?, $order);$smarty->assign(?goods_list?, $goods_list);$smarty->display(?user_transaction.dwt?);}Ecshop_order_detail----------------------------------------------------------------------------------------------------ecshop在设置商品促销功能时,精确到⼩时分钟2009-08-06 09:16⽬前我们在设置商品促销的时间,只能设置从某⼀天,其实完全可以精确到⼩时分钟。
系统简要二次开发 文档简介 系统整体架构
系统采用完全的三层架构设计,对用户的扩展和后期二次开发非常有好。
BLL 项目中是系统中需要的实体对象类和方法。 Common 项目中是系统中调用的各种公共方法。 DBUtility 项目中存放的是系统对数据库的各种操作方法。 Web 项目中是系统对外部显示的用户界面和逻辑操作过程。
BLL项目介绍
所有系统中需要的实体对象类和方法皆存放在该项目下。
具体每个类的详细设计,请参见“系统详细设计.chm”文档。 Common项目介绍 该项目中对系统中所有的公共方法的调用提供支持。 具体每个类的详细设计,请参见“系统详细设计.chm”文档以及每个类中的注释文件。 DBUtility项目介绍 具体类的详细设计,请参见“系统详细设计.chm”文档以及类中的注释文件。
Web项目介绍
文件夹目录对应的功能模块清单列表如下: Appendix 邮政编码、区号查询 BBS 论坛BBS bin 引用的控件 DataBase 数据库文件 DocCenter 文件中心 DsoFramer Office文档在线编辑打开 eWebEditor 新闻编辑器 Flash 系统动画位置 GongGao 公告通知 HR 考勤管理 images 系统图片位置 JS 系统JS位置 LanEmail 内部邮件 LogForDesign 开发时内部记录 Main 公共调用文件 Meeting 会议管理模块 Mobile 手机短信模块 NetMail 在线internet邮件 Personal 个人信息管理 ReportFile 报表文件存放位置 SetupFile 系统安装时需要的文件存放位置 SystemManage 系统管理模块 TalkRoom 系统聊天室模块 TelFile 电子签收模块 UploadFile 系统文件上传存储位置 WebEditorFile 在线编辑器文件存放位置 Work 工作管理模块 WorkFlow 工作流模块 WorkPlan 工作计划模块
Pro/E二次开发程序设置与调试安装Pro/E首先确保你正确安装了Pro/EPro/E开发工具Toolkit的目录结构:设置包含文件和库文件然后在你的VS2005IDE中设置好包含文件和库文件目录。
点击工具->选项菜单,弹出选项对话框1.加入包含文件:在安装目录下<安装目录>\protoolkit\includes2.加入库文件:在安装目录下<安装目录>\protoolkit\i486_nt\obj新建工程新建一个工程1.选择MFC DLL模板;2.填入项目名称,点击确定;3.在应用程序设置页,选择“使用共享MFC DLL的规则DLL”4.点击完成。
设置工程属性点击项目->属性菜单开始设置项目属性。
1.在C/C++标签下预处理器页面,预处理器定义中添加一条PRO_USE_VAR_ARGS宏。
3.在语言页设置将wchar_t视为内置类型为否(/Z c:wchar_t-)4.在连接器标签->输入页面a)附加依赖项中添加要附加的依赖库文件:protk_dllmd.lib,wsock32.lib,mpr.lib。
b)在忽略特定库中添加要忽略的库文件:msvcrt.lib。
5.在链接器->命令行标签->附加命令选择中填入/FORCE设置完成以上内容后即可编译成功。
编辑源文件重新编译你的工程注册和运行程序1.编写一个注册文件Protk.dat,该文件描述了二次开发程序的注册信息。
典型的文件结构如下:语法意义如下:name:为你的二次开发程序指定一个单独的名字。
startup:指定程序模式,这里是DLL模型。
exec_file:你编译出来的动态链接库的放置路径。
text_dir:应用程序使用的菜单和消息文件的放置路径。
allow_stop:程序运行停止。
delay_start:延迟启动。
end:注册文件结束2.在工程目录下新建一个Text文件夹,然后在Text文件夹下面,新建一个user_msg.txt启动Pro/E主程序,选择工具->辅助应用程序菜单(Tools->Auxiliary Application)4.然后点击注册(Register)按钮,选择前面编写的注册文件protk.dat。
ECMall二次开发文档-ecmall模板教程ECMall模板开发文档前言欢迎阅读ECMall模板制作教程,通过阅读本教程可快速上手ECMall模板的使用和制作。
ECMall模板制作要求用户具备XML、XHTML和CSS基础知识;至少掌握一种文本编辑器或网页制作工具(如:EditPlus,Dreamweaver,Textmate等);本教程还将及一些模板代码,如从没有了解过Smarty建议阅读Smarty帮助手册。
第一节-ECMall模板机制介绍通过阅读本节你将了解:1.ECMall模板的组成和机构2.ECMall模板机制工作原理ECMall页面模板由布局(layout)、模块(module)、皮肤(skin)组成,所有模板文件都保存在ECMall根目录的themes目录下,其中两个目录mall和store,mall 目录包含了商城的所有布局、模块、皮肤,store目录包含了店铺所有布局、模块、皮肤,两个目录的结构是完全一样。
下面首先介绍mall目录下的结构。
mall目录包括layout、resource、skin三个目录,其用途分别为:•Layout目录-用于存放layout文件。
layout目录下的每个子目录里存放的是某一个页面的layout文件(layout目录介绍请见附表1),如homepage目录就是商城首页的布局目录,里面有一个yout文件这就是商城首页的布局文件,在这个目录里可以存在多个布局文件,布局文件是一个标准的XML文档,你只需要写简单的几个标签(以下称为布局描述语言)描述整个页面的布局架构,在以后的章节会详细介绍布局文件的制作方法。
•resource目录-用于存放内容模块文件。
模块是由布局文件调用的,内容是HTML或模板代码组成,在以后的章节会详细介绍模块制作方法。
•skin目录-存放皮肤,目录中每个目录对应一个skin,如default是ECMall默认皮肤,其中包括了CSS 文件,和图片以及JS文件,在以后的章节会详细介绍皮肤制作方法。
ECMall的每一个页面的模板都包含以上介绍的元素,原理是模板引擎将布局文件中的布局描述语言解析,将文件中描述的页面布局和模块部署位置输出一个标准的XHTML文档。
第二节-布局文件制作方法通过阅读本届你将了解:1. ECMall 模板布局描述语言的标签2. ECMall 模板布局描述制作方法上节简单的介绍了布局文件,本节将详细介绍布局文件的制作方法。
布局文件的内容是布局描述语言,布局描述语言是基于XML 的,XML 是一种标记语言,ECMall 定义了4个简单的标签row 、col 、library 、item ,你只需要使用这四个简单的标签就能描述一个自己想要页面:●row 标签 - 标记一行,支持的属性包括id 、class 、allowEdit ●col 标签 - 标记一列,支持的属性包括id 、class 、allowEdit ● libray 标签 - 标记的是一个模块容器●item 标签 - 标记的是一个模块,支持的属性包括id 和src 。
下面介绍如何制作ECMALL 的布局文件<?xml version="1.0"?><template> <row id="region1" allowEdit="false"> <library> <item id="header"src="themes/mall/resource/page_header. html" /><item id="search_form"src="themes/mall/resource/search_form. html" /></library></row><row id="mc_home"><col id="region2" class="column1"><library><item id="mc_menu"src="themes/mall/resource/mc_menu.ht ml" /></library></col><col id="region3" class="column2"><library><item id="mc_home"src="themes/mall/resource/mc_home.htm l" /></library></col></row><row id="footer" allowEdit="false"><library><item id="page_footer"src="themes/mall/resource/page_footer.h tml" /></library></row></template>以上是会员中心首页的布局文件的内容,该文件在根目录的themes/mall/layout/mc_home/y out,所描述的布局如下图:代码的第一行“<?xml version="1.0"?>”声明文档是一个XML文档。
后面<template>...</template>是根节点,XML文档标准是必须存在一个根节点的,template节点的子节点就是上面介绍的4个标签,用于描述页面布局,这个页面分为上中下三行,中部分为两列。
第一行代码<row id="region1" allowEdit="false"><library><item id="header"src="themes/mall/resource/page_header. html" /><item id="search_form"src="themes/mall/resource/search_form.h tml" /></library></row>这段代码用row标签标记一行,定义了一个ID为region1,这里需要注意下每个标签都应该有一个唯一ID,不能和其他标签的ID冲突,一旦冲突页面可能会无法正常显示,这里还定义了allowEdit属性为false,这表示这个标签下的模块,在模板编辑模式下是无法拖拽的,其他模块也无法拖放到这里。
这个标签下调用了两个模块,所以必须有一个模块的容器标签“<library></library>”,“<item id="header" src="themes/mall/resource/page_header. html" />”标记了调用一个模块,这里ID属性必须和src属性对应的模块文件中顶级元素ID相同,src是模块的相对路径。
第二行代码:<row id="mc_home"><col id="region2" class="column1"><library><item id="mc_menu"src="themes/mall/resource/mc_menu.html" /></library></col><col id="region3" class="column2"><library><item id="mc_home"src="themes/mall/resource/mc_home.htm l" /></library></col></row>这一行分为两列,在row标签里我们定义了两列,第一列的ID为region2,第二列的ID为region3,这两列分别调用了一个模块,这和第一行讲解的是一样,这里需要注意的是row标签可以包含多个col、row标签,也可以包含一个library标签,但不能同时包含不同的标签,比如:1.<row id="mc_home"><col id="region1"></col><row id="region2"></row></row>2.<row id="mc_home"><col id="region1"></col><library>................</library></row>上面的两段代码都是错误的,col标签可以包含row标签但不能再包含col标签,col标签也不能同时包含row 和library,比如<col id="col1"><row id="region1" /><library>................</library></col>这样也是错误的。
最后讲解布局第三行的代码:<row id="footer" allowEdit="false"><library><item id="page_footer"src="themes/mall/resource/page_footer.h tml" /></library></row>这一行和第一行的代码几乎相同,只是调用的模块不同而已,allowEdit为false禁止编辑这一行。