23
五/09
0

drupal搜索结果页面定制

drupal默认的搜索结果页面往往不是我们想要的,尤其对搜索没有结果的时候那一堆无聊的提示信息简直是很差劲的用户体验,因此,我们必须对其定制。看看search模块中这段代码:

if ($results) { 
  $results = theme('box', t('Search results'), $results);
} 
else { 
  $results = theme('box', t('Your search yielded no results'), search_help('search#noresults')); 
}

很简单,用box模板来展示结果了,因此我们可以在box.tpl.php中写上:</p>

if ( t('Your search yielded no results') == $title) {
  // your html code.
}

至于对有搜索结果页面的定制就很简单了,drupal提供了主题覆写函数phptemplate_search_page()

关键字: ,
6
五/09
2

用phpeclipse进行drupal开发

phpeclipse是开源软件eclipse的一个插件,顾名思义,是为PHPER们准备的。把features和plugins拷贝好后,就可以使用了。这里如果没有刷新出新的eclipse PHP模块,是因为缓存的问题,我们使用-clean参数就可以了。(eclipse使用常识)

剩下就是做一些常用配置,比方drupal的代码规范问题,缩进两个空格,代替tab键。module,info,install后缀名识别等等,比较简单就不说了。剩下的就是新建一个项目,然后导入drupal整个文件夹,这样整个drupal系统代码就导入进来了,新建一个模块的时候,所有drupal函数都可用了,加上eclipse强大的IDE功能,我想你应该可以脱离drupal的官方api了,函数都有提示了。左侧的大纲列表方便定位我们定义的钩子函数。

这样一来,类似l等形参比较多的函数,就不用记下来了,直接函数参数提醒,实在不行可以F3查看函数申明代码,这些功能就和java以及C++开发的时候使用eclipse差不多了。

3
五/09
0

浅谈drupal的cache

drupal的cache机制其实很简单,主要的函数就那么几个,这里需要具体说明的有:菜单缓存,过滤器缓存和系统配置缓存。

菜单缓存很容易理解,把drupal的声明了缓存条件的菜单序列化成字符串存到缓存表中,需要的时候直接读取出来,也就是写menu钩子的时候,if ($may_cache)后面的菜单会缓存,所以在开发的时候如果定义了新的回调函数,没有清空cache_menu表,是不起作用的,原理很简单。

过滤器缓存。drupal的数据文本处理是用过滤器实现的,你不必直接对用户数据进行处理(意味着更改或者删除),因为drupal有一个原则“不要更改用户的数据”,也就是说db中存的是用户原始输入的数据。而为了安全和某些情况考虑,我们需要更改这些数据怎么办?就要用到过滤器,使用过滤器规则处理后的数据会放在过滤器缓存中,比如node的body部分内容。

大家都知道,drupal的很多配置信息,使用variable_set函数写进variables表中的数据,都是以一个全局大数组的形式放在系统中的,从而提高drupal性能,而这个大数组也是在缓存中的。你使用variable_set的时候会自动对缓存进行更新。也就是说如果你手动修改了variables表中的内容,是不能更改drupal配置的,原因就是配置是从缓存中读取的,除非清空了缓存。

大体的缓存就是这么多了,另外说下缓存库表的设计。每个字段的含义就不说了,一看就明白,它是分为单独的几个结构相同的表存储的,这个设计只是为了避免数据量太大的表。如果你自己的模块要使用到缓存功能,可以自己建立自己的缓存表,比如product_cache(产品缓存),但是表结构必须和cache表完全相同(就算你用不到其中的某个字段)。

用好缓存,提高你的站点性能。

关键字: ,
15
四/09
5

关于drupal的seo,amfphp和jquery

最近在看三样东西:

1. SEO

2. Flex + amfphp

3. jQuery

学习seo是为了网站的流量考虑,学习flex和amfphp是为了用户的ue,现在不都RIA了吗?没有吸引力的web用户也不喜欢。jquery同出一辙,为了更好的用户体验。感觉自己做web开发几年了,还是缺少很多因素。语言看了不少,文档也看了不少,架构也参考了不少,还是感觉药学的东西很多,有经验的朋友不妨来这里讨论,指点下。

一口气看完seo的一些文档,发现之前对HTML那么多标签的认识还是有用途的,尽管是做后台程序为主。针对几个原则和方法对自己的blog进行了点优化,过段时间看看效果吧,今天才发觉google原来有那么多好用的产品,以前都没有仔细留意,说自己是一个互联网人士都有点汗颜了。在virtualbox上装了xp,一为了网银,没办法firefox不支持,支付包也是最近才支持,二就是为了flex builder 3。结合amfphp做了几个东西,慢慢熟悉套路了。而jquery也在让我跳出javascript的开发思想,一切从简。想起来几年前全部手写的javascript代码不禁佩服自己当时的勇气,现在读都读不下去,那些拼命循环,拼命在dom中查找节点的日子不复存在了。

这三点东西在现在工作中用到的drupal框架中都有一些实现。seo方面我记得有个模块可以更改节点的title以及description和keyword信息,amfphp被整合到drupal中了,虽然具体代码没看,估计也就是用模块实现amfphp的service。jquery更是drupal原生支持,只不过更好的理解而已。

关键字: ,
7
四/09
1

drupal设计原则

一点关于drupal设计的小见解,欢迎高手拍砖。

drupal的数据类型除了用户和评论,剩下的大都是节点的形式存在。我们要想自己开发一个新的模块,和DB有交互,首先要考虑好数据格式。我觉得drupal相关的开发两个东西很重要,一个是节点(node),一个是分类(taxonomy)。组织自己数据的时候要围绕这两点展开,以节点的形式保存,以taxonomy的方式分类。这样写出的代码才很“drupal”,因为drupal有很多第三方模块可以使用,如果我们的数据不是基于节点展开的,那么很多模块都使用不了。如果脱离了节点,相当于我们只使用了drupal的DB层,用它来安全的进行db操作,这个就有违于drupal的可扩展设计了。因为drupal对节点的操作和管理已经很细致了,我们只要格式化好数据,一切都不用管了,方便省事,并且有一大堆第三方(或者drupal集成)模块可以使用。

这么说好像有点抽象,我举个例子。比如我们要做一个特殊的内容类型,比如说笔记本。(这里抛开CCK模块不说,我们手写内容类型),传统上,怕麻烦的人(喜欢从头构建自己程序的人),可能想着创建两个表,一个内容,一个分类表,将这两个create table语句写到install文件中,剩下的就是读取和操作了,似乎没有什么问题。但是这些东西drupal早已经给我们做好了,可以使用node_info钩子自己创建内容类型,自己定制表单,剩下什么都不用做。而且和节点搜索,节点类型限制等等相关模块接合的很好,只要我们把关于节点查询的sql语句用db_rewrite_sql包起来就好了。

写到这里,你可能会说,这个很简单啊,因为你可能自己手动或者用cck创建了很多内容类型了,已经很熟悉了。但我们应该想得更远一步,更多的数据可以抽象成节点,更多的关于分类我们可以使用taxonomy做出来,我相信国内写drupal代码的人很多代码经不起drupal化的考验,对drupal的钩子机制理解没有那么深入。

总之,多看几个系统内置的模块,让你的模块无缝的放进drupal中去,和别的部件正常工作,并且能相互通信,而不要孤零零的插入一些干燥的代码。