tag:blogger.com,1999:blog-80944397558724844542024-03-13T17:42:33.579+08:00方医生Drupal频道智者,当借力而行。方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.comBlogger22125tag:blogger.com,1999:blog-8094439755872484454.post-3798456303191579992010-12-15T12:31:00.003+08:002010-12-15T12:31:38.098+08:00博客已转移至:www.fang798.com方医生博客转移至:www.fang798.com,欢迎访问。方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com0tag:blogger.com,1999:blog-8094439755872484454.post-17480271664430135832009-04-16T15:58:00.009+08:002009-04-16T16:27:19.626+08:00不使用Locale模块本地化Drupal众所周知,在Drupal中要本地化,需要首先开启Locale模块,然后添加中文语言支持,再将中文包导入。其实还有一个很隐秘的地方可以放置翻译字符串,它在settings.php中。看下面的代码:/*** String overrides:** To override specific strings on your site with or without enabling locale* module, add an entry to this list. This functionality allows you to change* a small number of your site's default English language interface strings.** Remove the leading hash signs to enable.*/# $conf[方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com1tag:blogger.com,1999:blog-8094439755872484454.post-11983085617890957062009-04-16T10:25:00.004+08:002009-04-21T17:37:02.828+08:00Drupal项目实战-公司订餐系统(四)在本系列上一个文章中,我画了一些页面草图,用于展示网站原型。本文中将讲解如何用Drpual来实现。 在上面的文章中,我们已经创建了一个Food节点类型,用于存储各个菜单,供员工选择。也就是说,基本上实现了菜单的管理功能。那么接下来要实现在线订餐的功能了。 为了简化功能,我们先不实现购物车的功能,只需要实现用户在设置订餐数量后,即可提交一个订单。午餐管理员就可以查看用户订餐列表了。可以看出,现在需要下列“东西”: 一个表单:订餐表单,显示一个文本框,用于让用户输出订餐数量,以及一个提交按钮。 一个数据库:用于存放用户的订餐数据。 一个页面,午餐管理员可以查看员工的订餐情况。 除此之外,还需要显示一些提示信息等。在平时做项目时,我喜欢迭代式的开发,简单的讲就是先开发主要功能,再逐步完善。一方面这样可以使客户能够清楚的看到进展,另一方面也能确保系统更为“扎实”。除此之外,还可以使程序员方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com6tag:blogger.com,1999:blog-8094439755872484454.post-52375810798750087032009-03-02T14:06:00.010+08:002009-03-02T14:18:16.959+08:00使用sites文件夹灵活管理多站点配置Drupal目录下的sites文件夹是用于存放所有开发者对Drupal自定义的模块脚本以及主题文件的地方。同时,还可以用于存放不同的站点配置文件。在sites目录下,默认有两个子文件夹:all和default。其中,default文件夹用于存放settings.php,即网站配置文件,里面主要包括数据库连接信息。all目录用于存放第三方或自定义模块。Drupal支持多站点共用一个Drupal程序,意味着我们可以通过在sites目录下创建以网站域名为名称的子文件夹。Drupal就会根据网站域名读取对应的配置。举一个经常碰到的应用场景:在发布了网站后,需要维护本地开发用的程序和网站发布程序之间的同步。一般情况下,生产服务器的数据库配置等信息与本地开发环境是不同的。如果只有一个配置文件的话,那么在同步网站程序和本地程序时,就需要手工过滤或更改配置文件。这时就可以利用Drupal支持多站点配置方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com1tag:blogger.com,1999:blog-8094439755872484454.post-32040032012227950992009-02-26T17:32:00.003+08:002009-02-26T17:36:10.311+08:00Disable user language模块介绍今天给大家介绍一个新模块:DUL ( Disable user language : 关闭用户语言选择)。在开启了Local模块后,Drupal即可以支持多语言界面了。同时,也使用户可以在Account中修改他所需要的语言界面——Language Settings。不过,在很多情况下,比如做国内的网站,并不需要用户选择“英文”界面,因为有很多情况下,界面中的文字是直接用中文写的,如果用户切换到英文界面,就会很“ugly”。当然,我们还是提倡大家尽量用t()写更“国际化”的界面。这时,我们就需要DUL模块了。开启它后,它就将user/edit中的Language Settings部分去掉了,用户只能使用网站的默认语言。DUL模块的下载地址为:http://drupalmodules.com/module/disable-user-language方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com0tag:blogger.com,1999:blog-8094439755872484454.post-43357960870590210752009-02-21T21:16:00.009+08:002009-02-21T21:54:48.749+08:00使用Drupal 6 Form API上传文件在Drupal 6中,上传文件的函数与Drupal 5中的File Interface是有不同的。在Drupal 5中,上传文件使用的是file_check_upload函数;而在Drupal 6中,这个函数被取消了,换成了file_save_upload函数。file_save_upload($source, $validators = array(), $dest = FALSE, $replace = FILE_EXISTS_RENAME)下面对每个参数作简要说明:$source:自定义表单中,上传组件的名称。我在开发时,在这个参数上花费了不少时间,下面是手册中的解释:$source A string specifying the name of the upload field to save.我开始一直把upload field看成了upload file,以为这个函数传递的是方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com0tag:blogger.com,1999:blog-8094439755872484454.post-10754527203244904022009-02-20T15:55:00.004+08:002009-02-21T21:43:37.636+08:00使用Firefox的GreaseMoneky插件今天在写Blog时,发现Blogger的编辑页面中的编辑框实在是太小了。便能过Firebug把其高宽都调了了调,很好用。不过下次再用时,还要用Firebug来调,很麻烦。我记得有一个Firefox的Add-on叫Better Gmail,它是用本地的脚本去定制Gmail的样式,给我了点灵感。我马上就找到了Better Gmail所使用的核心插件——GreaseMonkey。GreaseMonkey插件主要是可以让浏览器的使用者自定义网站的样式,或执行javaScript脚本。这样,我只需创建一个js脚本(GM是以.user.js为结尾的文件),然后使用GreaseMonkey设置,将进入Blogger的编辑页面时载入,就可以了。我写的脚本如下:function addGlobalStyle(css) { var head, style; head = 方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com0tag:blogger.com,1999:blog-8094439755872484454.post-65487926301084046462009-02-05T19:41:00.004+08:002009-02-06T08:54:06.754+08:00Drupal论坛简介Drupal自带有“论坛”的功能,相信国内的广大Drupal使用者对Drupal自带的这个论坛功能也很感兴趣。但是,质疑声也是此起彼伏。很多开发者认为Drupal的论坛很不适合国人使用,因为其功能较为简单,且操作方式等也不太方便。那么Drupal论坛的特点是什么?究竟在哪种项目中适合使用Drupal的论坛呢?本文将引领大家简要了解Drupal的Froum,分析其适用场景及使用方法,并给出我的看法。引言Drupal的Forum模块是核心可选模块,开启Taxnomy和Comment模块后即可以使用。Drupal官方认为这个Forum像phpBB那样的message board。核心功能就是:用户就某一主题进行讨论把用户的讨论进行归档收集这是Drupal论坛的设计宗旨,知道这两点可以便于设计者决策在实际项目中是否采用Drupal论坛。通常的情况下,客户们只说:我要一个论坛。但他究竟要的是什么样方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com5tag:blogger.com,1999:blog-8094439755872484454.post-24742722945455359442009-01-25T10:30:00.011+08:002009-02-06T09:00:00.169+08:00方医生恭祝大家牛年快乐!值此新春到来之际,我代表我和我的家人,对在过去的一年来对我给予极大支持的同学们、朋友们,以及广大的Drupal爱好者们致以最诚挚的问候:祝愿大家在新的一年里,万事如意,心想事成!在牛年里,无论是学业、事业还是家庭,都牛气冲天。特别感谢美丽可爱的Ballet网页设计,也祝福Drupal在牛年发展的更好。方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com1tag:blogger.com,1999:blog-8094439755872484454.post-53112164406025393262009-01-17T17:35:00.000+08:002009-01-17T17:56:32.129+08:00让Drupal展示绚烂的图表-Open Flash Chart有朋友问起关于在Drupal中生成图表的功能,并推荐了一个Charts模块。但经我的试用,发现这个模块文档奇缺,无法简单的安装成功。因此找到了另外一个模块:Open Flash Chart API。Open Flash Chart 是非常有名的一个开源的、免费的Flash图表生成程序,它的网址是:http://teethgrinder.co.uk/open-flash-chart/index.php。通过它可以生成很酷很炫的各种图表。如下图所示。为了方便大家的使用,我将做一个小视频,欢迎收看,敬请关注。方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com3tag:blogger.com,1999:blog-8094439755872484454.post-79448073925484542482009-01-17T14:39:00.000+08:002009-01-17T15:19:01.324+08:00Drupal项目实战-公司订餐系统(三)上节回顾上一节的进展为: 创建了Food的Content type使用CCK创建了Food的相关字段修改了node-food.tpl.php目前,简单的菜单管理功能模块可以说基本上完成了,除了权限控制部分。我认为权限控制应该在所有系统功能完成后再统一考虑,目前还是先实现功能为主。那么接下来,就可以进入订餐功能模块的开发了。本文我们就开始订餐功能的设计和开发。订餐功能模块分析公司员工在浏览了菜单后,可以选择订购此午餐,同时设定购买数量。由于菜单是一个套餐,因此通常一个员工只会选择一种套餐。但是,此处我认为应该在一定程序上考虑系统的可扩展性,也就是说,应该考虑一个用户订两个或多个“套餐”的情况。因为很显然的是,员工小A想替小B和小C订餐的话,那么使用小A的帐户就需要同时订购三种不同的套餐。其实此处就存在一个实际的业务模型和系统模型间的映射关系。如果只是从“一个员工中午只吃一种套餐”的常识来想方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com7tag:blogger.com,1999:blog-8094439755872484454.post-71705222476821810572009-01-17T12:44:00.000+08:002009-01-17T13:02:40.371+08:00如何升级Drupal 6使用Drupal 6.0后,可以在后台管理的“报告”中收到Drupal最新更新的提示。如下图:比如,我现在使用的是D6.8,Drupal提示我要升级为D6.9。那么如何升级呢?首先直接下载D6.9的安装包,其中有一个UPGRADE.txt文件,用Editplus或其它高级点的notepad打开(因为是UNIX换行,所以在Windows的记事本中看是一团文字。),里面便是Drupal的升级建议,其中首要的几条是:确定你的系统符合Drupal新版的要求。要求(Requirements)可以在http://drupal.org/requirements中查看。备份所有的相关数据检查自定义模块和主题的兼容性确保你阅读了整个文件内容第1条没的说,只要是LAMP或能运行PHP和MySQL即可。推荐使用APACHE。第2条比较重要,我一般是备份一下整个数据库,以及sites/all下面的我自己安装的方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com0tag:blogger.com,1999:blog-8094439755872484454.post-14376885113438467202009-01-12T14:53:00.001+08:002009-01-13T13:59:58.580+08:00Drupal Views 2攻略-自定义View模板上个视频主要讲解了Views 2模块的基本使用技巧。本次视频的主要内容是:如何创建自定义模板文件来定制View样式。敬请收看! Youku网址为:http://v.youku.com/v_show/id_XNjU2MzcyMjQ=.html网速快的朋友可去Youtube看,地址为:上集:http://www.youtube.com/watch?v=D6qZ4usOV-E下集:http://www.youtube.com/watch?v=5OVuXJRsnycPS: Youtube生成高清版本可能需要一段时间。方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com2tag:blogger.com,1999:blog-8094439755872484454.post-14585545864418869572009-01-11T21:54:00.000+08:002009-01-12T00:20:55.827+08:00Drupal地心游记:神秘的羊皮纸夜深人静。我独自一人收拾行囊,将探险所需要的各种工具装在包里。由于长期的奔波与不安定的生活,没有多少钱和家当,而且我估计在探索Drupal地心深处的过程中,钱也派不上什么用场。唯一可用的,就是几本经常翻看的手册,如PHP、HTML、CSS、JavaScript,以及MySQL等,它们陪伴了我很多年。这些手册应该是Drupal地心中最重要的参考依据了,少了它们,有些谜团就不好解答了。动身之前,有一件非常重要的事,那就是有一样东西必须要弄到——地图。这个地图并不是去Drupal城的地图,而是探索Drupal地心的路线图。前年夏天,我辗转获得了Drupal城缔造者Dries Buyteart写的一本厚厚的书,每页的内容是被称为“程序源代码”的文字。这本书详细记录了Drupal城地下的构造及运转机制,显然是探险的依据,但还有一个重要的问题没有解决:入口的位置以及探索的路线。我不停的翻看那本厚厚的方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com6tag:blogger.com,1999:blog-8094439755872484454.post-26636203031256406672009-01-06T09:27:00.000+08:002009-01-11T10:11:50.971+08:00Drupal 缓存基础关键字:DRUPAL,缓存,API方医生注本文介绍了Drupal的缓存机制,主要是自定义模块开发时,如何使用缓存的问题。英文原文地址为:http://www.lullabot.com/articles/a_beginners_guide_to_caching_data。不过我在翻译时,并没有100%按照原文,进行了一些改进,使其读其来更像中文文章。如果大家觉得有不明白的地方,欢迎指出。正文开始在Drupal中创建复杂的、动态的内容是很easy的,但需要做出一定的牺牲的。现在很多Web 2.0的特性的加入,使得网站在变得很cool的同时,也坠入了“性能恶梦(performance nightmare)”的深渊中。每一个节点的加载或一个页面的加载,都会引起高负载、大量的数据库访问、复杂的计算和大量的客户端脚本的执行。一个解决方案是在Drupal的管理界面开启页面缓存。这个可以使匿名用户(即不方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com2tag:blogger.com,1999:blog-8094439755872484454.post-44799706176012305332009-01-03T21:38:00.000+08:002009-01-05T10:37:49.102+08:00Drupal视频讲座第一辑—Views 2攻略Views 2 是Drupal 6最重要的模块,它可以生成Drupal站点内容的各种列表,而且不需要写一行代码。同时,它的作者又荣获2008年度开源CMS最有价值专家。由此可见Views 2对于Drupal的重要性。我也制作了一系列关于Views 2的视频讲座,旨在与大家分享Views 2的使用经验。欢迎大家收看并与我交流。相关视频还会陆续发布,敬请关注。Views 2:基础本节视频主要包含了Views 2的相对于Views 1的改进,一些基本概念和配置,并创建了一个实例区块来展示区块列表。如果你的浏览器无法看到视频,可直接访问:http://v.youku.com/v_show/id_XNjM4NjE3NzI=.html。可能视频中的截图不是很清楚,下面是两个主要的页面,大家可以参考着看(点击看大图):Views 2相关视频还会陆续推出....Coming Soon....方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com7tag:blogger.com,1999:blog-8094439755872484454.post-58263149087204073992008-12-31T17:17:00.000+08:002008-12-31T17:47:13.567+08:00再见,2008;你好,2009。C#:{year2008.End();Year year2009 = new Year(2009);year2009.Start();}PHP:<?phpunset($year2008);/** TODO: Give $year2009 a meaningful value.*/$year2009 = "";?>方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com0tag:blogger.com,1999:blog-8094439755872484454.post-90911786200832210552008-12-31T13:23:00.002+08:002009-02-06T08:59:23.093+08:00网站漫游指南欢迎光临——方医生的Drupal频道!下面是网站漫游指南:右上角的“节目单”:最新内容和快捷链接右侧的“标签”:快速找到相关文章方医生讨论组:提问和互动右侧的“博客归档”:按发布月份寻找文章主要内容部分:最新发布的文章排在最前方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com0tag:blogger.com,1999:blog-8094439755872484454.post-30732342170650742732008-12-30T17:46:00.001+08:002009-01-18T22:04:06.921+08:00Drupal项目实战:公司员工订餐系统(二)创建菜单节点首先创建菜单(Food)的节点类型,增加几个字段后,效果见下图。由于属基本操作,就不再赘述了。在完成菜单类型的创建后,发现默认的节点显示页面,实在是比较简陋.这需要我们自己动手来完善一下.在开始之前,必须介绍一个很重要的模块-Devel(http://drupal.org/project/devel).此模块为开发者必备,主要功能有:查看节点的变量清空缓存(模块的)生成测试数据(节点等)我常用的是这几个,对于D6,它还可以调试主题模板,比较有效.不过,这个模块有时会用其它模块的Javascript脚本有冲突,目前还不太明确与哪些模块有冲突.如果朋友们在调试Drupal时发现莫名其妙的JS问题,可以考虑先关闭Devel模块,然后再试.开发主题,当然还需要能方便查看和动态更改CSS的浏览器支持.Firefox+Firebug组合当仁不让成为现时的首选.不过目前,IE8和方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com3tag:blogger.com,1999:blog-8094439755872484454.post-86494135638239005552008-12-18T12:29:00.000+08:002008-12-18T14:34:05.161+08:00Drupal地心游记:开始Read the f**king code.此句出自Linux之父Linus大神之口,虽然有点“dirty”,不过一针见血。想要了解一个系统、程序或框架的实质,唯一的、最终极的方法,就是阅读源代码。就好像要分析人类,首先要从解剖入手。但是,众所周之,一个完整的程序,源代码行数甚多,而且源文件也很多,初步看去,肯定无从下手。这也是大家通常会遇到的问题。本系列就是想和大家一起来解决这个“问题”。Drupal是一个优秀的开源CMS,优秀的框架。它的流行是一种趋势,也是一种必然。简洁、开放、易于扩展、生机勃勃,这些都是新时代优秀框架的必备品质。Druapl发展至今已经是第6个版本,而且Drupal 7也呼之欲出,可见其发展迅猛程度。而且还被评为2008年最佳开源CMS。看来各位不了解Drupal都会显得“过时”了。得易于Drupal是PHP开发的,我们可以轻松的查看其源代码,了解其组成原理。本人方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com1tag:blogger.com,1999:blog-8094439755872484454.post-15063412161905545062008-12-11T09:24:00.001+08:002009-01-18T22:01:21.229+08:00Drupal项目实战:公司员工订餐系统 (一)简单的需求 我们要做的是一个公司内部的员工订餐网站,它的主要功能是:员工可以浏览各种菜的信息:为了简单,我们先假设可以浏览的是“套餐” 员工在选择好菜后,就可以下订单:订单中可以选择订菜的数量 饭店可以查看员工所下订单 :并根据订单进行送餐,订单的有效期是当日上午10:00 (假设我们订的是午餐) 菜单的主要属性:标题、说明、照片、价格OK. 非常简单易懂,基本上三个需求 。这个系统中,主要的角色是:公司员工饭店订餐管理员我们要做的就是实现这样一个系统。首先快速做出原型,然后逐步迭代,即采用敏捷开发[1]方法。可以发挥同学的想像力,逐步完善。图1 员工午饭订餐系统结构图(用户视角)客户在了解了需求后,我们可以对系统的功能进行分析,以便进行技术架构的分析,进而估计出,要实现这样一个系统,大概要多少成本。这是一个很现实的问题。在实际的项目中,客户一般只关心花多少钱来完成这样一个项目,至于用哪方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com3tag:blogger.com,1999:blog-8094439755872484454.post-62558701809602710872008-12-07T09:51:00.001+08:002008-12-11T10:20:41.161+08:00Drupal 6, Drupal 7正在逐渐变慢?根据kbahey的 最新测试表明(http://2bits.com/articles/performance-benchmarking-drupal-512- drupal-66-and-drupal-7x-we-are-getting-slower.html),Drpual 7比Drpual 6慢,Drupal 6比Drupal 慢。本文的测试数据和测试结果均取自Kbahey的试验。 试验方法 实验采用了10月24号新发布的Drupal 7,以及Drupal 6.6和Drupal 5.12。首先在D5的站点上,使用Devel模块创建下列数据: Users 5000 Nodes 4950 Comments 20000 Vocabularies 20000 Terms 1000 首页有30个节点的列表,没有自定义路径,方医生http://www.blogger.com/profile/06577362208561530982noreply@blogger.com3