原理
模块(Modules)
drupal是一个高度模块化,开源的web内容管理框架。它被设计为可被定制的,但是定制是通过覆写核心功能或者增加模块来完成的,而不是修改核心组件中的代码。Drupal中一般通过三种方式来添加功能:启用已存在的模块(核
心模块),安装Drupal社区成员编写的模块(第3方模块),编写自己的模块。
钩子
Drupal的所有功能都通过模块来实现,而模块又通过钩子来和系统联系起来,被系统调用的。钩子可以看作是Drupal的内部事件,不同的事件类型由不同钩子函数来调用,这些钩子函数的命名规则都是由drupal定义好的。我们只需要了解什么样的事件动作要用什么钩子来实现调用。这样,当我们在网站上执行某些操作时,drupal就会根据我们操作的类型来查找相应的钩子,通过钩子,调用符合条件的模块。
主题(Themes)
Drupal是被设计为内容和显示分离的,这样既利于开发,也方便维护。所以,当后台的数据内容要被显示时,就会通过主题(主题函数或主题模版)来进行包装,最后显示在页面上的是数据和主题包装后的效果。Drupal支持多种模版引擎,比如smarty,PHPTemplate. 主题也是通过主题钩子来实现调用的,
首先,我们先写好相应的模版文件,
然后在模块中通过“模块名+theme”来注册这些主题。
最后当模块要输出数据时,就会通过theme(“主题”,“数据”)来调用相应的主题模版,并把数据也传进模版,然后theme函数把整合后的html页面返回。
节点(nodes)
Drupal中的内容类型都被看做是一个节点来管理,并且所有节点的底层结构都是一样的。这样有利于扩展。
区块(blocks)
区块用来展示一些特定内容的信息。比如在线用户数,流量统计等,一般用于首页。 一个区块包括标题和内容。
执行过程
1. 从index.php开始,Drupal的大多数请求都从这里开始。
2. 对于每个请求,Drupal通过一系列的引导指令阶段来引导它自己
3. 建立初始链接以供数据库查询使用
4. 检查请求IP是否来自一个被禁的主机;如果是,那么将拒绝访问。
5.Drupal 加载足够的支持代码来决定是否需要从页面缓存中提供一个页面。如果在会话中显示请求来自于匿名用户并且启用了页面缓存,那么将从缓存中返回页
面,执行到此停止。
6. 在路径阶段,将加载处理路径和路径别名的(aliasing)的代码。该阶段使得用户可读的URL被转化为Drupal路径,并处理内部Drupal 路径的缓存和查询操作。
7.加载一个通用函数库,主题支持,和支持回调映
射,文件处理,Unicode,PHP 图片工具集,表单的创建和处理,自动排序的表格,和结果集的分页。并加载所有启用了的模块。最后Drupal 调用init钩子,这样在对请求正式开始处理以前,将有机会通知相应的模块。
8.现在是时候获得浏览器的请求并将它委托给一个处理它的函数。
9.当Drupal 为浏览器请求的URL 找到一个存在的回调函数,并且用户有权访问该回调函数,那么控制权将转移给回调函数。
10.回调函数做了流程要求做的事情,并收集满足请求所需要的数据。
11.主体化涉及到将已被取回,操作或者创建的数据转化为HTML。Drupal 将使用管理员
选用的主题来为网页提供一个合适的外观,并将生成的HTML 移交给web浏览器。
使用方法
环境和目录设置
1. 在\sites\default\settings.php里设置数据库连接信息。
2. 核心模块和主题目录不要动,所有新开发的模块和主题模版都集中在sites\all\modules
和sites\all\themes中。
3. 新添加的模块在系统的“管理\站点构建”中设置启用/禁用。
4. Drupal中的所有文件和数据库默认都是用的utf-8编码。
模块开发步骤:
1.首先为模块起一个名字,比如叫mytest,然后模块目录名,info文件,module文件都用这个名字命名。
2.在sites\all\modules\里建立一个文件夹叫mytest,在mytest文件夹下建立如下文件: mytest.info:用来向Drupal提供一些关于我们模块的信息
mytest.install:启用模块时用来创建数据库信息(如果此模块涉及到改数据库的话)。 mytest.module:模块内容。
如果有自己的主题模版,在sites\all\themes\建立一个主题,模版文件和css,图片等文件都放到这个目录下
3.模块中的钩子函数
1.hook_menu:菜单钩子,每一个菜单钩子里都是一个联合数组。从菜单钩子开始,执
行一系列的功能操作。通过菜单钩子,可以创建网站各个模块功能的入口链接。 菜单钩子的回调类型(type):
1. MENU_CALLBACK 普通的菜单回调,不在菜单区块显示,只能通过url访问
2、MENU_NORMAL_TIEM 可以在菜单区块显示
3. MENU_DEFAULT_LOCAL_TASK //可以继承父菜单的类型
2. 表单函数名_submit($form,$form_values) :提交表单操作。
3.表单函数名_validate($form_id, $form_values):对表单里输入的内容进行验证,
如果不符合条件,将会提示错误信息。
4. drupal_get_form() 生成表单html,
5.User_access():测试用户是否有访问权限。有则反回true,没有则反回false.
6.hook_perm():定义用户权限。
7.hook_user($op, &$edit, &$user, $category = NULL) 对用户帐号进行操作,以及修改$user 对象.
8.节点中用到的钩子
hook_insert($node)保存一个新的节点时将会调用此钩子
hook_update($node) 编辑完一个节点时调用该钩子。
hook_delete(&$node) 删除一个节点时调用
hook_view($node, $teaser = FALSE, $page = FALSE) 显示一个节点信息
hook_access() 用来限制对一个节点类型的访问
9. 数据库操作:
db_query() 执行sql语句,返回一个结果集
db_fetch_object()从结果集中取出一行作为一个对象。
db_fetch_array()取出的结果作为一个数组
10.主题
Hook_theme() 注册模块要用到的主题钩子
Theme_主题名() 定义主题函数,用这种方法可以不写主题模版,在这里直接定义主
题样式。
Theme(‘主题名’,’参数’) :调用主题函数,此函数返回处理后的html,用于输出到
览器。
个人理解
了解drupal的关键在于理解它的模块化框架和钩子系统,它的功能都是通过模块来实现的,每个模块又可以被启用或者禁用,而系统对模块的控制就是通过钩子来实现的。也就是说模块只有通过钩子才能被系统所调用。
要灵活的运用drupal,我觉的首先要掌握drupal为实现各个功能而定义的钩子函数,这样,当我们在写模块时,就知道什么功能要用什么钩子函数。
第二篇:erp学习总结
ERP实施周总结
周玉东
ERP(Enterprise Resource Planning)企业资源计划,一直以来在我的理解下它就是企业所有资源的一种管理,就是简简单单的原材料订购、产品销售、会计管理等。然而不是,ERP是一种面向制造行业进行物质资源、资金资源和信息资源集成一体化管理的企业信息化管理 系统。ERP是一个以管理会计为核心可以跨越地区、跨部门甚至跨公司整合实时信息的企业管理软件。ERP主要包括财务会计、生产计划生产控制、销售管理、库存管理、采购管理、成本控制以及质量管理、人力资源管理这几大模块。
有两天我尝试去摸索ERP软件,事实远没我想象的那么简单。一个两个简单的操作我会,但是我忽略了ERP最主要的且必须遵从的观念:局部服从全局,通过流程才能管理整体业务。比如说:销售接下订单生产不出来就会出现产供销严重脱节;费用不清、财务报告滞后会使财务与业务脱节;客户情况不能及时掌握、供货情况掌握不及时,供求关系就会难以平衡。
师兄指导说,学好ERP应该先熟悉各项业务流程。在这儿我就对采购与库存管理模块儿的业务蓝图进行一个总结。
一般材料的采购与入库:1、采购申请业务:申请部门提交采购申请包告,管理员对采购申请进行维护,经过预算管理控制员进行预算调整形成采购申请单然后转至采购申请业务。 2、采购业务:采购员通过货源清单、采购信息记录进行货源选择,选择或者创建供应商3进行询价报价4,价格审批通过后创建合同从而形成采购订单5,然后转至收货业务6。3、供应商管理与评价:价格管理员、库管员与检验员通过价格、供货信息、质量信息对供应商进行评价。4、询价与报价:采购申请业务完成后采购员会向供应商提交一份询价单经过商讨后把形成的报价单经过比价处理然后决定是否采购。5、采购#5@p:形成采购订单的同时财务部会根据供应商提供的采购#5@p进行预制#5@p过账,然后进行付账及转帐业务(运费#5@p分摊)。6、收货业务:相关部门对供货进行验收形成物资验收单,库管员对收到的货物分类形成采购订单收货(非库存物料、库存物料),同时记录到物料凭证与会计凭证当中。
每到季末库管员会对库存进行库存盘点7库存呆滞积压业务8:7、库存盘点:
8、库存呆滞积压业务: