十二月 2008

Drupal模块中的"hook_theme"函数和拖拽排序效果

项目中要用到能通过拖拽来排序的效果。在drupal的后台中,有很多地方都是用这种方法排序的,比如block,taxonomy等,这种排序方法直观,方便,容易操作,用户体验度非常好。


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

如何自定义block中的区域

在Drupal中,有几个默认的block区块,Left sidebar,Right sidebar,Content,Header,Footer,那么如果我想自定义几个区块呢?比如我想在中间的右下面显示一块内容,想把这块内容放到一个block中,怎么做呢?其实很简单,查找官方的文档,发现可以这样:在theme目录下的info文件里,加上regions数组,比如
regions[my_header]= My header
regions[my_footer]= My footer
regions[my_tags] = My Tags

然后把自已创建的block先择放入就可以了,在前台页面的输出中,输出$my_header,就输出了这个block中的内容。另外要注意的是,在info里面加上自定义的regions后,要把默认的也加在里面,否则会把默认的丢掉,加上默认的,完整的如下

regions[left] = Left sidebar
regions[right] = Right sidebar
regions[content] = Content
regions[header] = Header
regions[footer] = Footer

regions[my_header]= My header


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

drupal中如何判断注册用户和其它用户

应客户要求,它的网站上要加一个forum功能。由于在做这个项目的时候,我们用的是默认的garland theme,页前台页面用的是客户要求的样式,所以前后台差别很大,要加这个forum,用默认的样式肯定不行了,于是我就用firebug一步步来查看,然后提取出了forum所需的样式,最后,我发现forum基本上是继承了system模块下面的defaults.css和system.css和forum模块下的forum.css样式,我就把这几个样式文件都引入了进来。发现基本还可以,虽然不是很符合这个网站的样子,但是因为这个网站的内容主要不是这个forum,所以客户应该能接受.


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

利用drupal中的jquery实现ajax效果

今天在做工作中遇到一个问题:由于注册页面是提交到第三方页面的,客户要求,在用户注册的时候,同时可以把自已的一些信息提交到自已的网站中,比如说用户定阅的newsletter,这是一个用户定阅邮件的模块,可以很方便的实现新闻的定阅等。由于注册按纽只触发一次,所以一般 的方法无法实现这个功能,这时候我就想到了用ajax来实现。以前了解过这方面的技术,可一直没有实际用过,上jquery的官方网站上看看,找到了以下一小段代码:
$.post("test.php", { name: "John", time: "2pm" },
function(data){
alert("Data Loaded: " + data);
});
我就直接贴过来了,开始发现没有反应,怎么点也没有效果,后来抛开Drupal,另外建一个页面,测试,接收到了返回的数据,说明这段代码是没有错的,然后再用到drupal,还是不行,然后我想是不是路径的问题,就直接在主目录下面建了一个文件,这次成功了。发现问题所在了,我为了想用drupal的API,像我网站的其它文件一个,用的是别名,在templet里做的判断,然后转向该页面。看来这种方种对jquery是有影响的。


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

如何利用drupal快速开发适合项目需要的前台页面

我们知道,在平常的项目开发中,一般都是先由美工把页面设计出来,切成HTML形式,然后再由编程人员来加入PHP代码。但是drupal,完全打破了这种常规的网页开发方式.如果利用drupal做商业项目的话,没有时间,也没有必要做一个theme,那么,如何才能快速开发一个前台显示页面呢?
在第一个项目的时候,是在page.tpl.php里面做一下判断。判断$node->type类型,然后include进自已设计的面页,如

<?php
switch ( $node->type ){
        case
"homepage":
    if(
arg() =="node"&&is_numeric(arg(1) )&&arg(2)==null ){
        include(
"page.index.tpl.php");
        return;
    }
    break;
?>

其中的$node->type就是内类型,这个可以用CCK自已来添加,homepage也可以替换成story,page等,接下来判断arg(0)是node,arg(1)是数字,这是根据把drupal的URL结构来做的判断.最后来一个break,停止执行page.tpl.php下面的内容.我们还可以根据别名来判断,然后直接引入我们的模版页
<?php


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

Drupal分页

在做第一个Drupal项目的时候,用到过分页,那时刚接触Drupal,完全不知道是怎么回事,但是项目时间紧,也没有太多的时候来研究,所以就利用drupal提供的变量写了一个分页效果,很是复杂。近来没事,想着看一下drupal的分页机制,起初也没有头绪,后来我从node的module里面提取了一部分代码,然后逐步分析,最后发现,其实分页只用一句PHP代码就实现了,晕,当时费了快二十行代码.

以下是演示代码:

<?php
  $result
= pager_query(db_rewrite_sql('SELECT * FROM {node} ORDER BY nid DESC'), 10, , NULL);
 
$nodes = array();
  while (
$node = db_fetch_object($result)) {
  echo
$node->title;
    }
$mypager = theme('pager', NULL, 10, );
echo
$mypager;

?>


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

网站终于建起来了

昨晚,终于买了discuz的空间,把网站建起来了.其实建这个网站已酝酿很久了,只是一直没有行动。现在这个网站还正在完善中,有很多地方有待改进,以后,我会在工作之余慢慢充实。在这个网站里,我会把我平时在工作中积累的有关Drupal的经验记录下来,希望能够帮助中国的drupal初学者. 已经是十二月的上海,真的有点冷了,希望这个冬天,能带给我希望.


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