drupal建站技巧

关于Drupal中的patch

博客很久没有更新了,最近头有点痛。青岛的夏天来了,今天好热。。

好像跑题了,言归正转。最近有个朋友问我Drupal中的patch是怎么回事,他说用drupal半年了,但是没有遇到过要用patch的情况,于是就很迷惑。drupalchina论坛里经常见到有人提到patch,但是patch究竟是怎么回事,下面就patch的来龙去脉,做一个简单的说明。

Patch,英文意思是补丁,它并不是drupal的产物,它是一个linux的命令,说起它,不得不提linux的另一个命令:diff.在数学领域,diff是用来对2个集合求差的,patch是求合,在linux命令中,diff用来比较二个文件的不同地方,比如你是一个项目管理者,你让手下给你修改一下模块,修改好交给你后,你想看看他改了什么地方,就可以用diff命令,格式为:diff [命令行选项] 原始文件 新文件

例如

[hahalee@builder]$ diff -u a.module b.module

diff的常用参数如下:

-r 递归处理目录  -u 输出统一格式(unified format)    -N patch里包含新文件 -a   patch里可以包含二进制文件


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

Radioactivity-热门文章模块

 http://drupal.org/project/radioactivity ,这个模块应该是处理 最热文章 功能最专业的模块, 它可以结合 http://drupal.org/project/fivestar , 以及内置的comment模块,每个node被view一次,就会增加一些权重,结果可以用views输出。


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

主题制作

站长能够分享一下http://www.drupalsh.cn/的主题制作的经验和过程思路么?


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

jQuery的一个插件-Live Query

近来遇到一个问题,通过AJAX方式返回的结果,jquery的 document .ready 属性不起作用。document .ready是在DOM完全加载成功后执行,但是通过AJAX返回结果后,DOM已经加载完了,所以不会触发里面的javascript代码。

比如下面一段代码



if(Drupal.jsEnabled) { 
$(document).ready(function(){ 
$('a.un-pulish-num').livequery("click",function(){ 
var successfunction = function(data){
$('div.un-pulish-class'+data.nid).html(data.message);
$('#num-'+data.nid).fadeOut();
};
$.ajax({
type: 'POST',
url: this.href,
dataType: 'json',
success: successfunction,
data: 'js=1'
}); 
return false; 
});
}); 
}

它的作用是通过点击事件,动态更新结果。这个点击事件在页面第一次加载时,是有效果的,但是通过AJAX方式产生的结果,再点击就会失效了。

Jquery 1.3.x 增加了一个live方法,据说可以解决这个问题,写法如下,

 


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

Drupal白屏的诊断方法

近来公司新装一台服务器,装上Cent os 5.3后,然后是装apache,mysql,等,以为一切万事大吉,谁知道导入一个Drupal系统后,出现白屏。检查一下,服务器配制也没有什么不对,于是重新安装了一个全新的Drupal,完全正常,这就怪了,为什么在本地一切正常,到服务器上怎么就白屏呢。

后来发现服务器的PHP是5.0系统的,想到drupal有些模块要求PHP5.2以上,就升级了一下PHP,在网上查的Linux下升级PHP方法如下

# rpm –import http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
#
gedit /etc/yum.repos.d/utterramblings.repo
在打开的文件中加入以下内容:
[utterramblings]
name=Jason’s Utter Ramblings Repo
baseurl=http://www.jasonlitka.com/media/EL$releasever/$basearch/
enabled=1
gpgcheck=1
gpgkey=http://www.jasonlitka.com/media/RPM-GPG-KEY-jlitka
保存
# yum update php
***
***
重启apache
# service httpd restart

一切搞定,再装,竟然成功了。原来如此。。

但是,后来再用的过程中,经常还是出现莫名其妙的白屏,特别是在加载内容比较多时,比如在编辑内容时或者启用模块时,这此时候往往用的内存比较多,会不会是内存不足的问题?查看一下现在PHP的内存设置,32M,也忒小了点,马上开始升级内存。


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

关于drupal的主题设置

 Drupal的主题系统为我们内置了很多自定义的选项,比如可以通过 admin/build/themes/settings/yourtheme_name 来设置你网站的logo,icon,还可以设置是不是显示网站的Site slogan,Mission statement,Search box等等,那么,如果在我们的主题中加入额外的其它设置呢,通过一个例子演示一下。

 

这个例子的目的是让管理员可以通过后台来管理你网站的header图片。

为了实现这个目的,需要用到你主题下面的二个文件,theme-settings.php和template.php文件。如果没有,你可以创建这二个文件。

theme-settings.php的工作只有一个,就是实现一个钩子函数 - hook_settings().在这个钩子里实现你的主题设置功能,它返回一个form形式的数组。在里面的代码如下:

 


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

hook_link和hook_link_alter钩子函数

一般文章下面都有一些链接信息,比如一般有分类信息(Taxonomy),如果开启评论,会出现 添加新评论链接,等等,那么如何添加这些link呢?

Drupal中有个钩子,叫做hook_link,参数如下:hook_link($type, $object, $teaser = FALSE),
第一个参数 $type, 可能的值为node,comment等。
$object,如果type为node, 则$object就为node对象。
$teaser 如果为$node类型,则0,1表示该link是否显示在teaser中.

参考:http://api.drupal.org/api/function/hook_link/6

那么想修改别的模块生成的link呢,很幸运,drupal为我们提供了另一个hook - hook_link_alter(&$links, $node)
$links为引用类型,结构如下:

<?php
$links
["comment"] = array(
       
'title' => t('Your title'),
       
'href' => 'create/comment',
       
'query' => 'destination=node/'.$node->nid,
        );
?>

因为是引用,所以不用有返回值.


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

Drupal中创建多步表单

假如一个内容类型有很多很多个表单元素,那么我们就应该考虑用多步表单了。

有个模块,http://drupal.org/project/multistep ,这个模块信赖于CCK的Fieldgroup,用起来也挺方便。

但是如何用程序创建多步表单呢?下面用一个简单的例子来演示一下。这个例子有二步,第一步包含title,body,第二步是一个textarea,可以输入一

些额外信息。

drupal通过 $form_state['storage']['step'] 来检测多步表单。

第一步,我们构造表单,先检测$form_state['storage']['step'],如果没有值,显示第一页,如果有,则显示第二页。

<?php

/**
* Implement hook_form().
*/
function multistep_form(&$node, $form_state) {

// Initial step: display title and body fields.
if (!isset($form_state['storage']['step'])) {
$form['title'] = array(
'#title' => t('Title'),
'#type' => 'textfield',
'#required' => TRUE,
'#default_value' => isset($form_state['storage']['title']) ? $form_state['storage']['title'] : $node->title,
);


本文永久地址:http://drupalsh.cn/node/548 , 转载请注明出处.
同步内容