Drupal入门

这个Drupal入门,已经停办了,限于站长的精力有限.很早以前的事了,但是关于这个计划,一直没有停止,它将会融入到我的Drupal培训班中.

 

 

Drupal6发布已经有半年多了,并逐步的成为了drupal建站的必选版本.为了推动drupal在中国的普及,应用,我决定写一本Drupal6的中文教程.当然,限于自己的水平和精力,这本教程的读者仅限于drupal初学者.对于高手来说,仅仅具有一点点参考意义.

 

另一方面,由于drupal在中国的受众还是比较少的,除了少数人在使用drupal以外,其中的大部分也仅仅是由于工作的需要,跟多的人根本就没有听说过这个国外的建站工具,所以写书是很难从中赚到钱的,也就没有出版社去出版这样的图书.所以我决定写本电子版的,把它放到我的网站zhupou.cn上.让更多的人受益。

 

本书的免费版,和付费订阅版将同时发布,什么是免费版,放到zhupou.cn上的就是免费版,里面内容将会翔实丰富,付费订阅版是免费版的升级版,里面带有插图,而且错别字较少,个别地方得到了修正。付费订阅版将会通过电子邮件的方式,将带有插图的word文件,发到你的邮箱中。每天有更新,每天就会有电子邮件。

 

和别人不同,我是专职维护这个站点的,没有人为我付费,所以只能靠自己的读者,来获取一些生活费用。我也没有投资,也没有人支持。所以想出来了这个办法。我会尽量的把不带插图的文章写得明了一些,同时也希望大家能够给我以支持。

 

另一方面,drupal涉及到的范围很广,第3方的模块很多,我不可能每个都熟悉,对我来说,熟悉核心模块,acquia精选的模块,以及特别流行的,特定类型的模块比如ubercart,这是我目前阶段努力去掌握的。对于其它模块,许多相关的问题,限于精力的原因,暂时不去学习。

入门教程的大致内容:包括安装,中文化,核心模块的讲解,简单网站的建设,以及主题方面的基础知识。重点在于核心模块的讲解,附带的介绍acquia精选的模块。因为drupal已经升级到了6.x,原有的相关资料早已经过时。

 

对付费版本,我会在免费版的基础之上,每篇文章阅读3遍,以消除其中的不足,错别字。另外就是插图,会截取大量的插图,让你学习起来一目了然。让付费用户享受相应的服务。如何付费,我会给出相应的付费指南,方便大家订阅。

相关链接: Think in Drupal

Drupal版本:

Drupal中文手册

主要是Drupal中文手册的导航,方便大家访问.Drupal英文手册都是各地的Drupal爱好者,开发者,贡献出来了,里面有丰富的内容。而且有专门管理。但是由于手册文章不是由同一编写而成的,所以里面每篇帖子的风格,习惯,用语也不太一样。而个别地方 还有一些不确的地方。

又限于译者的水平有限,不可能,也不实际将Drupal的方方面面都完全掌握了,所以对drupal手册原文的理解,可能会有所出入,又限于自己的资源精力都有限,文章中不免有错字,错误之处。如果读者发现了,不妥的地方,可直接通过电子邮件联系我。

drupal中文手册,主要是对Drupal手册的翻译,也包含译者自己原创的文章,实践经验。

手册的版权,将于Drupal官方手册的版权保持一致,本站所有文章,代码,都采用这种共享的版权方式。就是共享,非商用方式发布,同时也以GPL方式发布。

站长的译文:

1,drupal专业开发指南(仅供学习参考使用)

2,主题指南(Drupal 6)

3,Drupal简明教程

4,Drupal主题开发指南(v5)

更多手册资源,以及原创文章,将会陆续添加中。

Drupal版本:

Drupal主题花园网站建设实践

上次介绍了 http://themegarden.org 网站以后,我就打算把它改造成中文版的.我看到drupalmodules网站的时候,也想把它改造成中文版的,但是限于后者需要将大量的模块汉化成中文,这个计划还没有实施。但是主题花园的汉化,相对比较容易一些,而且工作量要下一些,涉及到的功能也不多。

 

       然后就决心,自己也实现一个功能一样的网站。要实现什么样的功能呢?我就跑到http://themegarden.org上不断地点鼠标了,看看人家是怎么做的。首先,看到的就是主题切换,然后看到的是前一个主题,后一个主题这样的导航,以及随机主题,当前主题,另外就是前10个主题,后10个主题的导航。

 

   主题切换,以前从来没有遇到过。因为在项目中,一个网站通常只有一个主题,用不到之间的切换,语言切换我倒是做过,主题的切换不行。我看到http://themegarden.org上面使用了&theme进行主题切换,我直接在自己的网站上,也加了这个后缀,但是不管用。

 

   我在drupal的后台,看了半天,把核心主题全都启用了,但是还是看不到用户的主题切换功能。我查看自己的用户帐号,甚至专门为此建立了一个测试帐号,用来查看在用户的帐号之下,是不是可以选择主题。还是不行。

 

       应该有相关的扩展模块吧? 在google.com上搜索,drupal,theme,发现里面的内容,都是讲如何制作主题的,国内的这方面的内容,也没有。我重新来到了http://themegarden.org网站,使用firefox,firebug查看里面的源代码,但是还是没有发现相关的模块,他们是不是对此保密了。自己终于有点泄气了。

 

       为什么别人可以实现,自己就不能呢?喝了一口水,继续使用google,主题切换,主题切换,主题切换,切换用英文怎么说?“switch”,虽然自己英文不咋地,但是单词量还是比较丰富的。drupal,theme,switch, google.com,终于发现了目标。虽然没有找到相应的模块,但是我看到有人在drupal.org上询问相同的问题,theme switch help,进入这个页面,看有没有人回答他的问题,果然,在问题的下面,有人推荐使用Theme Switch Module 。谢天谢地,drupal的强大就在于此,你想要实现的功能,大多数时候,别人也遇到过了,而且有了相应的模块可用,这些模块是经过很多人的摔打铸造而成的,所以质量上比请人开发的通常还要好一些。接下来,介绍switchtheme模块。

相关链接:  Think in Drupal

Drupal版本:

drupal建站

难点解决了,程序写好了,模块也独立出来了,但是并不意味着网站搭起来了.其实要做的东西还有很多,比如说,开始的时候,只有5个核心主题用来测试.而且只有两个节点,节点中的内容基本上是空的.

 

第一个问题,就是把模块中英文的地方,全都换成了汉语,另外把测试时候的2个主题换成了10个主题.这个后来遇到了一点点小问题,已解决.另外就是编辑了节点,在里面添加了内容,就是现在大家看到的.最后要解决的就是,RSS,和搜索了.

 

不过这两个用的都是默认的功能,首先是启用RSS模块,也就是模块列表页面排在最前面的Aggregator.接着对它进行配置.首先是权限的配置,授予匿名用户登录用户”阅读新闻feed”的权利.接下来到内容管理下面的Feed 聚合器中添加feed(种子).这里添加了两个Drupal主题新闻,对应url为http://drupal.org/taxonomy/term/15/0/feed, 设置其更新周期为1天.另一个就是Drupal新闻,对应的url为http://zhupou.cn/rss.xml, 更新周期为1天.这样就添加了两个RSS页面.注意这里的url,不是网站上一级导航的url,一级导航中的为, aggregator/sources/1,也就是网站内部的路径.添加好以后,并不能立即看到内容.

 

在Feed 聚合器的管理页面,在每个feed的项目中,有个更新条目的选项,点击这个可以手工的更新RSS的内容,当然,你也不能永远的手工更新,这就需要配置cron任务了,我介绍过懒人的cron模块,也就是poormanscron,当然你也可以配置linux下面的cron任务。这个我就不讲了,我开始作drupal的时候,cron都不知道干什么的,也不会配置。所以对于那些刚刚接触的人来说,要了解这一点,这样系统将会自动地为你更新。

 

接下来就是启用search模块。启用后,需要到站点设置〉〉搜索设置页面(admin/settings/search)对其进行配置,当然这里我用的都是默认值,简单CJK(中日韩字符)处理,这一项我选择了,我知道有中文分词模块可用,但是还是使用了自带的,毕竟是演示么。当然这里可以配置的还有每次索引的条目数量,最小字数,以及权重。默认的就可以了。启用搜索以后,就出现了搜索框了,我用的是garland,默认主题就是这一个。搜索框是一个变量,可以直接输出到主题下面的,我也看到在区块的列表页面,多了一个搜索的区块,但是没有启用这个区块。是不是支持搜索变量,这个是主题决定的。当然这个时候,我看到了一件事,我还没有对网站进行汉化。因为搜索框中的字符是英文的,本来打算只汉化这几个字,但是不知道怎么弄,就直接把整个中文包都导了进来。汉化我以前讲过,这里就不多说了。

 

最后解决的问题就是,在左边的导航中,多了一个Feed 聚合器 链接,匿名用户访问网站时,是看不到管理的导航菜单的,但是能够看到这个菜单,想把它去掉,因为themegarden上没有这一项。怎么办?导航到“admin/build/menu-customize/navigation”,在菜单列表中,找到这个菜单,将它和它的子菜单禁用掉。就可以了。也就是将启用这个复选框中的勾号去掉。

 

现在整个网站,在我的本地就跑起来了,看样子还不错。

相关链接: Think in Drupal

Drupal版本:

使用Switchtheme模块切换drupal主题

     先简单的介绍一下这个模块,模块的下载地址为: http://drupal.org/project/switchtheme

模块用途,就是为你添加一个主题切换区块,在这里面,你可以选择主题,进行切换.而且你可以为主题设置更加友好的可读性更强的名字,并且可以根据用户的角色,来控制哪些用户可以切换主题,哪些不可以切换.另外,从6.x开始,这个模块开始支持了Browscap模块,以根据用户的浏览器来切换drupal主题。

 

       另外在Readme文件中,介绍了更详细的信息,你可以把主题实现大、中、小,3个版本,然后让用户在3着之间进行切换。

   接下来,要做的就是安装这个drupal模块,以及阅读里面的说明。它的配置是很简单的,比如为theme设置用户友好的名称,admin/settings/switchtheme,不过这里我没有配置。直接按照说明,进入区块列表页面,这就看到了这个模块创建的两个区块Switch theme form,Random theme,启用这两个区块,同时在其它的主题也启用它们,这里仅仅涉及到了核心主题。呵呵,终于看到效果了。很好,很强大。

 

   这里的随机主题模块基本上就是我想要的了。而且启用了这个模块以后,就可以使用&theme=这种方式切换主题了。不过遗憾的是,这个模块只实现了两个区块,前一个主题,后一个主题,当前主题,这些都没有实现,如果是现成的,那就最好不过了。

  

     既然没有完全实现我想要的,那么就看看这个随机模块是怎么实现的吧。我就打开了这个模块的源代码,察看随机主题区块对应的函数:

function switchtheme_display_random_block() {

  $themes = list_themes();

  shuffle($themes);

  foreach ($themes as $key => $theme) {

    $theme->screenshot = dirname($theme->filename) .'/screenshot.png';

    if (file_exists($theme->screenshot)) {

      // Return the first theme with a screenshot.

      $output = l("<img src=\"". base_path() ."$theme->screenshot\" alt=\"preview of $theme->name\"/>", $_GET['q'], array('query' => 'theme='. $theme->name, 'html' => TRUE));

      return $output;

    }

  }

}

 

    看完这个函数,当然这个drupal模块的源代码,我都读了一遍,顿时觉悟了,又到api.drupal.org上查看了函数list_themes,整个网站的难点,就这样被我攻克了。下面给大家讲解,怎么具体实现的。

相关链接: Think in Drupal

Drupal版本:

天下代码一大抄

我常给人说,自己不会php,确实不怎么会,仅有的一点知识,还是学习drupal的时候顺便学习的.但是这并不妨碍使用drupal.其实很多熟悉drupal的人并不大懂php.

 

下面将一下,我是怎么实现这个自定义的模块的.我批判过直接修改模块的代码.实际上,自己也常常直接修改.当我看到了switchtheme,看完它的代码以后。我首先阅读了list_themes这个函数,通过这个函数的定义,我了解到了,drupal的theme是存放在system表中的。打开数据库,浏览了一下这个表的内容。如果实在不行,自己还可以直接读取数据库。我是这么想的。

 

  $result = db_query("SELECT * FROM {system} WHERE type = '%s'", 'theme');

读完代码了,类似的功能也找到了。那么就开始动工了,直接修改switchtheme.module. 不过需要现有一个思路,比如动态的显示前一个主题这样一个区块。首先想到的,显示一个静态的主题区块。然后再将它改造成动态的。

 

在switchtheme_block函数中,添加以下内容:

$blocks[2]['info'] = t('Previous theme');

elseif ($delta == 2 && $op == 'view' && user_access('switch theme')) {

    $block['subject'] = t('Previous theme');

    $block['content'] = switchtheme_display_previous_block();

    return $block;

  }

 

然后再创建一个switchtheme_display_previous_block()函数。让这个函数返回一个静态的$output;这样,就可以启用这个区块了,而且在上面可以看到这个区块中的内容了。由于开始的时候,这里是静态的,所以接下来需要向switchtheme_display_previous_block(函数中添加逻辑代码。list_themes()函数返回来的是一个数组。这里需要对php的数组进行处理,我对这方面不熟,以前有一本很好的参考书,后来留到了原公司了。所以只好google一下。很快就找到了关于数组的php函数,里面有相关的介绍。

 

边找函数,也在边思考具体的逻辑,首先在程序中,我需要找到当前的主题,根据当前的主题,我让指针向前移动一位,就可以找到前一个主题。既然list_themes()把所有的主题都读了进来,直接进行数组操作就可以了。

 

当前的主题比较好找到,代码有现成的:

$current_theme = !empty($custom_theme) ? $custom_theme : $user->theme;

 

不过注意这里,$custom_theme是个全局变量,使用以前需要global一下。这个是我在调试的时候发现的,其实拷贝的时候,就带上了,后来又用到的时候,忘记了global,所就出了错误。很快就定位到这里了。所以提醒一下,这里的当前主题是存在session里面的。找到了两个函数,ksort(),prev()这两个就够用了。我现在有了当前的主题,有了主题数组,如何让数组的指针直接指到当前的主题之上,我觉得应该有现成的方法,但是我不会,没有用过,所以只好使用foreach()来一个一个的判断了。最初的代码如下:

 

global $custom_theme;

          $themes = list_themes();

          ksort($themes);

          $current_theme = !empty($custom_theme) ? $custom_theme : $user->theme;

     foreach ($themes as $key => $theme) {

       if($key==$current_theme){

         break;

       }

     }

          $previous_theme = prev($themes);

 

        后来debug,发现指向了当前的主题,原来php的数组找到了当前的主题以后,会把指针向下移动一位,所以我又加了一句$previous_theme = prev($themes);

 

这样就找到了前一个主题,然后对其进行输出:

          if($previous_theme){

                 $previous_theme->screenshot = dirname($previous_theme->filename) .'/screenshot.png';

                 $output = l($previous_theme->name, $_GET['q'], array('query' => 'theme='. $previous_theme->name, 'html' => TRUE));

                 $output .="</br>";

                      $output .= l("<img src=\"". base_path() ."$previous_theme->screenshot\" alt=\"preview of $previous_theme->name\"/>", $_GET['q'], array('query' => 'theme='. $previous_theme->name, 'html' => TRUE));

          }else{

            $output =t('这个主题是第一个,前面没有主题了^_^,你可以选择下一个主题');

          }

      return $output;

 

最初这里也是没有if判断的,只有前面的逻辑代码,后来发现,当跑到边界的时候会出乱子,所以加了一个if语句用来判断边界条件。简单的if语句我还是会的。

 

再后来,在边界附近有发现了问题,把前面的两个prev改为了:

$previous_theme = prev($themes);

          if(!$previous_theme ){

            end($themes);

          }

  $previous_theme = prev($themes);

这里面又加了一个判断,终于搞定了。

 

上面的这些代码都是从这里,还有从那里拷贝过来的。包括拼凑的字符串。

 

接下来,一口气,把这里的逻辑写完了,花了4个小时,就把这个网站的难点给搞定了。当然这样的代码,没有注释,效率也不是很高,不过这个网站,这些代码,对于他人也没有什么大用,仅仅用于教学,以及方便大家预览drupal主题使用。

 

我是把逻辑直接放到了switchtheme模块中,后来功能实现以后,自己就把它独立了出来。当然,里面的字符串也都直接替换成了中文的。令我惊讶的是,拷贝出来以后,改了改名字以后,就可以正常工作了。

 

当然,能够这样的解决这个问题,我还是有些基础的,比如两年的时间自己读过各种各样的代码,就拿drupal来说,内核的代码,我是读过一遍的,还有项目中的各种php代码,虽然自己遇到问题,不能将函数直接写书来,但是,知道类似的函数,在那里可以找到。也知道如何修改一个函数。

 

在项目中,大多数时候,都是在抄袭别人的代码,自己仅仅是一个IT民工,谈不上任何的创造性

相关链接: Think in Drupal

Drupal版本:

脏活

一个网站建好以后,要有好的内容,我这个网站是关于主题的,所以要从drupal.org上下载相应的主题,以展示给大家。当然,drupal6.x的主题很多的,光点鼠标就费很大的劲,下载以后对其进行解压缩,放到本地网站的themes目录下面,最主要的一点是解压后的文件,有两层,你需要复制里面的一层。因为上级目录是“themename6.x.1.2”这样的形式。最后需要将它们上传到虚拟主机上,每次不能启用太多的主题,一次20个,每次主机都要费很大的劲才能替我完成使命。112个第3方主题就这样被我放到了线上,当然,个别的地方还需要配置一下区块在区域中的位置。而且个别主题存在这样或者那样的问题。第3方的嘛,也就是供大家参考使用。如果想更加专业的话,那么还是自己订制比较好。

 

这里顺便讲到两点,一个就是子域名的设立,这个以前从来没有用过,就是建立一个theme.zhupou.cn这样的域名,首先是在域名的下面添加这样的子域名,并将其IP指向到虚拟主机,在虚拟主机上,也添加一个子域名,这样在subdomains目录下面,就多了一个theme目录,要上传的网站就放到这里。

 

还有一点,就是theme.zhupou.cn,访问这个网址,需要将其重定向到theme.zhupou.cn/drupal-6.6,这个就是在theme.zhupou.cn对应的目录下面,添加一个index.php,在php代码中,包含一句重定向的语句。

 

到此整个网站就建立起来了,drupal5.x的主题网站,什么时候,有时间了再搭吧,估计现在大家都在用6,所以5的可以缓一缓,最主要的是,或真的太脏了。拷贝,粘贴。拷贝粘贴。体力劳工。

 

相关链接: Think in Drupal

Drupal版本:

Drupal的用户管理

Drupal的用户管理包含多个方面,访问规则(Access rules),权限(permissions),角色(roles),用户设置(User settings),和用户列表(Users)。当你首次接触drupal时,看到这样的用户管理,你会觉得非常简陋,实际上,随着你经验的增长,你会慢慢的发现,drupal的用户管理是极具扩展性的,你完全可以在此基础上,建立符合自己实际的用户管理体系。当然有时候,你需要借助一些扩展模块,或者自定义的模块。

 

对于刚刚接触drupal的用户来说,首先需要配置的就是用户设置页面。我们先看看这个配置页面。导航到admin/user/settings,这里面可以配置的有,用户注册设置、用户电子邮件设置、签名设置、和图片设置。

 

在用户注册设置下面,你可以决定是否对外开放注册功能,里面有3个选项,(1)只有站点管理员才可以添加新用户。(2)用户可以自己创建帐户。(3)用户可以建立帐户但需要管理员审核。第一种方式就是不开放注册功能,第2种方式就是完全开放,第3种方式是半开放。另外在这里你可以选择,是否需要验证电子邮件地址。验证的话,那么注册时,就不需要输入密码了,只需要输入用户名,电子邮件就可以了。如果你输入的电子邮件地址正确的话,那么系统将会给你发一封电子邮件,里面包含了密码信息,以及登录链接。如果不需要验证电子邮件的正确性,用户注册时,那么可以自己直接设置密码。在用户注册指导里面,你可以输入一些提示信息,用来帮助用户注册,这些提示信息,将会出现在注册页面中表单的顶部。

 

在用户电子邮件设置中,你可以设置与用户相关的电子邮件发送。比如用户创建时,向用户发送一封电子邮件。重设密码时,向用户发送一封电子邮件。以及激活用户帐号,删除用户帐号时,等等,都可以向用户发送邮件。注意,这里的邮件标题,和邮件正文都是可以配置的,在邮件正文中,可以使用系统提供的令牌(token),也就是可用的变量。如果你觉得默认的邮件模板不能满足你的需要的话,你还可以按照需求自己邮件正文模板。

 

最后,可以设置签名档,和用户头像。签名档就是帖子的最下面的签名,用户头像,就是帖子旁边显示的用户头像。这两个主要用于论坛,博客这样的网站。

 

我的实践经验,在zhupou.cn创建初期,我是关闭注册功能的,后来就开发了注册功能,但是需要管理员的批准,由于自己的网站,发送电子邮件的功能,还没有配置好,所以我就允许了用户的直接注册,而且不需要注册认证。对于其它的选项,我都是用的默认的,包括签名档,和用户头像,这些都没有启用。

 

当然,你在项目中,需要根据自己的需要来进行配置,有时候,现有的功能可能并不是你所想要的,这时候,你可以考虑一下一些相关的扩展模块。比如LoginTobogganPersistent Login,等等,你可以根据需要寻找相应的模块。

相关链接: Think in Drupal

Drupal版本:

drupal Views2模块入门

     想不用编码就创建一个强大的网站吗?这是很多不懂IT,不懂编程语言的朋友梦寐以求的事情.在drupal中,不需要编码,就可以实现许多强大的功能。CCK我们暂且不提,我们来看看Views2模块。

 

    Views2模块是acquia drupal精选的模块,前两天,Views模块的核心开发者,因为对views2的贡献,被提名为全球开源CMS MVP的候选人。由此可见Views模块在drupal中的地位,以及受欢迎的程度。

 

   现在就让我们开始学习Views2。Zhupou.cn开启了论坛功能,并且启用了高级论坛模块,使得网站的社区性更强了。现在想要实现的是,像drupal china以及drupal.org一样,把最新的论坛帖子,最新的评论列出来,放到右栏下面。

 

   我来给大家看看我是怎么实现的。首先是安装views2。导航到模块的列表页面,由于我用的是acquia drupal,所以里面已经有了views模块,现在就启用它。

 

这里面有3个模块,views,Views exporter, Views UI。我看到Views是3者的核心,觉得只需要启用这一个就可以了,为了尽可能的不多装模块,开始我只启用了它一个,结果我横竖找不到Views的管理界面,后来发现,需要启用Views UI模块。

 

在这里我们看看views UI模块的说明,没有这个模块,你就不能创建和编辑你的views了。所以我就启用了这个模块。Views exporter是用来导出views的。我这里不需要这个功能,所以就没有启用这个模块。

 

对于初学者来说,一下子把3个模块都装上,是再好不过的了。不过我这里是在线上,所以只启用了两个。现在就可以看到views的管理界面了。导航到admin/build/views,在页面的前面,你会看到

     

       你会看到List,add,Import,Tools这4个链接,在下面是一个提示,告诉你如果你启用了高级帮助模块,那么你会看到更多的帮助信息。再往下面,就是一些过滤条件,以及排序条件,当你的views很多时,编辑这些views的时候,可能就需要对其进行查找,使用这个过滤条件,可以帮助你查找你要编辑的views。

 

      再往下面,就是Views模块自带的一些views,也就是默认的,比如:

      默认提供的有archive,comments_recent, frontpage,glossary,taxonomy_term,tracker,  这里面其实已经有了一个最新评论的views了。不过为了说明问题,还是让我们再创建一个自己的views吧。

相关链接:Think in Drupal

Drupal版本:

使用drupal Views2模块来创建一个最新评论区块

虽然Views中自带了一个默认的最新评论view(视图),但是为了说明问题,我们自己创建一个,实际上我开始并不知道有个默认的view(视图),如果知道的话,就使用默认的了。

 

首先,点击“add”(添加)按钮,以创建一个view(视图),我们进入了页面admin/build/views/add,如图所示:

 

在这里需要输入视图名称(view name),视图描述(view description),视图标签(view tag),以及视图类型(view type)。最后的按钮是“下一步”(next),也就是说,输入这些内容以后,仅仅完成了视图(view)创建的第一步。

 

视图名称(view name),就是视图的内部名称,也就是视图的标识,这里面只能使用字母数字下划线,不能使用其它的字符。这里我输入了“latest_comments”.

 

视图描述,就是对视图的解释说明,也就是给人看的,这里我输入了“最新评论”,这一点我就做的不是很好,应该给出一个更详细的描述。

 

视图标签,我开始不知道是干什么的,看了看下面的说明文字,是一个可选的标签,用于视图的管理界面。开始没有明白这个字段的用意,既然是可选的,就不填了。后来发现,这个字段就是Views的管理界面admin/build/views中,过滤条件里面的一个字段。不过这个字段确实没有太大的用处。

 

视图类型,这个看看下面的选项就知道它的含义了,可选的类型有节点(Node),评论(comment),文件(File),节点版本(Node revision),术语(term),用户(User)。这里我们选择评论。在这里注意的是,试图类型一旦选好,就不能更改了。

 

好了,我们点击“下一步”(Next)按钮,来看看下面还有哪些步骤。

 

这个就是新建的试图的操作页面,你需要在这里为视图进一步添加相关的设置。我第一次看到这样的一个页面,一下子就懵了,和原来的Views的用法完全不一样了,看来需要好好的学习一下。

 

学习这个模块的最佳方式,莫过于自己亲手点点鼠标了,这点点,那点点,有时候会给你蹦出来一些警告信息,错误信息,我们就当人工的给这个模块做测试了。我已经使用Views创建了两个区块了。大致了解了这个页面的操作。

 

在这里页面的下面,我们看到了预览功能,就是实时查看视图的效果的。如图所示。这个不用管它。

相关链接: Think in Drupal

Drupal版本:

使用Views2.1添加最新评论区块(1)

在正文的左边,有个”Add display”按钮,在按钮的上面,有个下拉选项,其中默认为Page(页面),在这个下拉选择框中,可选的选项有Attachment(附件),Block(区块),Feed(种子), Page(页面),后面3个一看就知道是干什么的,我以前用过,Attachment(附件)是新加的,我没见过,不过在这里,我们还用不到它。

 

       选择Block(区块),点击“add display”,如图所示:

 

现在开始配置右边的选项。在Basic settings(基本设置)中,可以配置的有Name(名称),Title(标题),Style(样式),Row style(行样式),Use AJAX(使用AJAX),Use pager(使用分页器),Items to display(展示的项目数量),More link(更多链接),Distinct(唯一的),Access(访问),Exposed form in block(在区块中显示表单),Header(页首),Footer(页脚),Empty text(空文本),Theme(主题)。

 

    在更右面,还有5个配置选项,Relationships(关系),Sort criteria(排序标准),Arguments(参数),Filters(过滤器),Fields(字段)。

    当你点击相应的配置选项时,注意页面的变化,配置区域的下面会自动地根据你的选项,显示出来一个表单,让你专门用于该选项的配置。我的配置如下所示:

    视图标题:

    样式:

    行样式:

    字段的设置,在这里首先添加了Comment:Title字段,下面是它的设置。

 

其它的配置选项,我没有用到,然后保存。进入视图列表页面,找到刚刚创建的视图,将其启用,这样在区块列表页面,就会多出来了一个区块,将这个区块指定到右栏区域。我们就得到了一个评论列表区块。当然,这里面还有一些问题,比如我现在就发现,这些评论不是最新的。发现不做的地方不要紧,我们还可以继续学习。

    我们这样就使用views2创建了第一个区块。

相关链接: Think in Drupal

Drupal版本:

使用Views2.1添加最新帖子区块

我使用Views创建了一个最新评论区块,尽管还有些问题,但是基本上学会了如何使用Views,很快,我就决定创建第2个区块,那就是最新论坛话题区块。

第一步,和前面一样,就是输入视图(view)的内部名称,描述,标签,和选择视图类型,在选择视图类型时,我选择了节点(Node),然后就进入了视图的配置页面。我先给大家看看我配置好的样子。

 

上面这个图是defaults时的截图,这里应该选择区块(Block)的给大家看。

 

在这里,区块的标题设为了“最新帖子”,行样式使用了“Fields”,还使用AJAX,我不知道这个有啥用,就是想看看效果。显示的项目选择了5个,更多链接(More link)选择了“yes”,后者也没有看到效果。访问(access)是用来设置权限的,这里我设置的为“access content”。

 

由于前面在行样式(Row style)选择了“Fields”,所以我在右边的“Fields”中,添加了字段“Node:Title”.由于这里显示的是论坛里面的话题,所以又加了一个限制条件,那就是节点类型为论坛节点(Node:Type=Forum topic).

 

过滤器里面有两个操作符,“Is one of”和“Is not one of”,可选的节点类型这里有“Forum topicForum topic Forum topic”,“Book Page”,“Page”,“Story”。在这里,这些过滤条件,是根据你前面的选择而显示出来的,也就是只显示了,你可能会使用到的过滤条件。右上角的“Expose”按钮,是用来将你的过滤选项显示给普通用户的,这样用户自己就可以通过选择过滤条件,来查看自己想看的内容。不过我们这里没有用到。

 

在最新评论区块中,我们没有加排序规则,以至于使用默认的,把最早的评论显示了出来,而没有显示出最新的。同样在最新论坛话题中,我们也会遇到这种情况,这个时候就需要添加排序标准了。我的排序标准为按时间降序排列,也就是最新的排在最前面。

 

在这里,排序顺序有两个选择“Ascending”(升序),“Descending”(降序),而可选的Granularity(粒度)有,秒(Second),分钟(Minute),小时(Hour),天(Day),月(Month),年(Year)。

当选择添加一个排序规则时,会显示以下内容:

 

在上面,你会看到“Groups”这个下拉选择框,这里面的选项有多个,<all>,Book,Comment,Global,Node,Node revision,Taxanomy,Upload,User,默认为<all>,图中我选择了Node,而下面就是可选的字段,也就是按照哪个字段排序。这里是用了AJAX,下面的选项,会根据“Groups”的选择动态变化。在这里选择要排序的字段,点击添加就可以了,就会出现进一步的配置。

 

当配置好视图(view)的设置以后,保存视图,在视图的列表页面中,启用这个视图,然后在区块管理页面,启用对应的区块。我把它也放到了右栏中。如图所示。

 

样子不怎么好看,这是由于初次使用Views2的缘故,与Views1.x相比,Views2在配置页面有了很大的不同,但是这些改动都是为了方便大家的操作的,与以前的相比,这些操作更加人性化,更加方便了。Views模块功能强大,不仅仅是用来创建简单列表区块的,还有很多更强大的功能,希望大家在不断的实践中,不断学习这一模块的使用。

相关链接: Think in Drupal

Drupal版本:

drupal缓存(cache)

这个是入门的第一篇,但是不是本书的第一页,本书的写作计划是,各自为政,写到一定的数量以后整理成册.当然,是在一定的范围内完成的.

计算机领域,最大的一次技术改进,就是发明了缓存,不管是操作系统,浏览器,各种编程语言,都提供了对缓存的支持.drupal也不例外,缓存在drupal中相当常见,可以说,drupal把缓存发挥到了极致.

很多人提到drupal,常常会质疑它的性能问题,特别是当知道drupal把所有的数据都存在到了数据库中时,这种质疑常常让一些原本打算使用drupal的用户,在drupal面前望而却步.在Drupal中,一个正常的页面的生成,如果把所有的步骤都走完的话,可能需要执行上百条数据库查询,(具体是数据根据实际情况而定),但是如果使用了缓存的话,仅需要一条查询或者几条查询就可以完成.这样就可以极大的提高drupal的性能了.Drupal内置的缓存机制,使得drupal能够应用到高负荷,高流量的网站,实际上,国外的许多大型的网站都是跑在drupal之上,具体的网站可以到创始人的个人网站上找.

对于我们的个人站点,我们看看怎样才能通过使用drupal的缓存机制,来优化我们的小站.我拿我自己的网站zhupou.cn作为例子吧,先看看网站上的设置。配置缓存的地方位于Site configuration(站点配置)下面的Performance(性能),如图所示,

在这里可以为匿名用户启用或者禁用页面缓存,另外就是设置CSS和JS,以优化带宽。Drupal的页面缓存,仅用于匿名用户,对登录用户不起作用,我见很多人想对登录用户也使用缓存,据说别的CMS可以实现这一点,我不知道drupal有没有现成的解决方案,来实现这一点,不过对于大多数网站,匿名用户应该可以占到总用户的80%,也就是大多数,所以我觉得仅对匿名用户,就抓住了问题的关键点了。

下面看看zhupou.cn的配置,让我们进入性能的管理界面admin/settings/performance。先看看页面缓存的设置。如图所示。

在这里,缓存模式,我用的是普通模式,最小缓存生命周期,我选的是6小时,同时启用了页面压缩。这里的配置仅仅作为参考。

下面是我的区块缓存配置在这里面启用了区块缓存,如图所示。

下面带宽优化配置,在这里JS,CSS文件的优化都被禁用。

为什么我这里,禁用了CSS和JS优化呢?其实我也不想禁用它,但是由于网站放在虚拟主机上,启用这两个选项,需要对files目录,以及压缩后的文件都具有“写”权限,而我不会在linux下面设置权限,具体一点说,我不知道在我的虚拟主机上如何设置这一权限。所以只好禁用。一会我给大家看看我本地机子上,启用这两项优化后的效果。

在这个页面的最后,是清空缓存数据的按钮,这个在网站的开发过程中非常有用。有时候,你会发现自己的站点越来越慢,那么到这里看看,点点这个清空缓存数据按钮,可能就会带给你不小的惊喜。

 

         Drupal6在缓存的设置方面,对drupal5作了不小的改进,比如在这个页面,在5.x,就没有清空缓存数据(clear cached data)这一按钮,也没有区块缓存的配置选项,另外,在页面缓存的配置中,也没有页面压缩(Page compression)这一选项。

       相关链接: Think in Drupal

Drupal版本:

drupal缓存试验

缓存实验

事实上,我对缓存也是一知半解的,搞drupal一年多了,在这一点上,我唯一会作的是,遇到了问题,不管是不是与缓存有关,都先清缓存,有时,问题会解决掉,有时,问题仍然存在.过去,清空缓存的方法,我一直用的是,关闭站点,然后重新让它上线.当然也有别的方法.而在drupal6中,在性能的配置页面,专门为我们提供了一个清空缓存数据的按钮,这更方便了.像我这样的老手,在这方面的知识也不过如此,对于许多刚刚接触drupal的新手来说,这一点就更让人费解了.

我们做个实际的实验,以加深大家对drupal缓存的理解.刚刚我发了一篇文章” drupal缓存(cache)”,并且推到了首页.我是在IE7下面,以用户1(g089h515r806)的身份发帖的.当我再以用户1的什么,使用IE7访问首页时,我看到了以下内容:

用户g089h515r806在首页看到了新发的文章。点击文章标题,就可以进入文章的正文页面。

现在我以匿名用户的身份,使用Firefox浏览器,访问zhupou.cn首页,我看到了如下内容:

在首页,我看到的还是昨天的那篇文章(10/28/2008),还看不到新发的文章,也就是说,首页面,被drupal缓存了。至少要过6个小时以后,匿名用户才能看到刚才的更新。

在firefox下面,我以test这个用户登录后,再次来到首页,test看到了:

用户test登陆后,在首页看到了新发的“drupal缓存(cache)”这一文章,点击就可以浏览。从这里看到,对于管理员,登录用户,页面缓存是不起作用的。

我使用google的浏览器Chrome,以匿名用户的什么访问zhupou.cn的首页,仍然没有看到新发的文章。但是当我点击首页底部的1,2,3。。。这样链接中的2以后,重新点击1回到页面http://zhupou.cn/node,也就是页面的首页,我看到了以下内容:

我看到了新发的帖子了。在首页。但是当我把http://zhupou.cn/node改为http://zhupou.cn以后,又看不到新发的文章了。

你说奇怪不奇怪。对于登陆的用户来说,http://zhupou.cn/nodehttp://zhupou.cn都是首页面,里面的内容都是一样的但是对于匿名用户来说,看到的却是两回事。在前者,可以看到新发的链接,点击可以看到新发的文章,但是后者,就看不到。

       我们再做做试验,把这篇文章发出去一后,看看结果。

Drupal版本:

drupal页面缓存的工作原理

      先纠正一个错误,那就是”实验”应该改为”试验”,小时候语文不好,经常被老师批,幸好现在有了网络,遇到不明白的地方可以到网上搜搜.

    前面又发了一篇文章,当我以用户g089h515r806和test用户登录后访问时,在首页,看到了刚刚发出去的两篇文章。drupal缓存(cache),和缓存试验

 

   现在我以匿名的什么,使用google的chrome浏览器,再次访问zhupou.cn的首页。我看到的 和前文中所截的图还是一样的。使用同样的方法,访问zhupou.cn/node,令我意外的是,我看不到刚刚发的“缓存试验”。只有drupal缓存(cache)。而登陆用户是可以看到两者的。

 

    问题又来了,为什么匿名用户第一次访问zhupou.cn/node,能够看到最近发布的文章“drupal缓存(cache)”,当再发布一篇“缓存试验”后,再次访问zhupou.cn/node,看不到刚刚发布的“缓存试验”一文呢?这是个问题。也是初学个,经常遇到的问题,我多次看到有人问,为什么看不到新发的文章,这样的问题。

 

   你可以按照我说的方法,对drupal缓存的设置多做一些实际的试验,用试验来了解掌握drupal缓存机制。对于使用缓存与不使用缓存的drupal性能对比实验,我就不做了,因为这是“实验”,而不是“试验”,因为我的技术层次还比较低,达不到“实验”的水准。不过可以大致的给出一个数据,那就是开启页面缓存后,性能大约有10倍左右的提升。

 

   下面让我给大家讲解以下,drupal页面缓存的原理,这既是我从他人的经验中学习过来的,也是通过自己动手,逐步的体味出来的。我也希望,drupal的学习者,使用者,在自己用到缓存的时候,像我这样用不同的浏览器,使用不同的用户类型,不断地试验,查看结果,这样就能够更加深刻的理解drupal页面缓存的工作原理。

 

   启用页面缓存后(普通模式),事实上在缓存中,这个页面还不存在,当有一个用户访问这个页面时,也就是页面的第一次被外界访问,这个时候还是走的完整的步骤,在页面从服务器端发送给浏览器的同时,drupal也将这个页面缓存到了drupal缓存中,这个缓存页面有个最小的生命周期,也就是最小的存活时间,在这一时期内,不管哪个用户再次访问这个页面,不管这个页面期间有没有被修改,对于匿名用户来说,返回的都是同样的内容。当过了生命周期之后,如果你启用了cron任务,系统就会帮你把这个缓存页面从drupal缓存中清除出去。只有当下次,再有用户访问这个页面时,重新生成缓存页面。对于缓存页面,只需要一条SQL语句,就可以将其从缓存表中读取出来。

 

       如果你了解到了这一原理,就不难理解上面看到的现象,匿名用户访问zhupou.cn/node,这是因为这个路径从来没有被访问过,所以第一次,他看到了最新的内容,当再有更新时,看到的仍然是前面看到的内容。由于drupal大量的使用缓存,缓存表中的数据,会逐步地增加,所以你需要配置你的cron任务,让它帮你定期的清除过期的缓存页面,很多人会慢慢的发现,性能越来越慢,就是因为缓存表中的数据量太大了,里面的垃圾数据没有清除导致的。

 

   6个小时以后的试验,这里就不再作了,因为今天匿名用户可以看到昨天晚上发布的内容了。我们接下来看看区块缓存,以及css,js的优化。

相关链接: Think in Drupal

Drupal版本:

drupal区块缓存试验

     我们在前面提到区块的缓存,这个也是drupal6新加的,以前没有这个配置选项的.区块的缓存,原理应该和页面一样.当我修改一个区块时,匿名用户同样看不到变化.区块与页面缓存的区别在于,区块依赖于页面.下图为站名区块中的内容.

 

     图1

 

      我在里面加了“测试区块缓存^_^” ,登陆用户就可以看到区块内容的变化.

 

      图2

     而匿名用户,无论访问哪个页面,我发现看到的区块内容都如图1所示.不过这些页面都是被缓存了的,包括页面中的区块.为此我专门新建了一个节点node/318,也就是论坛上的帖子“测试drupal区块缓存” .现在当匿名用户访问这个节点时,看到的区块内容如图2所示了。这个大图我就不放到这里了。事实上,匿名用户是看不到node/318这个节点外面的链接的,就是在其它页面没有这个节点的链接。这也是由于页面缓存的缘故,这里我是直接访问这个节点的,就是为了看看结果如何。

 

    当然,如果关闭页面缓存的话,那么匿名用户是不是也就可以看到效果了?我来试试看,禁用以后,匿名用户在老的页面中看到的还是图1中的内容,访问节点node/318,看到了图2中的内容。再次修改“站名”区块中的内容,匿名用户看到的还是和原来一样。

 

   由于区块依赖于页面,即便是关闭了区块缓存,只要页面缓存还在的话,此时修改区块中的内容,匿名用户是看不到区块中的变化的。但是对于那些在区块修改以后创建的页面,匿名用户能够访问,并且区块存在于这些页面中的话,那么匿名用户在这些页面上是能够看到区块的变化的。

 

   这就是我通过试验,对区块缓存得出来的结论。当你启用页面缓存时,建议你同时启用区块缓存。

   相关链接:  http://zhupou.cn

Drupal版本:

drupal CSS和JS优化

我们在性能的配置页面,看到了CSS和JS的优化选项,我在zhupou.cn上,是将优化禁用了的,原因就是权限的问题,当我启用CSS优化的时候,就会出现没有样式的情景。如图所示:

 

重新启用后,出现如下错误信息:

The selected file /var/www/vhosts/zhupou.cn/httpdocs/tmp/fileOYB3iJ could not be copied.

The selected file /var/www/vhosts/zhupou.cn/httpdocs/tmp/file4Mi3bP could not be copied.

 

这个是由于虚拟主机上文件夹的权限问题,正是由于权限的问题,我们files和tmp两个文件夹放到了drupal的根目录下,而不是sites目录里面(子目录,或者孙目录)。但是仍然没有完全解决问题,比如这里就出了问题。

 

     不过为了说明问题,看看我本地环境下面的zhupou网站,在本地很方便的就启用了CSS和JS优化.从页面上我们看不出任何变化,现在让我们看看页面的源文件.使用firefox打开页面,打开插件firebug,查看页面源文件。为了同时看到CSS和JS,我专门找了页面admin/content/book作为例子。下面是在firefox下面看到的。

 

    这里面的CSS和JS文件名都很长,也不好记,这是drupal压缩而成的。在files\css和files\js文件夹下面,就可以找到上面生成的文件。这样做的最大好处就是,将多个CSS(JS)文件合并成一个CSS(JS)文件,从而减小带宽。进而减小网站的负荷。

 

如果禁用CSS和JS优化,同一个页面,加载的CSS和JS文件的数量就多了很多,如图所示:

 

注意,网站上线以后,最好能够启用这两项优化,但是在开发过程中,一定要把这两项给禁用了。开发的时候是没有多少人访问的。

 

除了这些配置选项以外,drupal还内置的其它缓存,比如主题缓存,菜单缓存,以及系统变量缓存,还有过滤器缓存,不过这些都是系统帮你实现的,也不需要你的配置,所以在性能的配置页面,你也就看不到这些方面的配置选项了。

       如果你觉得,通过这里面的性能优化,还不能满足你的需要的话,那么你还可以对MYSQL,apache,php等进行优化,从而提高你网站的性能,但是这已经超过drupal的范围了,另外你还可以对页面缓存使用激进模式,来进一步提升性能。但对于小型网站,对于drupal的初学者来说,掌握这些简单的性能优化,就基本上可以满足实际的需要了。

相关链接: Think in Drupal

Drupal版本:

为了纪念搬往深圳,将价值20元的Drupal菜鸟20问的参考答案免费

为了纪念搬往深圳,将价值20元的Drupal菜鸟20问的参考答案免费.

Drupal菜鸟20问是Drupal初学者最常见的20个问题,这20个问题是根据我的经验选出来的,将来可能还会有所改动.

而对应的参考答案,也是我自己写出来的,限于Drupal机能有限,难免有所不足,希望大家共同完善.

9号,10号,11号每天放出来6个问题.

论坛:

第一问,Drupal的安装,汉化包的安装

 

第一问,Drupal的安装,汉化包的安装.
答案:
Drupal的安装:
包括下载Drupal,创建数据库,设置sites\default下面的settings文件,运行install.php文件
 
 
汉化包的安装:
1),下载简体中文包, http://drupal.org/project/zh-hans
 
2),将汉化包中的目录
modules/ (每个模块的汉化文件)
profiles/ (每个安装简包的汉化文件,默认值有default这一个)
themes/ (每个外观主题的汉化文件)
复制到Drupal安装的根目录中,也就是将它们合并.
 
3),导航到admin/build/modules,启用local模块.
 
4),导航到, admin/settings/language,点击添加语言,也就是dmin/settings/language/add,在这里添加Chinese, Simplified(简体中文) .
 
5),将简体中文设置为默认语言.
 
6),导航到admin/settings/language/edit/zh-hans,将路径前缀中的“zh-hans”删除;导航到admin/settings/language/edit/en,在里面的路径前缀中输入”en” .
 
 
相关解决办法:
如何使用6.x中文安装包: http://www.drupalchina.org/node/4212
 
新版 Drupal 安装指南及汉化包 http://www.juqng.com/articles/drupal/drupal-istl/

 

Drupal版本:

第二问,配置drupal简洁(clean)URL

 

第2问,配置drupal简洁URL
 
示例:domain.com/?q=admin ,domain.com/admin,后者就是简洁URL,去掉了“?q=”的URL。简洁URL的好处,SEO。
 
1,             F:\xampp\apache\conf,在该目录下找到httpd.conf文件,打开,找到#LoadModule rewrite_module modules/mod_rewrite.so。
将前面的注释符“#”去掉。
 
2,把F:\xampp\apache\conf\apache conf里面的AllowOverride None改为了AllowOverride All,试了一下
 
<Directory "F:/xampp/htdocs">
    #
    # Possible values for the Options directive are "None", "All",
    # or any combination of:
    #   Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that "MultiViews" must be named *explicitly* --- "Options All"
    # doesn't give it to you.
    #
    # The Options directive is both complicated and important. Please see
    # for more information.
    #
    Options Indexes FollowSymLinks Includes ExecCGI
  
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be "All", "None", or any combination of the keywords:
    #   Options FileInfo AuthConfig Limit
    #
    AllowOverride All
 
    #
    # Controls who can get stuff from this server.
    #
    Order allow,deny
    Allow from all
 
</Directory>
 
相关文章:
 
drupal下面的clean url(简洁链接)问题解决: http://evance.name/weblog/2007.08.18
 
工作日志:在nginx下实现drupal重写: http://www.xiaoyh.com/nginx-drupal-url
 
 

 

Drupal版本:

第三问,发送电子邮件

 3,发送电子邮件,在你的站点上添加一个用户,改用的电子邮件地址为:g089h515r806 at gmail.com.在添加改用的时候,向这个用户的电子邮件地址发送一封邮件,表示为它创建了一个账户。

 

答:warning: mail() [function.mail]: Failed to connect to mailserver at "localhost" port 25, verify your "SMTP" and "smtp_port" setting in php.ini or use ini_set() in F:\xampp\htdocs\lru\includes\mail.inc on line 193.

Unable to send e-mail. Please contact the site admin, if the problem persists.

 

解决办法:

 

Drupal中使用gmail配置SMTP http://www.thinkindrupal.com/node/420

 

SMTP模块的安装,我以前讲过,现在讲讲gmail的配置。首先参看它的readme文件。很多人使用smtp模块后,下载了该模块,启用,出错了。

 

1,那是忘记了下载PHPMailerPHPMailer的下载地址为:

 

http://sourceforge.net/project/showfiles.php?group_id=26031

 

  http://sourceforge.net/projects/phpmailer/

 

  http://phpmailer.codeworxtech.com/

 

 

2,另外一点就是,admin/settings/site-information中的电子邮件地址要和admin/settings/smtp中的邮箱地址保持一致。很多刚接触的人,也会犯这个错误。

 

3,使用gmail还需要注意一点,那就是配置ssl,这个要到php.ini中配置,前篇文章好像刚讲过,就是启用openssl扩展。

 

4,这些都搞定了以后,那就是admin/settings/smtp页面的配置了,

 

gmailSMTP服务器为:smtp.gmail.com

 

       端口为:        465,这个该页面有提示。

 

Use encrypted protocol(是否使用加密协议):这个选用ssl

 

使用者名稱:         这个为你gmail的用户名,注意这里不要加上@gmail.com,前面的就可以了。

 

密码:              就是你gmail帐号的密码

 

发件地址:         这个参看2中说明的。

 

名称:              这个随意

 

测试邮箱地址,这个另选一个有效的就可以了。

 

上面的配置完成以后,点击保存设置,就可以,会出现一个发送成功的消息。

 

openssl的配置:

       那就是我没有配置openssl,这就好办了,很快到网上找到了答案,在php.ini文件中,找到extension=php_openssl.dll,把前面的去掉,重启apache

注意这里的php.ini文件位于F:\xampp\apache\bin中,而不是位于F:\xampp\php中的那个。

 

原文:http://www.thinkindrupal.com/node/417

 

 

安装一个邮件服务器,

Windows

       2003中如何配置发送邮件? http://drupalchina.org/node/4172

Linux

       一般在linux下,无需进行设置,因为它自带了邮件服务器。

 

相关链接:http://www.drupalchina.org/node/5277

 

Drupal版本:

第四问,分别创建一个Page节点,和一个Story节点,并比较它们之间的区别.

 4,分别创建一个Page节点,和一个Story节点,并比较它们之间的区别.

答案:

PageStory节点类型,是Drupal自带的两种节点类型,在Drupal7中,story被更名为了ArticlePage主要应用于静态的页面,而Story则应用于动态性的文章,比如部门的新闻,对于个人博客网站,如果是单人博客的话,一般用Story作为博客。Page没有节点的发布信息,而Story有。Page默认是不会被推到首页的,而Story默认被推到首页。Page默认是禁止评论的,而Story则允许评论。从这几点可以看出,Story更具有交互性。

Drupal版本:

第五问,创建别名

 第5,URL http://example.com/node/1 创建一个别名,别名为http://example.com/firstnode

 

答案:Drupal中,默认的节点路径都是node/nid的形式,这种形式对于搜索引擎,对于用户都不是很友好,Drupal自带了一个Path模块,允许对URL进行重命名,也就是为Drupal内部路径指定别名。导航到admin/build/modules,启用Path模块。访问节点node/1,点击编辑链接,你会看到一个“URL 路径设置”,在这个文本域中输入别名firstnode,这样就可以使用http://example.com/firstnode访问第一个节点了。

 

另外,Path模块需要手工的添加URL别名,使用第3方模块Pathauto,则可以创建一系列的规则,根据规则自动的为你生成别名。

Drupal版本:

第六问,安装Fckeditor模块,能够上传图片,并成功地显示出来。

 下载FCKeditor以后,把它放到sites\all\modules\contrib下面,启用这个模块。

 

    导航到“管理>>站点配置>>FCKeditor,你会看到第一个错误:

The FCKeditor component is not installed correctly. Please go to the FCKeditor homepage to download the latest version. After that you must extract the files to /drupal/sites/all/modules/contrib/fckeditor/fckeditor/ and make sure that the directory /drupal/sites/all/modules/contrib/fckeditor/fckeditor/editor and the file /drupal/sites/all/modules/contrib/fckeditor/fckeditor/fckeditor.js exist. Refer to the readme.txt for more information.

 

    FCKeditor的安装,与别的模块不同,它需要下载一些其它程序。让我们看看readme.txt文件,看看安装的具体步骤。我们需要从http://www.fckeditor.net/download下载最新的

FCKeditor。解压后将fckeditor下的所有文件拷贝到sites/all/fckeditor/fckeditor目录下。

 

    当你创建一个节点时,点击插入/编辑图片,之后点击浏览服务器,又会提示一个错误:

This connector is disabled. Please check the "editor/filemanager/connectors/php/config.php"file.

然后就搜索到了两个文章,找到了答案, http://drupal.org/node/224246,里面提示需要设置: sites/all/modules/fckeditor/fckeditor/editor/filemanager/connectors/php/config.php

          (FCKeditor 2.5+)

在里面$Config['UserFilesAbsolutePath'] = '' ;下面添加require_once "../../../../../filemanager.config.php";

我按照说明,设置了这个配置,但是还是出错,仔细看看,有人提示需要设置settings文件中的$cookie_domain ,由于我在本地,使用的是http://localhost/drupal访问所以没有子域名。设置为了localhost/drupal也不起作用。

 

    我记得在Drupal5中,我在fckeditor/editor/filemanager/connectors/php/config.php中作了硬编码,看模块作者的回复,说那样不安全,所以只好另想办法了。

 

    由于是在本地,想不到解决的办法,看到有人在drupal.org上说,他使用了ICME负责上传图片,我就安装了ICME模块,然后在FCKeditorprofile的编辑页面的File browser settings中将File browser type设置为了IMCE。这样再上传图片,就很好用了。

 

    但是我记得很清楚,以前给客户使用IMCE实现了图片上传以后,客户说这种图片上传方式很不友好,要用FCKeditor自带的。客户永远就是上帝,我又花了时间,调了FCKeditor的自带的图片上传。那时是用硬编码的方式搞定的,和前文中所说的一样,我在drupal.org上也找到了类似的解决办法。现在如果再有客户要求这样的话,只需要调整sites/default/settings.php文件就可以了,应该是这样,不过是在本地,就不多说了。

 

    FCKeditor的安装,是费了好大的劲的,所以当我给大家留作业的时候,就想到了这个模块,IMCE对我们来说是很友好,但是如果有一天,你也使用了FCKeditor自带的图片上传的时候,你会发现,自带的更容易让普通的用户接受,因为他们习惯于这种操作。

 

    当你安装了Fckeditor以后,实现了图片上传以后,安装Drupal模块所涉及到的各个方面,差不多你都学会了。

 

    FCKeditor编辑器,与其它的编辑器模块相比,可能更笨重一点,还有它自带的图片上传,配置起来对于初学的人,也很麻烦,但是对于普通用户来说,他足够傻瓜。越傻瓜的东西,越好用。我记得我曾经讲过,FCKeditor就是王道。在Drupal中,给他们搭好架子,装好FCKeditor,把网站拿给客户,客户就会交口称赞了。所以在项目中,我配置好了一个FCKeditor,尽管是硬编码,但是在新站点中,我知道怎么改的。所以我一直在用FCKeditor。后来搭建zhupou.cn,想看看别的编辑器,发现TinyMCE也很好用。

 

关于Fckeditor的详细教程,网上很多,

比如Drupal花园上的:http://drupalgarden.cn/node/35

 

Fckeditor对于许多公司的Drupal网站,是最常用的所见即所得的编辑器了,当然还有其它的所见即所得编辑器,许多都很好用,在Drupal社区中,一直呼吁自带一个所见即所得的编辑器,但是一直争论不下,因为有人觉得这个好用,有人觉得那个好用,Drupal7中在这方面做了改进。

Drupal版本:

第七问,下载Acquia Slate主题,安装配置这个drupal主题

 第7问,下载Acquia Slate主题,安装和对这个主题进行配置。网站的前台使用Acquia Slate主题,管理界面(也就是后台)使用garland主题。

Acquia Slate主题,是Acquia drupal自带的一个主题,下载地址为:http://drupal.org/project/acquia_slate,这个主题的文档有http://drupal.org/node/418326

它自带了14个区域,可以支持1列、2列、3列布局,另外自带了page-front.tpl.php模板,对浏览器的支持更好,跨浏览器,还有就是可配置的选项增多了,许多都可以通过配置实现。

 

1,导航到admin/build/themes,启用Acquia Slate主题,并将其设为默认主题。

 

2,drupal后台管理界面的主题的设置,导航到admin/settings/admin,你会看到“管理页面专用主题”,在这里选择Garland

Drupal版本:

第八问,创建一个一级链接(Primary links),在一些菜单项下面包含子菜单项,比如:

 首页

菜单项A

       子菜单项A1

       子菜单项A2

菜单项B

       子菜单项B1

       子菜单项B2

关于我们

 

当访问首页时,要求这样显示一级链接:

首页  菜单项A  菜单项B  关于我们

 

当访问菜单项A时,这样显示一级链接:

 

首页  菜单项A  菜单项B  关于我们

子菜单项A1  子菜单项A2

 

当访问菜单项B时,这样显示一级链接:

 

首页  菜单项A  菜单项B  关于我们

子菜单项B1  子菜单项B2

 

答案:

按照上述步骤创建主菜单链接,导航到admin/build/menu,点击设置,即导航到admin/build/menu/settings,将内容的默认菜单、主导航菜单来源,次导航菜单来源都设置为“Primary links.

Drupal6,当我安装了一个新的主题后,这种效果就出现了一点异常,到现在也没有弄明白.而在Drupal5,这样用是可以的,没有遇到过问题.这可能和Drupal6中菜单的缓存机制有关.

 

另外,就是使用第3方的菜单增强模块,比如nice menus模块,Dhtml menu模块,都可以实现动态的才菜单.不过需要自己调整相应的CSS,这里就不多讲这些模块了.

 

另外就是自己编写代码,控制菜单的显示,把菜单项从数据库中显示出来,一个一个的迭代,这样也可以完全的控制菜单的显示\外观,当你编写代码时,看看nice menus模块中的代码,对你应该是有好处的.

Drupal版本:

第九问,自定义drupal站点的logo,favicon。

 第9问,自定义站点的logofaviconLogo就是站点左上角的那个水滴图片,favicon就是浏览器地址栏中的水滴图标。将这两个地方替换为你自己的。

答案:

 

导航到admin/build/themes,对你的默认主题进行配置(这里假定默认主题为garland),这样就导航到了admin/build/themes/settings/garland,这里有一个标志图像设置”,就是用来设置logo.你可以使用主题默认的logo,也可以自己上传一个logo.

 

而下面的快捷图标设置则是设置favicon,也就是浏览器地址栏中的水滴图标,你可以使用主题默认的favicon,也可以上传自己的favicon.

 

注意,logofavicon的大小, favicon一般为16x16,而logo稍微大一点,但是也不能太大。

另外在这个页面,你也可以配置其它的选项。这些都自己联系吧。

Drupal版本:

第十问,修改Story节点中的日期格式

 10问,将Story节点中的日期格式,改为“星期一, 2009-04-20 22:11”这种形式。

 

答案:

       Story节点下,有一个发布日期,还有作者信息,有时候你想调整日期的格式,默认的日期格式为西方的,比如“星期一, 04/20/2009 - 13:54”,我们把它改为符合中国习惯的。

 

       导航到admin/settings/date-time,自定义日期格式,短格式的设为“Y-m-d - H:i”,中格式的为“Y-m-d - H:i, D”,长格式的为“Y-m-d - H:i, D”。一周的第一天设置为“星期一”。

 

日期格式之需要设置一下就可以了。包括views中的日期格式,都允许自定义日期格式,PHP中日期格式的自定义,可参看PHP的相关技术文档。http://cn2.php.net/manual/en/function.date.php

第十一问,理解Drupal的缓存

 第11问,创建一个节点,假定为Node/1,安装Poormanscron模块,将Cron runs interval设置为6,将Retry interval设置为1。使用超级用户(用户1 这里假定为admin),创建一个测试用户test。导航到“管理>>站点配置>>性能”,也就是admin/settings/performance,启用缓存模式的普通模式,将最小缓存时间周期设置为“5分钟”。使用超级用户admin,修改node中的内容。之后,使用用户test登录站点,访问node/1;退出,使用匿名身份访问node/1页面。观察不同用户看到的内容之间的异同。10分钟以后,再使用用户test访问node/1,之后退出,使用匿名身份访问node/1,比较不同用户之间看到内容的异同,比较同一用户在不同时间看到的内容异同。

 

答案:

       这是一个关于Drupal缓存的实验,通过这个实验,可以非常直接的认识Drupal的缓存机制,关于缓存的入门介绍,可参看http://www.thinkindrupal.com/node/315系列文章,这里讲解了页面缓存,区块缓存,CSSJS的压缩。

 

理解Drupal的缓存,能够帮助你解决不少的问题,许多问题都是由于缓存引起的,比如你做了某些修改,但是却没有看到效果,你不知道哪里出了问题,此时,想一想,你是不是忘记了清空缓存。

 

清空缓存有多种方式,最简单的就是导航到admin/settings/performance,点击“清除缓存数据”按钮。

 

关于缓存的更高级的知识,可参看Drupal6专业开发指南的缓存一章。

 

另外,在这里你也学到了Drupal中的定时任务(cron),许多模块都需要定时的执行一些任务,操作系统中,有相应的设置,但是初学者许多都不会配置,而poormanscron模块,则是傻瓜式的,很好用。

Drupal版本:

第十二问,创建一个drupal区块

 第12问,创建一个区块,输入以下内容:

 

<a href='http://drupal.org'>Drupal官方</a>

<a href='http://www.thinkindrupal.com'>老葛的Drupal培训班 </a>

 

要求,区块显示在左边栏,区块只显示在node/1页面,区块的标题为空。

 

答案:

导航到管理>>站点构建>>区块,即admin/build/block,点击“添加区块”,

在区块说明中,输入“菜鸟作业”,

在区块标题中,输入“<none>,

在区块内容中输入“

<a href='http://drupal.org'>Drupal官方</a>

<a href='http://zhupou.cn'>老葛的Drupal培训班 </a>

输入格式选择Full HTML

页面可见性设置,选择“只在下列页面中显示”,并在下面的文本域中输入“node/1,

点击保存。

在区块列表页面admin/build/block,将新建的菜鸟作业区块指定到左边栏,并保存。

访问Node/1页面,你就可以看到这个区块了,访问别的页面,你就看不到这个区块。

 

有意思的是,当你编辑节点1的时候,区块也消失了,如果你想在节点编辑页面也显示区块,那么该怎么办呢?这个自己想想吧。

Drupal版本:

第十三问,添加内容类型和drupal分类

 第13问,添加一个词汇表“Drupal”,将内容类型设置为Story,并将其设置为必须的。为这个该词汇表下面,添加两个术语“主题制作”、“模块开发”。创建多个Story节点。观察节点下面的链接“主题制作”或者“模块开发”,点击这两个链接。

答案:

导航到“管理>>内容管理>>分类”,即admin/content/taxonomy,点击“添加词汇表”链接,即admin/content/taxonomy/add/vocabulary

在术语表名称(词汇表名称)中输入“Drupal”,

描述、帮助文本中可以不输入,不过建议你输入一些文本,比如“Drupal描述”、“Drupal帮助文本”。

内容类型中,选择“新闻(story)”。

在设置中选择“必须”,其它选项不选。

 

然后为词汇表“Drupal”,分别添加术语“主题制作”、“模块开发”。

当你创建Story节点时,就会看到一个名为“Drupal”的下拉选择框,其中的选项有“主题制作”、“模块开发”。你必须从中选择一个。

而在Story类型的节点中,分类默认是显示在右下脚的。

 

Drupal版本:

第十四问,配置内容类型

 第14问,对Page类型的节点,为其默认启用评论功能。对于Story节点,为其默认关闭评论功能。为Page类型的节点,显示发布信息。对于Story类型的节点,则不为其显示发布信息。这里的发布信息,就是“2009-04-20 - 13:54, 星期一 — admin”。

 

答案:

1)评论:

导航到“管理>>内容管理>>内容类型”,点击page类型的编辑链接,这样就导航到了admin/content/node-type/page。在“评论设置”中 ,看到第一个“默认评论设置”,在这里选择“读/写”。并保存内容类型。

 

点击story类型的编辑链接,这样就导航到了admin/content/node-type/story。在“评论设置”中 ,看到第一个“默认评论设置”,在这里选择“禁用”。并保存内容类型。

 

2)发布信息:

这里假定默认主题为garland,导航到“管理>>站点构建>>主题”,即admin/build/themes,点击这个页面中的“设置”链接,也就是导航到了admin/build/themes/settings页面,在主内容区域的右半部分,你会看到一个“显示文章的发布信息”一栏,在这里面选中“页面”,取消对“新闻(story)”的选中。然后保存。

 

当你在创建一个page页面,或者story页面时,其默认选项就像前面问题中所述的那样,但是对于已有的pagestory类型节点,这些修改则不起作用。

 

从这个作业我们可以看出,page类型和story类型并没有本质的区别,它们在底层的数据结构是完全一样的,只是为了方便而以。

 

Drupal版本:

第十五问,设置drupal站点的文件系统路径

15问,设置站点的文件系统路径“sites/default/files”,临时目录“sites/default/files/tmp”。

 

答案:

这个作业很简单,但是初学Drupal的人常常忘记配置文件系统,特别是迁移你的Drupal站点,常常会在这个地方出错,比如从windows的本地,迁移到linux的服务器上。而文件系统没有正确设置的话,那么会带来这样或者那样的错误的。

 

导航到“管理>>站点设置>>文件系统”,

在文件系统路径中,输入“sites/default/files”,

在临时目录中输入“sites/default/files/tmp”,并保存。

Drupal版本:

第十六问,关闭drupal网站并想法访问

 第16问,导航到“管理>>站点设置>>站点维护”,也就是admin/settings/site-maintenance,将站点状态设置为“离线”,然后点击“登出”,退出站点。问题:想办法重新登录到站点,并让站点能被重新访问。

 

答案:

这是新手经常遇到的问题,我也遇到过,由于这样或者那样的原因,你进入不了Drupal的后台了,此时你可以使用路径访问,就是直接访问http://example.com/user,在这里输入你的用户名和密码,这样就登录进来了。

 

另外一个类型的问题,启用了简洁URL站点,被迁移到了未启用简洁URL的服务器上后,许多路径都无法访问,此时在你的路径中,加入“?q=,导航到“?q=admin/settings/clean-urls”,在这里禁用简洁URL就可以了。

 

总之,你要熟悉Drupal后台各个页面的内部路径。

Drupal版本:

第十七问,为drupal设置输入格式

 第17问,创建一个节点,对于正文(body),先将其输入格式设置为Filtered HTML,保存节点。之后,编辑节点,将其输入格式设置为Full HTML

 

答案:

这个问题非常简单,只是一个实验,许多人不知道选择输入格式的,我就犯过这样的错误,把大段的html代码片断放入到了正文中,保存节点,却无法正常显示,特别是当你的html中包含了图片时,本应该看到图片的,但是却没有显示出来,此时第一个想到的就是,你有没有为drupal启用Full HTML输入格式。

Drupal版本:

第十八问,设置页面显示数量

 第18问,将首页(也就是http://example.com/node页面)的文章数量设置为6,同时将摘要的字符数设置为“200个字符(100个汉字)”。

答案:

导航到“管理>>内容管理>>发布设置”中,也就是admin/content/node-settings页面,在“首页上的文章数量”中选择“6”,在“摘要字符数”中选择“200个字符(100个汉字)”。

保存。

 

这是控制摘要的一种方式,另外,有时候为了更好的控制摘要,你可以点击“在光标处截断摘要”,这样就出现了一个摘要的输入框,你就可以方便的输入摘要了。还有就是在正文中使用标签<!--break-->.另外就是使用程序进行控制了, 可以使用这个函数drupal_substr($content, 0, 200).

Drupal版本:

第十九问,rss设置zhupou.cn

 第19问,访问页面http://example.com/rss.xml,观察你站点的生成的RSS。将每个Feed中的文章数设置为5个,并只显示文章的标题。

 

答案:

导航到“管理>>内容管理>> RSS 发布”中,也就是admin/content/rss-publishing页面,

在“每一个feed中的文章数”中选择“5”,

在“Feed内容”选择“只有标题”。

 

Drupal的节点,内容自动发布为RSS,系统自带了这样的功能,问题是,许多人不知道RSS所在的路径,这个可以通过点击RSS图标获得。

Drupal版本:

第二十问,了解drupal版本

 第20问,了解为什么Drupal有两个稳定版本,两个版本之间的优缺点。

 

答案:

       Drupal与其它的CMS,软件最大的不同之处在于,它不相后兼容。在Drupal5中编写的模块,在Drupal6中用不了;在Drupal6中编写的模块,在Drupal7中用不了。这一点让刚接触Drupal的人感到意外。

       这一点恰恰是Drupal的优点,那就是不断地淘汰旧的技术,功能,不断地添加新的技术,功能。这样使得Drupal能够始终保持它在web开发中的技术的领先地位。

 

       这里讲的两个稳定版本,就是两个Drupal主版本,现在是Drupal5Drupal6Drupal6是对Drupal5的一个扬弃,功能、性能方面,易用性方面都有了极大的改进。Drupal6Drupal5同样都是稳定的版本。

Drupal6 刚刚发布时,基于Drupal6的模块,还很少,还不成熟,如果此时你想建立一个大型Drupal站点的话,那么建议采用Drupal5。但是如果你想搭建一个小的网站,比如个人博客,那么则建议你尝试Drupal6

       但是随着时间的推移,比如经过本年,或者1年,也就是现在,Drupal6的模块已经丰富了,数量不比Drupal5少了,此时你再建站的时候,建议采用Drupal6

 

       选择主版本时,除了性能,功能,易用性这些方面意外,还需要考虑开发成本,以后的维护成本,选择较低的主版本,可以降低开发成本,但是增加以后的升级成本。

 

       选择最新的主版本时,当主版本下发布了34个子版本的时,当主流模块比如CCKViews这样的模块都有稳定版本发布时,就可以采用最新的稳定版本了。

 

       除了最新的稳定版本以外,还有一个开发中的版本,不要在实际的站点中应用处于开发阶段的版本,也不要应用处于开发阶段的模块,这些都不稳定。对于模块,可以适当的降低标准,但至少也需要是beta版的。

 

 

 

最后,这20个课程作业或者实验,是为初学者准备的,也是drupal基本的设置,答案供大家参考,有不妥的地方还希望大家指正。这里没有设计太多的,需要更高技巧的问题,比如面包屑问题,这里考虑的标准就是需不需要编程,是不是刚开始的时候常遇到的问题,问题很多,肯定有遗漏的地方,希望在今后的日子中能够补充完善。

Drupal版本:

把我前段时间练手的一个小东西放出来

 把我前段时间练手的一个小东西放出来,下载地址是http://www.filedropper.com/qiye,演示http://kacheba.cn有几个问题,一个是图片弹出效果,我没做成模块,直接在主题上修改了,并且稍微修改了imagecache,所以,你如果换主题的话,需要把我这个

主题上的js复制过去,另一个是我的后台管理模块是admin,这个我也有个小改动,还有就是页面还很简单,只是练手之作,所以大家看看就可以了,有两个管理权限,一个是超级管理员帐号和密码都是admin,另一个是
普通管理员,帐号和密码都是aaaaaa。呵呵,如果有什么问题,就到这里留言啊。