二月 2009

Drupal CCK模块

一、 原理
通过hook_form_alter()挂接CCK Field,通过hook_nodeapi()对挂接的CCK Field进行各项操作(CRUD)。核心函数_content_type_info()搜集当前节点系统的field types列表,widget types列表,['field types'] ['formatters']列表,fields列表和content types列表,模拟如下
<?php
Array(
'field types' => array(
‘text’ => array(
‘label’ =>
‘description’ =>
‘callbacks’ => array (
‘tables’ => CONTENT_CALLBACK_DEFAULT
‘arguments’ => CONTENT_CALLBACK_DEFAULT
)
‘module’ =>
‘formatters’ => array (
‘theme_name’ => array(
‘label’ => t(),
‘field types’ => array(),
‘multiple values’ => CONTENT_HANDLE_CORE
‘module’ =>
)
)
),
)


本文永久地址:http://drupalsh.cn/node/80 , 转载请注明出处.

Drupal6多语言支持的一些思考

最近我们重新设计改版了我们的网站以支持多语言,这也是我们第一次在Drupal6(6.3)下构建系统。总而言之,Drupal6在内置多语种支持方面 比Drupal5相比有了非常大的提升,但是还是存在一些问题。借助于i18n模块,可以完善Drupal的多语种支持,但是系统核心还有一些问题需要修 正或者修改。
首先是定制菜单项的多语种显示。在Drupal6.3下,假设你已经创建了一个定制菜单项“About Us”,然后你通过"站点创建"->"翻译界面",搜索该菜单项的名称并翻译成"关于我们",结果发现在你切换语言的时候,菜单名称并不会跟着切 换。问题出在menu.inc文件里的函数_menu_item_localize()。如果是menu_link的话,名称不会通过翻译函数进行过滤, 而是直接输出。因此为了要让你的定制菜单跟随你的切换语言做相应切换,你应该让menu_link的名称通过函数t()进行翻译。


本文永久地址:http://drupalsh.cn/node/77 , 转载请注明出处.

Drupal 6 Menu系统

一、 原理
Drupal6的Menu被分为两种,一种是用于导航的Menu_router,一种是用于显示的Menu_links。Menu_links是Menu_router的一个子集。
二、 Menu Router流程
1、 系统接收请求之后启动,调用函数menu_execute_active_handler()进入Menu router系统;
2、 系统调用menu_get_item()函数寻找该请求路径对应的处理单元,判断该单元的access属性,如果为真,判断该处理单元是否需要加载额外的file文件,然后调用该处理单元的回调函数,返回相应的结果;
3、 在menu_get_item()内部,系统获取当前的$_GET[‘q’]路径,或者引用传入的路径,根据该路径组成一个优先调用的路径数组列表,在menu_router表里根据优先等级搜寻最适合的menu项,取出;
4、 调用_menu_translate()函数,将取出的menu项根据当前的实际路径值进行翻译。载入路径需要载入的对象,判断路径的access值,如果为真,进行_menu_item_localize();
三、 Menu Links流程
1、 通过调用menu_navigation_links()或者menu_local_tasks()进入Menu Links系统;


本文永久地址:http://drupalsh.cn/node/78 , 转载请注明出处.

Drupal Views模块

一、 原理
Views模块通过hook_menu_alter()插入页面项,通过hook_form_alter插入block项。模块的核心为view对象,通过执行view对象的execute_display()方法来获取输出,View对象是数据库表views_view的映射。对view对象的各个属性(如field、argument、sort、filter等)通过handler对象实现,view对象的界面方面则通过plugin对象和 hook_views_plugins()来实现。在views_theme()函数里通过调用views_fetch_plugin_data()将各个plugin集成到theme_registry里。
对于页面,view对象通过execute_hook_menu()方法获得该view对象的页面menu项,通过views_arg_load()函数加载路径上的对象,通过views_access()函数判断该menu项的access属性,通过views_page()函数来获取输出,而 views_page()函数内部则调用view对象的execute_display()方法。


本文永久地址:http://drupalsh.cn/node/81 , 转载请注明出处.

Drupal Theme系统

一、原理
二、流程
1. 系统调用函数theme(),进入theme系统;
2. init_theme()
3. theme_get_registry(),获得theme_registry列表;
4. 遍历theme_registry,选取当前调用的theme单元;
5. 判断该theme单元是否有[‘file’]、[‘path’],有则引用该文件;
6. 如果当前theme存在function,则调用该function;
7. 否则当前theme为template调用。默认渲染函数为theme_render_template(),可以自定义渲染函数和模板文件扩展名。
8. 执行该theme单元的preprocess functions注册函数,根据传进来的变量$variables['template_file']中系统中寻找合适的模板文件,执行渲染函数theme_render_template()。
三、API
1. hook_theme(),应用于module、theme_engine、theme里,返回theme单元数组;
2. 返回数组的参数:
<?php
Array(
‘hook_name’ => array(
‘function’ => ‘’, //调用函数,若省略默认为theme_hook_name;


本文永久地址:http://drupalsh.cn/node/79 , 转载请注明出处.

推荐一个构建多语言站必备的模块

近来需要对这个站点进行重新改版,客户要求用drupal来实现。这个站本身并没有什么特别的,以前都做过,主要的功能之一就是增加了多语言的支持。但是drupal默认的多语言有个缺点,它只能对单个文章进行多语言的切换,而对一个列表,就不起作用了。比如我用taxonomy作为菜单项,这时如果切换多语言,相应的列表就无法随着改变。
 
于是想到了用views来实现,在views的filters中设 Node translation: Language = Current user's languag,这样在切换的时候就可以达到要求了,但是这样还是很麻烦,每次显示一个列表就要创建一个views,而且首页的显示也是一个问题.
 


本文永久地址:http://drupalsh.cn/node/74 , 转载请注明出处.

如何在一篇文章中高亮显示PHP代码

  在文章中高亮显示PHP代码,一般我们可以用 highlight_string ( string $str [, bool $return= false ] ).但在drupal中,我们如何才能把它整合进去呢?
 


本文永久地址:http://drupalsh.cn/node/76 , 转载请注明出处.

如何用drupal创建基本的wiki系统

Build a Wiki System With Drupal
作者:  Raincity Studios---- zamir
Wiki是什么?

Wiki概念发明人沃德·坎宁安(Ward Cunningham)为Wiki下了定义:一群相互连接并可自由扩展的网页、一套用来储存与修改信息的超文字系统,所有的网页储存在一套数据库中,任何人透过具有表单功能的浏览器用户程序,皆可轻易加以编辑。
Wiki的特点
1.使用方便,维护快捷:快速创建、存取、更改超文本页面(这也是为什幺叫作“wiki wiki”的原因)。格式简单:用简单的格式标记来取代 HTML 的复杂格式标记。(类似所见即所得的风格)链接方便:通过简单标记,直接以关键字名来建立链接(页面、外部连接、图像等)。命名平易:关键字名就是页面名称,并且被置于一个单层、平直的名空间中。
2.有组织
自组织的:同页面的内容一样,整个超文本的组织结构也是可以修改、演化的。可汇聚的:系统内多个内容重复的页面可以被汇聚于其中的某个,相应的链接结构也随之改变。


本文永久地址:http://drupalsh.cn/node/73 , 转载请注明出处.

drupal中如何实现相关文章的显示(related article)

   关于这个问题,在昨天的drupal聚会上,我曾向teddy提问过,不过当时可能没有说清楚,我当时问他如何实现related article,然后他给我找了一个模块 http://drupal.org/project/related_content 。其实我不是这个意思,我的意思是如果去实现这个功能,我想要的是一种思路,一种方法,并不是一个简单的模块。
   我以前是这样实现的:用CCK创建一个filed,然后命名为keyword,然后在创建内容的时候,自已写关键词,比如你创建的某篇文章,想把它的关键词设为“drupal”,然后在显示这篇文章的时候,取到其中的keyword也就是drupal,然后用do_search()来搜索相关的文章,如果有就显示出来,如果没有就不显示。
 


本文永久地址:http://drupalsh.cn/node/72 , 转载请注明出处.

实现图片的幻灯片显示(slideshows)效果

今天去参加上海地区二月份的drupaler聚会了,收获颇丰。

teddy讲了如何制作一个图片slideshow效果,听的时候离的有点远,听的也不是很清楚,没有完全搞明白,晚上回来后仔细看了teddy的网站上的介绍,才真正的懂了。下面就翻译一下teddy的大作。


本文永久地址:http://drupalsh.cn/node/71 , 转载请注明出处.

Drupal建站心得

Drupal 是一个自由和开源的模块化框架和内容管理系统,用PHP语言写成。它也被称为内容管理框架,因为其功能已经超越了一般意义上的内容系统。Drupal可以运行在Windows和Unix/Linux操作系统上,支持IIS和Apache Web服务器,需要MySQL或者PostgreSQL数据库。
原自由Dries Buytaert所开发的一套社群讨论软件。今天,它已经成为很多网络流量很高的网页,包括The Onion,Ain't It Cool News,Spread Firefox,Ourmedia,KernelTrap,NewsBusters等等。它特别常见于社区主导的网站。


本文永久地址:http://drupalsh.cn/node/68 , 转载请注明出处.

精选30个优秀的CSS技术和实例

  今天,我为大家收集精选了30个使用纯CSS完成的强大实践的优秀CSS技术和实例,您将在这里发现很多与众不同的技术,比如:图片集、阴影效果、可扩展按钮、菜单等…这些实例都是使用纯CSS和HTML实现的。

  单击每个实例的标题可以被转向到该技术实例的相关教程或说明页面,单击每个实例的图片截图可以直接跳转到相应实例的Demo页面。

1.Hoverbox 图片集

一个纯净的基于CSS的图片集,鼠标悬停缩略图就会显示放大效果。


本文永久地址:http://drupalsh.cn/node/67 , 转载请注明出处.

240多个jQuery插件

  今天在Kollermedia.at上发现了一篇JQuery插件列表的文章,特推荐如下。


本文永久地址:http://drupalsh.cn/node/66 , 转载请注明出处.

Jquery语法总结和注意事项

1、关于页面元素的引用
通过jquery的$()引用元素包括通过id、class、元素名以及元素的层级关系及dom或者xpath条件等方法,且返回的对象为jquery对象(集合对象),不能直接调用dom定义的方法。

2、jQuery对象与dom对象的转换
只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。
普通的dom对象一般可以通过$()转换成jquery对象。
如:$(document.getElementById("msg"))则为jquery对象,可以使用jquery的方法。
由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。
如:$("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5]这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。
以下几种写法都是正确的:


本文永久地址:http://drupalsh.cn/node/65 , 转载请注明出处.

一些php常用的小技巧

PHP批最取得checkbox的值
1、命名
以下是引用片段:
<input type='checkbox' name='checkbox[]' value=$dwmyrow[banzhu] />

2、使用
当计划当作sql指令的一部分时:如果参与控制的字段是数值型的,则
以下是引用片段:
if(! empty($_POST['checkbox'])) {
$expr = join(",", $_POST['checkbox']);
$sql = "select * from tbl_name where field in ($expr)";
}
如果参与控制的字段是数值型的,则
以下是引用片段:
if(! empty($_POST['checkbox'])) {


本文永久地址:http://drupalsh.cn/node/64 , 转载请注明出处.

如何自定义CCK字段的输出顺序

  常用drupal建站的朋友都知道,CCK是一个不能不用的模块。它太方便太强大了,能让不懂一点技术的人创建出任何想要的字段,比如有些文章需要一个副标题,但是drupal中默认只有一个Title项,这时候就要用CCK创建一个字段了。
  但是用我用CCK发现一个问题,如果一个内容类型用CCK创建太多的字段,那么它们的顺序很难控制,比如如果你想创建一个副标题,理想的方式是把这个sub title放到title的下面,这样比较符合常规,而且客户操作起来也更容易理解,但是用CCK创建的sub title 默认是会出现在body下面的,这时候该如何办呢?
 
经过实践,发现用以下方法可以达到效果:
首先,在template.php文件中加一个函数 function garland_preprocess_node_form(&$variables) { }
然后再建一个node_form.tpl.php文件,在里面判断一下,比如我用CCK建的form名字叫products_node_form,就可以:


本文永久地址:http://drupalsh.cn/node/63 , 转载请注明出处.

网页的布局和配色技巧

  有一些关于“我”的事情大多数人可能都不了解:虽然我做设计已经5年了,但我第一个工作是 Flash 工程师,大部分时间都工作在 ActionScript 上。事实上,我的所有教育背景都有关电脑程序设计,而且从来没有专门学习过设计。
尽管如此,有些时候我确定我喜欢设计更多,特别是网页设计。所以我既不是权威的程序员,也不是优秀的艺术家。我只是一个喜欢干净、专业的外观设计,对网页设计略知一二的家伙而已。
我知道很多人很奇怪:一个根本没学过设计的家伙怎么能制作出美观的网站呢?是的,我认为可以做到。怎么做?就用常识!以下是8大有关干净网页设计常识:


本文永久地址:http://drupalsh.cn/node/62 , 转载请注明出处.

Drupal中一个超级强悍的CRM模块

  今天在看公司一个客户发来的文档的时候,发现一个很陌生的词 CiviCRM,Google一下,就发现了 http://civicrm.org/ ,一个针对Joomla和drupa的l插件,说是插件应该太勉强,应该说是一套系统,因为它实在太大了,下载压缩包就8M多,安装起来挺麻烦的,发现最新版要求PHP5.2以上,而且在windows下路径有点问题。如果只是想研究一下,建议看演示网址:http://drupal.demo.civicrm.org  .里面的功能比drupal本身要大很多.
 
  客户的网站是要求从drupal5.x升级到drupal6.x的。里面就用到这个civiCRM,看来以后得花点时间来研究这个东西了..


本文永久地址:http://drupalsh.cn/node/61 , 转载请注明出处.

单片机遥控显示学习板

目 录
摘 要 I
ABSTRACT II
1 绪论 1
1.1 单片机发展前景及其意义 1
1.2 单片机实验装置概括 1
1.3 本设计所作的工作 2
2 实验板单元电路分析与设计 4
2.1 红外遥控硬件电路 4
2.1.1 调制 4
2.1.2 发射系统 5
2.1.3 接收系统 5
2.2 红外遥控编码方式分析 6
2.2.1 载波波形及其数据格式 7
2.2.2红外遥控器的分析比较和选定 9
2.3 红外解码 10
2.4 单片机AT89C51 11
2.4.1 AT89C51系列单片机功能特性 12
2.4.2内部资源介绍 12
2.4.3 单片机复位及时钟电路 14
2.5 红外接收电路 15
2.6 矩阵式键盘电路 16
2.7 显示电路 17
3 学习板的部分实验例程 19
3.1 内存分配及管脚说明 19
3.2 遥控接收解码部分例程及说明 19
3.3 键盘部分例程及说明 22
3.4 显示部分例程及说明 23
4 软硬件调试 25
4.1 显示部分调试 25
4.2 键盘扫描电路调试 25
4.3 红外接收电路调试 26
4.4 实验板总调试 28
4.5 实验板使用说明 29
结束语 30
致 谢 31
参考文献 32

单片机遥控显示学习板

摘 要


本文永久地址:http://drupalsh.cn/node/59 , 转载请注明出处.

PHP的缺点

1.3 PHP的缺点
虽然作者非常欣赏PHP(否则也就不会有这本书),但是不可否认,PHP的缺点也是相当明显的。


本文永久地址:http://drupalsh.cn/node/58 , 转载请注明出处.

一些PHP实用函数

<?
function GetIP() { //获取IP
if ($_SERVER["HTTP_X_FORWARDED_FOR"])
$ip = $_SERVER["HTTP_X_FORWARDED_FOR"];
else if ($_SERVER["HTTP_CLIENT_IP"])
$ip = $_SERVER["HTTP_CLIENT_IP"];
else if ($_SERVER["REMOTE_ADDR"])
$ip = $_SERVER["REMOTE_ADDR"];
else if (getenv("HTTP_X_FORWARDED_FOR"))
$ip = getenv("HTTP_X_FORWARDED_FOR");
else if (getenv("HTTP_CLIENT_IP"))
$ip = getenv("HTTP_CLIENT_IP");


本文永久地址:http://drupalsh.cn/node/57 , 转载请注明出处.

利用PHP程序设定防止MySQL注入或HTML表单滥用

  MySQL注入的意图是接管网站数据库并窃取信息。常见的开源数据库,如MySQL,已经被许多网站开发人员用来储存重要信息,如密码,个人信息和管理信息。

  MySQL之所以流行,是因为它与最流行的服务器端脚本语言PHP一起使用。而且,PHP是主导互联网的Linux- Apache服务器的主要语言。因此,这意味着黑客可以很容易地利用PHP就像Windows的间谍软件一样。

  黑客向一个无担保的网页表单输入大量恶意代码(通过下拉菜单,搜索框,联系表单,查询表单和复选框)。

  恶意代码将被送到MySQL数据库,然后“注入”。要查看这个过程,首先考虑以下基本的MySQL SELECT查询语句:

  SELECT * FROM xmen WHERE username = 'wolverine'

  此查询会向有“xmen”表的数据库要求返回某一段MySQL中用户名为“wolverine”的数据。


本文永久地址:http://drupalsh.cn/node/53 , 转载请注明出处.

php分页详细介绍

1、前言
分页显示是一种非常常见的浏览和显示大量数据的方法,属于web编程中最常处理的事件之一。对于web编程的老手来 说,编写这种代码实在是和呼吸一样自然,但是对于初学者来说,常常对这个问题摸不着头绪,因此特地撰写此文对这个问题进行详细的讲解,力求让看完这篇文章 的朋友在看完以后对于分页显示的原理和实现方法有所了解。本文适合初学者阅读,所有示例代码均使用php编写。
2、原理
所谓分页显示,也就是将数据库中的结果集人为的分成一段一段的来显示,这里需要两个初始的参数:
每页多少条记录($PageSize)?
当前是第几页($CurrentPageID)?
现在只要再给我一个结果集,我就可以显示某段特定的结果出来。
至于其他的参数,比如:上一页($PreviousPageID)、下一页($NextPageID)、总页数($numPages)等等,都可以根据前边这几个东西得到。


本文永久地址:http://drupalsh.cn/node/55 , 转载请注明出处.

SEO的一些建议

SEO是否能够迅速拥有效果应该从刚做站开始,也就是说,无论你是 技术还是美工,一切都应做好SEO规划,下面介绍一下做站的模式,这种模式非常有利于SEO,希望大家能够参考其中之有利部分。
一、网站结构
  网站的结构应该让目录的物理结构与逻辑结构完全吻合,目录的名称应该用拼音或英文,如果您针对百度SEO的话,拼音能好一些,而针对GGSEO的话,目前看来,英文或拼音都可以。
二、网站关联
  对于搜索来说,非常希望你的站能透过任意网页收录到整站内容,面对搜索的这一嗜好,我们在做的 站的初期就应该把每一个网页关联起来,具体作法有以下几个:
1、首页都具有网站栏目的文字链接,也就是导航,但不能是JS的。
2、每一篇文章都有“上一篇”和“下一篇”的文本链接。每一篇文章都有指向首页的文本链接。
3、每一篇文章都有相关文章,数量在10~20篇左右,如果您能把这些相关文章都包括特定关键字的话 ,相信,您在百度将有好的排名。
4、网站栏目首页尽量不要有其它栏目的文章,以上第3点的相关文章尽量是同一栏目的,不要有其它栏目的文章。
三、网站首页


本文永久地址:http://drupalsh.cn/node/54 , 转载请注明出处.

PHP验证码工具-Securimage

Securimage是一个开源免费的phpCAPTCHA脚本,它可以用来生成复杂的验证码图片,帮助您的网站<防止spam。它可以轻松嵌入网站已存的表单中,为您的网站提供spam机器人的防护。它可以运行于大部分支持php(GD)的webserver上。

*点击这里查看快速指南
*Securimage实例
*下载最新版本

Securimage的特性:


本文永久地址:http://drupalsh.cn/node/52 , 转载请注明出处.