ECMall二次开发文档-ecmall模板教程
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禁止编辑这一行。
二次开发接口文档
接口开发文档一、开发包目录结构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)二次开发
企业应用集成工具(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模板结构说明及标签(二次开发使用)
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 模板文件用户中心页(包含:欢迎页,我的留言,我的标签,收藏商品,缺货登记列表,添加缺货登记。
ecm方法
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()//显示消息页面。
泛微OA-ecology-二次开发实例-开发完整说明.doc
二次开发培训文档一、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是一套完整的网络商店解决方案,包括前台的商品展示、购物流程和强大易用的后台管理。
由于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二次开发详细解答
在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是一套完整的网络商店解决方案,包括前台的商品展示、购物流程和强大易用的后台管理。
由于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订单快递单批量打印二次开发教程
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.这是最重要的一点,其他地方根本没说过,害得作者君我折腾了两三天。
