北京10月drupal meetup---drupal首页制作

      如果要制作一个网站的话,首先想到的就是首页,从首页开始,先得到一个简单的模型,然后再逐步的去实现相关的功能.对于drupal网站的建设,当你搭建好环境以后,第一步就会遇到首页的制作了。

     根据Drupal网站的首页的复杂程度,可以采取不同的方式,我所要讲的就是我在工作中,曾经碰到过的一些方式,可能会有所遗漏,如果有所不妥的话,欢迎指正。

 

大概可以分为以下几种:

1,  将一个page页面设为首页

2,  把各种类型的节点推到首页去

3,  使用cck为首页单独创建一个节点类型

4,  使用front模块

5,  使用drupal的panel模块

6,  使用nodeasblock模块

这个分类不大规范,仅仅作为参考。

 

drupal的首页制作,有多种方式,可谓条条道路通罗马,很多复杂的情况自己也没有遇到过,我会搜集更多的一些资料,到时候和大家分享一下。

 

相关链接: Think in Drupal

Drupal版本:

1.drupal首页制作-前期选型

讲首页制作,我们先找个案例,这个当然是假定的,要选取的是个很简单很简单的例子了,客户要建一个网站,用来发布新闻,网站的主题是关于drupal的,新闻分3类,drupal国际新闻,drupal国内新闻,drupal安全公告.每个分类下面,有这个分类的文章,在网站的首页,是显示关于3类新闻的相关信息,简单的介绍,或者是3类中最近发表的一些文章.

这样的网站,很多地方都用得到,一个机构,一个学校,公司,都会遇到这种需求.比如,可以把drupal换成joomla,换成公司.这类网站也是最简单的一种.

那么我们看看怎么实现这样的网站.当你知道你要做的网站是什么样子以后,接下来考虑的是使用什么程序,什么语言,来实现你心中的这个站点. asp? 很多公司的网站都是用这种技术实现的,这和微软软件的汉化程度有关,不错的选择..net?还是微软的,asp的升级版,也不错。Jsp,用的人在中国相对比较少,不过不少有实力的公司都在用它。这个还不错。Php,用的最广泛了,在世界范围内。事实上,每种技术特别是语言层级的,都可以解决这样的问题。但是你在考虑的时候,不得不考虑成本,考虑网站以后的维护,包括升级性。这个时候你就需要权衡。你要做的是一个新闻分类发布系统,有没有现成的可用呢,很多这类的软件,现成的,国内的我听说过的dedecms,国外的有joomla,drupal,还有.net的dotnetnuke。

是自己找人从头定制一个呢,还是找人使用现有的软件通过2次开发,这个也需要权衡。至于怎么决策,这是领导的任务,也是那些技术相关领导的任务。好了,现在决定使用php,使用drupal来实现你的网站。你找到了我,听说你做过不少的网站,这个帮我看看吧。私活,ok接了。需求很简单,drupal很强大,实现起来很方便。你半信半疑。不过以前看过我的文章,觉得还具有一定的可信性,决定让我做做试试。

现在开始选drupal版本了,drupal有两个稳定版本,一个是drupal5.x,现在已经到了5.11了,另一个就是drupal6.x,现在已经到了6.5了。前者有丰富的模块支持,后者由更强的最新特性,速度,用户体验与前者相比都有不少的提升。这时候还是需要进行选择,从程序员的角度,来说,选择drupal5.x无疑是对的,有过开发的经验,各种模块都已经熟悉了,轻车熟路,而且比较稳定,用起来放心。Drupal开发者会告诉客户,我们使用前者吧,这个版本更稳定,更节省时间。但是对于客户来说,要考虑的就与程序员不一样了。客户看到的是,drupal5.11和drupal6.5都是免费的,6比5大,也就是更高级,更强大,将来使用的时间也更长,就是说2年内不会落伍。客户坚持使用drupal6.5。很多人,遇到这种情况,程序员,其中的不少都会说服客户,采用自己的观点。不过这里我们假定客户就是上帝,上帝永远是对的。我们决定采用drupal6.5。

drupal有一个最佳实践经验,就是当有更高的稳定版本出现时,你需要马上得跟进,至少要准备跟进。现在drupal.org还是跑在drupal5.x上的,但是这并不应为着,官方没有打算升级,事实上,以及专门成立了一个升级小组,专门负责向drupal6的迁移,只不过由于涉及到的方面太多,工作量比较大而已,一个小组,3个月的准备时间。这是题外话。但是对于新站点来说,现在建站,就应该采用drupal6.x。这个是正确的选择。

       Drupal版本也选好了,现在让我们开始网站的制作之旅。

相关链接: Think in Drupal

Drupal版本:

10.1使用drupal6.5制作中英文双语网站

       我们把views 和panels的内容独立了出来,先跳过去.现在我们已经看到,已经将网站搭了起来,也基本上满足了客户的要求了.现在客户又提了出来,要国际化,drupal的新闻,要有英文的版本,来扩大知名度,打入国际市场.

       在drupal5种,国际化只有一个local模块,内容的国际化需要第3方模块的支持,比如localizer.而在drupal6种,i18n得到了进一步加强,除了核心的local模块以外,还增加了Content translation模块,这个模块我没有用过,让我们便实践便完成这篇教程的编写。

     在管理界面admin/build/modules,选中local和Content translation(内容翻译),点击保存,弹出来“

Some required modules must be enabled

  • You must enable the Locale module to install Content translation.

Would you like to continue with enabling the above?

点击“继续”.两个模块同时安装成功了,在drupal5中,如果存在依赖关系,你必须一个一个的分别选中保存,来完成安装,在drupal6中,可以同时安装存在依赖关系的模块。而系统会自动识别里面的依赖关系,并弹出前面所示的对话框。这一点也是6对5的改进。

 

       Local是用来翻译后台界面及模块生成的页面的,而内容翻译模块,是用来翻译内容的,什么是内容,顾名思义就是节点,就是区块,以及菜单导航等等。导航到admin/by-module,找到local模块所在的部分,查看里面的内容,在这里你可以配置该模块的权限,添加新的语言,以及翻译管理界面。翻译界面的url为admin/build/translate,菜单位于“Site building”下面,可见i18zn在drupal6种的地位进一步提升了。不过还好,与drupal5相比,local模块的变化不算太大。

再来看看内容翻译模块,在admin/by-module里,找到这个模块所在的位置,里面只有两个链接,1是配置权限,2是帮助链接,有点失望了,培植权限对于大多数站点都没啥用的,所以不用管,让我们看看帮助页面里面有啥提示。帮助里面给出了详细的使用说明,可惜是英文的,读了一遍,没有完全明白,怎么办?让我们导入drupal6的中文包。详细的看看这个页面都讲了什么内容。

跑到drupal.org上看了看,又有新的新闻了,那就是09年的华盛顿drupal大会正式开始卖票了,而且卖的挺火,啥时候drupal在中国也能这么火就好了。好了进入下载页面,找到drupal6的汉化包的位置,project/zh-hans,下载汉化包。

里面没有安装说明,解压后里面有很多文件。不知道怎么办了。先不管它,先到admin/settings/language/add,把简体中文添加上去。在网上找到了安装说明,如何使用6.x中文安装包。将汉化包拷贝到drupal的目录下面,没有反应,在翻译界面的导入页面看到一点提示,删除简体中文语言,再重新添加一遍,有反应,出现了导入添加语言的进度条,而且没有抱错,看来成功了。将简体中文设为默认语言,看到了汉化成果。Drupal6的汉化这么简单,比5还容易。向那些为汉化包作出贡献的朋友说声感谢了。

好了,导航到内容翻译的帮助页面,看到如下内容,就是内容翻译的指南了:

内容翻译模块使得站点文章可以被翻译为其它语言。内容翻译模块与本地化模块(locale模块用于系统界面的翻译,并用于管理并开启指定的语言)一道,用于创建并维护对站点内容的翻译。

设置内容翻译与开启翻译支持的内容类型。

  • 在权限设置页面给适当的用户角色分配翻译内容的权限。
  • 在语言设置页面添加并启用想要的语言。
  • 决定哪些内容类型支持翻译功能。要对某内容类型开启翻译支持,进入类型编辑页面,在多语种支持下拉框中选择启用,包括翻译选项。(多语种支持框在流程设置一栏下。)记住在启用多语种支持后保存该内容类型。

设置启用了翻译支持的内容类型:

  • 在创建或编辑文章时,使用语言下拉框选择恰当的语言。
  • 在翻译页签处为文章添加新翻译或编辑已有翻译。此翻译页签(tab)使用一个特制的编辑表单,在显示原文的同时,允许添加新的翻译或编辑已有翻译。只有拥有翻译内容权限的用户才能看到此页签。
  • 翻译要及时更新,已准确反映原文内容。翻译状态标志提供了一种跟踪失效翻译的简便方式。例如,当编辑文章后,勾选将翻译标记为过期选项,标记文章翻译已失效需要修订。每个翻译还可以通过在翻译编辑表单中,勾选此翻译版本需要更新选择框,来标志此翻译版本需要修订。
  • 内容管理页面显示了每篇文章的语言,并且可以按语言或翻译状态显示列表。

本地化(locale)模块提供的语言切换区块使用户可以自行选择语言版本。

接下来,我们将按照这里的提示,来制作中英文切换的网站。使用的内容还是在前面用到的。

相关链接:http://drupal.org/project/zh-hans ,http://drupalchina.org/forum/8 , Think in Drupal

Drupal版本:

10.2 显示翻译标签

我把上篇文章编号为10.1,但是drupal还是把它排到最上面,其实我是想让它排到8的后面的.而在这方面,微软的操作系统就做得比较好.不必苛求于drupal了.在上面,我们把drupal6.5的后台汉化了,而且找到了内容汉化的途径,也就是内容翻译模块中的帮助文本,还是中文版的。下面让我们按照里面的说明,来实现为内容添加英文版本。

 

导航到节点类型列表页面,编辑story节点类型的设置admin/content/node-type/story,在“流程设定”部分下面的,“多语言支持”中选择“启用”,保存。在drupal国际新闻下面,找到“Acquia drupal发布了”这篇文章,点击编辑,在编辑页面多了一个语言选项,现在为“与语言无关”,我们将它设置为“简体中文”,保存。

 

我们就将这个节点的语言设置为了简体中文。怎么为它添加一个英文版本的节点呢? 郁闷了,确实找不到翻译那个标签,在那里可以添加本节点的英文翻译呢?是不是刚才,在节点类型的设置时,选错了选项?再次导航到admin/content/node-type/story,在“流程设定”部分下面的,“多语言支持”中选择“激活,并有翻译”,如图所示。保存,谢天谢地,看到了“编辑”旁边的“翻译标签了”。

     这样我就大概知道怎么做了,因为在drupal5中,第3方模块loclizer就是这个样子。对应起来就可以了。

相关链接:Think in Drupal

Drupal版本:

2.安装drupal6.5

那么就让我们开始drupal6.5的建站之旅。首先是现在drupal,登录到官方网站drupal.org上,在正文的最上面,以及在右上角,都有drupal6.5的下载,点击,再点击,就看到下载链接了http://ftp.drupal.org/files/projects/drupal-6.5.tar.gz

 

下载到本地,我的存在了C:\QQDownload\drupal\ drupal-6.5.tar.gz。使用解压缩文件对其进行解压缩。在当前目录中,多了一个drupal-6.5目录,里面就是我们要用得软件。现在让我们进行安装。Drupal的安装其实已经很简单了,有些集成开发包比如wdp甚至为你装好了drupal。我现在用的是xampp,安装在F盘下面。现在将drupal-6.5目录拷贝到F:\xampp\htdocs目录下面,这里面有一点,drupal-6.5解压后有两层,要拷贝里面的一层。然后就是创建数据库。我们把数据库命名为drupal65,创建步骤为,打开xampp控制面板,启动apache,启动mysql。如果你装了QQ或者QQ超级旋风的话,需要先退出这两个软件,不然打不开apache,因为前者把80端口给占了,不过打开apache以后,可以继续使用QQ,霸道的QQ阿。(不过我装过GG的浏览器搜索插件,后来不小心把QQ的产品全部安装上了(包含了QQ的搜索插件),GG向我提示,不法软件想取代它的地位,被它拒绝,看来还是GG的技术更强一点)。

 

打开mysql的客户段,我这里用的是SQLyog,当然也有其它产品。连接到本地数据库。找到左栏的root@localhost,右键单击,你会看到“创建数据库这一选项”,点击它,在弹出的对话框中输入drupal65。现在,你看看这个数据库,里面还是空空的,没有内容。

 

接下来是,修改settings.php配置文件。在目录F:\xampp\htdocs\drupal-6.5\sites\default下面,现在有一个默认的default.settings.php文件,复制该文件,粘贴到当前目录,并将复制品重命名为settings.php。打开settings.php文件,这个是个配置文件,里面有各种网站的配置信息。现在我们关心的只是数据库的配置,在第92行,有一句:

$db_url = 'mysql://username:password@localhost/databasename';

 

将这行代码注释掉,然后紧接着在下面另起一行,复制这一段代码。然后修改里面的数据库,用户名,密码。修改后我的结果为:

//$db_url = 'mysql://username:password@localhost/databasename';             //第92行

$db_url = 'mysql://root:@localhost/drupal65';                              //第93行

 

在浏览器中输入http://localhost/drupal6.5,抱错,没关系,还没有安装呢。输入http://localhost//drupal6.5/install.php,还是抱错:

“The requested URL was not found on this server. If you entered the URL manually please check your spelling and try again.”

估计是这个6.5的原因,把中间这个点去掉。不好意思,地址输错了。应该为http://localhost/drupal-6.5/。有时候想当然的一件事情也会出错。少了一个连字符“-”。还是抱错,不过这次的错误信息我见过了。“Warning: Table 'drupal65.access' doesn't exist query:”。

在地址栏中地址后面追加install.php,也就是http://localhost/drupal-6.5/install.php,这样就进入安装页面了。选择“Install Drupal in English”,安装很快就进入了“Configure site”这一步。输入站点名称,邮件地址,管理员的用户名和密码,后者我输入的是admin/admin,密码太短了,会有警告提示,说你的密码不安全。另一个值得一提的就是简洁URL,在drupal6.5中,系统会自动对当前环境进行判断,如果环境支持简洁URL的话,就默认将其设置为启用,如果环境不支持的话,就默认为禁用。简洁URL(clean url)的配置可参看本站及官方上面的配置信息。输入好这些配置以后,点击保存。显示安装成功。不过里面有错误信息出现。“

  • 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\drupal-6.5\includes\mail.inc on line 193.
  • Unable to send e-mail. Please contact the site admin, if the problem persists.

      这是由于现在的网站,主要是系统环境不支持发送邮件。这个问题的解决办法,可参看阿舍的建站经验,我昨天刚刚看他写了篇这方面的文章,http://drupal.soa.tw/node/234,里面有说明。不用管这个错误信息。点击“your new site.”链接,进入http://localhost/drupal-6.5,现在看到的还是drupal的管理界面。我们这就用它开发搭建我们的网站。

相关链接:  Think in Drupal

Drupal版本:

3.使用page节点创建drupal首页

让我们继续我们的drupal6.x之旅。这一系列的文章,是关于首页制作的,围绕着首页制作,我们将建立一个简单的站点。也算是drupal入门教程吧。在前面,我们安装好了drupal6.5。现在我们进入了http://localhost/drupal-6.5/。看到了是drupal的默认首页。右边是正文,左边是管理菜单。

 

在右边的正文中,有4个部分,1是配置站点,2是添加模块,3是定值主题,4是填充内容。平时做项目的时候,开始要做的,就是先简单的配置一下站点,加上一些常用的模块,接着就是制作主题了。制作主题应该算是项目正式进入开发期了,它前面的都是准备工作。主题的制作,通常为客户发过来PSD文件,美工将其转化为静态HTML+css,然后drupal开发者,或者专门的drupal主题制作者,将静态的HTML替换为模板文件,tpl.php。主题的制作设计到这个过程,直到项目结束通常还设计到主题的东西。主题制作的最开始的任务就是,制作页面模板文件,接着才是节点模块,区块模板文件,根据项目的进展,开发的需要,有时候需要对这些模板进行调整,或者添加更加具体的模板文件,比如page-node-1.tpl.php这样的具体模板文件。这里暂时不讲主题的制作,相关内容可参看本站及官方还有其它站点的主题制作指南。我们假定我们的客户觉得garland主题,已经够用了。这个默认主题其实很强大的,只不过大家都在用,让人觉得比较土而已。

 

先进性简单的配置,通常就是cron还有files文件的路径了。这两个也比较简单。前者手工的运行就好了,后者,因为是在本地,所以怎么办都可以。对于初学者来说,我建议先看看drupal的后台,从上面到下面,看看每个选项,每个页面,每段文字,先看看英文的吧,看完以后,然后再装上drupal的中文包,再看看。也就是说先熟悉一下环境,我刚开始学的时候,这一点就花了2-3,这样你就基本上知道每个选项,每个功能的大致位置了。很多人,搞drupal也有一段时间了,遇到一些简单的问题,还是不会,就是因为他不知道在哪里配置,没有认真的钻研过。这是有用的。如果你仅仅是暂时的使用drupal,过段时间就不搞这个了,那也没有太多的必要。如果想靠这个吃饭的话,建议你按照我说的去学习。

 

假如你已经了解了drupal的管理界面,前面的基本配置,常用模块的安装,都已经完成了。现在就让我们添加内容。点击“Create content”(创建内容),里面有两个选项,page和story,两者之间的区别,很多人都应该知道,前者更多的是静态性的页面,后者更多的是实时性的动态性的页面。记住这些就可以了。我更多的时候,觉得两者之间并无区别,但是我的同事,包括很多的一些人,觉得page和story就是完全不同的概念。Page多用于介绍性的文章,联系方式,等等这样的内容,story则应该是新闻,博客这样的文章。不过两者在数据库中的存储结构是一样的。

好了,我们这里选择使用page,在标题中输入“首页”,在正文中输入以下测试内容:

Drupal国内新闻:

    北京10月的drupal meetup 成功举行。

    Zhupou.cn正式对外提供技术支持了

Drupal国际新闻:

    2009年春季的华盛顿drupalCon开始卖票了

    Acquia drupal发布了。

Drupal安全公告:

    SA-2008-065 - Node Clone –绕过安检

    SA-2008-064 - Node Vote – SQL注入漏洞

当然这个页面是丑陋的,我们有了第一个节点node/1。现在点击首页,还是drupal的默认首页。

导航到admin/settings/site-information,在最下面的“Default front page”输入框中,现在默认为node,我们把它改为node/1.当你再访问首页时,看到的就是刚刚我们创建的第一个节点。使用page作为首页,是最简的一种方式了。当然你可以使用任何类型的节点作为首页。觉得页面丑陋的话,可以专门做个静态的html,放到节点的正文中,然后选择full html就可以了。

相关链接: Think in Drupal

Drupal版本:

4.把drupal节点推到首页

我们接着前面的继续往下学习.由于网站分成了3个子栏目,每个栏目里面都包含相应的新闻.这个时候,如何实现每个子栏目呢?你可以为每个子栏目创建一种节点类型,然后为其使用views输出.还有就是,你可以使用drupal的分类,创建一个词汇表,下面添加3个术语.然后在创建新闻时,选择分类.第一种方式,可行,但是不可取,第2种方式,可行,可取.尽管是一个小网站,也不妨让我们探索一下drupal的分类机制.

 

      Drupal的分类,很有特色,与许多CMS的分类方法都不一样,其原理我就不多讲了,drupal能够流行,除了它的钩子机制以外,还与它的分类机制有关.导航到” Administer>>Content management>>Taxonomy”(“管理>>内容管理>>分类”), admin/content/taxonomy,在分类页面,除了上面的说明介绍以外,在下面的词汇表vocabulary (又译作术语表)表格中还没有词汇表可用.让我们添加一个.点击”Add a vocabulary”链接,以添加一个词汇表.在词汇表名称字段中输入” drupal新闻”,在描述中输入” 关于drupal的国内新闻,国际新闻,安全公告”,在帮助文本中输入” drupal新闻的帮助文本” .内容类型,选择story,我们用它来发布新闻,因为新闻具有动态性,实时性.下面还有4个选项,tags,这个是自定义标签, Multiple select,是否允许选择多个术语, Required,是否是必须要选的,最后是重量,没啥用的东西.我们根据实际的需求,选中Required.这样在分类页面中就多了一个词汇表,让我们向其中添加术语,术语只有两个选项,术语名称和描述,其实下面还有一个高级选项,但是我从来没有用过.依次添加”drupal国内新闻”,”drupal国际新闻”,”drupal安全公告”.

好了,让我们看看另一种首页的生成方式.你看看drupalchina.org,还有官方,以及我的个人网站zhupou.cn,都是采用的这种方式。那就是首页有很多节点摘要,而不是单独的一个节点。导航到admin/settings/site-information,将上文中输入的node/1改为node。

让我们创建内容,node/add/story,在这个页面多了一个drupal新闻: *下拉选项,而且是必选的,输入标题,摘要,正文,选择drupal新闻类型,还有在下面的发布选项中,看是不是选中了“Promoted to front page”(推到首页)。我们这里把所有的文章都推到首页,这和我们的博客就差不多了。不过很多网站,只有很重要的文章,还有站长密切关注的文章才被推到首页。Drupal6.5中,正文和摘要是可以分开的,而在输入格式中,没有了php code这一选项。Php 代码经过实践,是一种很不drupal位的一种输入方式,以前很多人都推荐不要用它,现在终于拿下了。而正文,摘要,这个是为了用户界面的友好性,因为很多人都不知道使用<!--break-->标签来分隔摘要和正文。现在就更加灵活一点,不过我在zhupou.cn上,装了tinyMCE以后,正文摘要的选择按钮不见了,js冲突,不过不妨事,我知道可以使用<!--break-->标签。Page节点和story节点的另一个区别就是,story节点默认是推到首页的,Page节点不是,刚刚发现的。

根据上文node/1中提到的新闻标题,我们分别为国际,国内,安全公告创建2个节点,现在出现在首页的就如图所示,内容和前文讲的差不多,就是格式不一样,另外就是里面有摘要,还有3个栏目下不时分开按照时间先后访的,而是按照总体的先后顺序来放的。

现在让我们添加一级导航。导航到admin/build/menu-customize/primary-links,点击add item链接,输入菜单的路径和标题,就可以依次添加“首页”,“drupal国内新闻”,“drupal国际新闻”,“drupal安全公告”菜单了。添加过程中的注意事项,首页的路径为”<front>”,3个新闻分类的路径可以到admin/content/taxonomy,点击该词汇表的术语列表admin/content/taxonomy/1,就可以查看相应的链接了,分别为taxonomy/term/1,taxonomy/term/2,taxonomy/term/3。添加后,发现首页出现在了菜单的最后方,我们在admin/build/menu-customize/primary-links,用鼠标拖住首页,将它提到最前面,点击保存就可以了。

现在就满足客户的基本要求了。让我们考虑一些更具体的问题:如何不显示摘要?每个新闻分类页面只显示10个标题,首页分成3个子栏,每个里面显示5个对应的标题,按时间顺序。这些问题我们将在接下来的文章中继续讲解。

相关链接: Think in Drupal

Drupal版本:

5.在drupal中,如何去掉摘要

把摘要去掉,只保留标题,这是客户提出来的需求.如何去掉摘要,也有多种方式,常见的有,使用views,修改模板文件,自己单独写个函数.方法有多种,又没有可能将摘要的字数设置为0呢,这样不也可以解决问题吗?这是我想到的另一个办法,如果可行的话,那么最简单不过了.

 

导航到admin/content/node-settings,查看里面的Length of trimmed posts:选项,里面最少的为200,默认的为600,还有一个叫做unlimited,看样子是无限制的意思,有点失望。不过看了看下面的说明。“To disable teasers, set to 'Unlimited'”,看来我的想法有戏。试一下。将选项置为'Unlimited',保存。修改一篇新闻,来查看效果。果然没有摘要了,把整篇文章都显示在了首页,如果你需要把整篇都显示在首页的话,就选这个吧,经验就是从无数的失败的经历中积累起来的,学习drupal也一样,遇到问题不妨去点点,去实践一下。虽然没有达到我们想要的目标,但还是涨了一点知识。

 

继续我们的问题探索,可不可以在drupal6种的正文,摘要切换中做点文章?我们再试一下。编辑节点,将摘要中的置为空,刚才的选项'Unlimited'还没有取消,不过不妨先看看效果。“You specified that the summary should not be shown when this post is displayed in full view. This setting is ignored when the summary is empty.”警告出现了。不过摘要确实没有了。那么我们发现了新大陆了,在创建节点时,选择“split summary at cursor”以将摘要和正文分开,将最上面的一栏,也就是摘要的输入框置为空,什么也不添,这样就没有摘要输出了。不过令人遗憾的是,<div class="content clear-block">      </div>还在,里面是空的。

      看来我们只好修改模板文件了。因为还有作者,发布日期这些东西也要去掉。其实我觉得,在里面加点摘要,也没有太大的关系,有些客户阿,要求就是苛刻。在继续讲解修改模板文件,让我们先来看看如何使用CCK创建首页。

相关链接: Think in Drupal

Drupal版本:

6.1.使用drupal的CCK创建首页节点类型,来制作首页

CCK模块和views模块很好用,但是也有缺点,最大的缺点是,当你学会了使用这两个模块以后,你老想着用它,有种上瘾的感觉.我刚开始学会的时候,是个地方都想用CCK,比如创建首页的时候,我就想到了将首页当作一个特殊的节点来用,并亲自实践过.后来,我在网上看到过以前辈写的文章,介绍用CCK来制作首页的方法, 看来这种方法早有人用.

如果说教程前面的部分还有点假大空的话,那么越往后越不好写,所需的技术也就越高了.本文可以当作drupal 6.5 CCK的入门教程吧.先列一下中文方面的资料吧,都是CCK的:

1. Drupal cck contemplate theming 技巧, 教學

Drupal cck contemplate theming-drupal的使用教程

台湾阿舍的CCK

Drupal China 上LoocorCCK & Views 模块使用小结(Drupal6.x)之一(系列文章)

Zhupou.cn翻译的 drupal CCK节点类型的主题定制

 

CCK的项目下在地址为:http://drupal.org/project/cck。现在还不是正式版,不过Views都有正式版了,这个的正式版也不远了。我们先下载这个 模块,并将其解压到sites\all\modules\cck下面。进入模块列表页面,启用CCK。

由于是学习,所把CCK的所有模块都启用了。CCK就是一个模块集合,核心就包括了9个模块,如果你还需要其它功能的话,还需要安装CCK的字段模块,这些就暂时不在这里讲了。

现在,让我们分析一下首页,先为原来的纯文本加点html标签:

<div>

<h2>Drupal国内新闻</h2>

   <ul><li> 北京10月的drupal meetup 成功举行</li>

    <li>Zhupou.cn正式对外提供技术支持了</li></ul>

</div>

<div>

<h2>Drupal国际新闻</h2>

    <ul><li> 2009年春季的华盛顿drupalCon开始卖票了</li>

    <li>Acquia drupal发布了</li></ul>

</div>

<div>

<h2>Drupal安全公告</h2>

    <ul><li> SA-2008-065 - Node Clone –绕过安检</li>

   <li> SA-2008-064 - Node Vote – SQL注入漏洞</li></ul>

</div>

 

显示的效果如图所示:

同样是图片,而且是同一抓图,png格式的就比jpg格式的小很多,为了节省带宽,这里都用png格式。同样,在drupal中,实现某种功能,也有不同的方式,各种方式有不同的优缺点,这个你需要去比较,从而选用最适合自己的方式。

上面的图,是3个div,我们可以创建6个字段,前两个使用drupal自带的title和body就可以了,我们为“Drupal国际新闻”,“Drupal安全公告”分别创建两个字段。这里都是文本字段,没有太高级的字段。我们用CCK,做出来的,应该就是上图所示的效果。

导航到“Administer>>Content types”,admin/content/types,点击“add content type”。

我们进入节点类型的创建页面,在里面输入节点类型的名称,内部名称(类型 type),以及描述。这里名称为“Front Page”,类型为“front_page”,描述为“Front Page description”。为了简单起见,呵呵^_^,实际项目中,描述不能像我这样省事的,不过我见很多人,在实际项目中,根本不添描述的,比我更懒。

下面的3个选项,是这个节点类型的默认选项,你可以对其进行设置。在“Submission form settings”,配置节点创建表单中的默认选项。“Workflow settings”是关于工作流的,节点创建后,会触发哪些事件。“comment settings”是关于评论的,里面的选项我就不多介绍了,自己看看。在这里,我们修改一下“Submission form settings”的设置。

改成Drupal国内新闻的了。保存,导航到“Create content”,node/add,这里就多了一个节点类型Front Page,点击进到Front Page节点类型的创建节点页面node/add/front-page,注意该节点类型的内部名称为“front_page”,而这里的url为“front-page”,一个下划线,一个连字符,系统自动作了转换。

现在还只有两个字段,这两个都是系统自带的,我们这里就换了换标签,有些人创建节点类型的时候,不喜欢使用自带的,其实能用上还是用上自带的这两个字段,毕竟这两个字段跑的比用CCK添加的字段要快那么一点点。而且只需要改改标签就可以了。

 

好了先就此打住,发到Think in Drupal上,吃吃早饭,干干活,然后再接着写。

 

Drupal版本:

6.2 使用drupal CCK创建首页节点类型

在前面的文章中,我们使用CCK创建了一个front page节点类型,其实这还没有用到CCK,上文中用到的是drupal内置的创建节点类型。下面让我们使用CCK再添加4个字段。

导航到admin/content/node-type/front-page,

front page

 

点击“Manage fields”链接。并添加四个字段,这里都是文本,2个是单行的,2个是多行的。保存一个字段后,会出现这个字段的设置表单编辑页面,这里我用的都是默认值。这后的效果如下:

Manage fields

 

现在让我们创建一个front page节点,并将其设为首页。这个时候我注意到,在“drupal国际新闻 正文” 字段下面,不能设置输入格式。怎么才能像body那样,下面也可以设置格式呢?我们还需要回到刚才的页面。

不能设置输入格式

导航到admin/content/node-type/front-page/fields,对“drupal国际新闻 正文” 字段重新配置,选择“Filtered text (user selects input format)”,保存。

front page

 

对于“drupal安全公告 正文”字段也进行相应的配置。然后再次访问front page节点的创建页面。输入上文中提到的html内容。部分截图如下:

 

保存以后,我们得到了node/8,我们将这个节点设为首页。比较难看,

front page

 

让我们去掉我们不想要的内容,包括把标题移到下面,以及去掉“add new comment”l链接,还有“Mon, 10/20/2008 - 16:59 — admin”,以及黑体的标题,正文,就是显示的和上文的一样。现在让我们开始修改页面模板。

先到sites\all下面添加一个themes目录,由于我们现在用的是官方的garland目录,这是自带的,最好不要直接修改它,我们可以创建一个garland的子主题。不过在这里我们还是直接的在garland里面修改了。

Drupal版本:

6.3分析一下drupal的garland主题

      直接就在garland目录下面修改了.拷贝themes/garland下面的page.tpl.php,并将复制品重命名为page-front.tpl.php,现在后者就负责首页的外观了,但是现在我们还没有在里面做任何修改。打开page-front.tpl.php,

garland的页面模板虽然丑陋,但是却相当经典。以前我做页面模板时,就是仿照这个,通常header部分都是直接拷贝这里的。

<?php

// $Id: page.tpl.php,v 1.18 2008/01/24 09:42:53 goba Exp $

?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"

  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="<?php print $language->language ?>" lang="<?php print $language->language ?>" dir="<?php print $language->dir ?>">

  <head>

    <title><?php print $head_title ?></title>

    <?php print $head ?>

    <?php print $styles ?>

    <?php print $scripts ?>

    <!--[if lt IE 7]>

      <?php print phptemplate_get_ie_styles(); ?>

    <![endif]-->

  </head>

    注意这里面的php语句,$head_title,$head,$styles,$scripts,这些都是页面模板中的变量,还有$language,它现在成了一个对象变量了。具体的含义,可参看本站的译文还有官方的手册。

 

紧接着的代码,是网页最上面的一些logo,口号什么的,

  <div id="header-region" class="clear-block"><?php print $header; ?></div>

 

    <div id="wrapper">

    <div id="container" class="clear-block">

 

      <div id="header">

        <div id="logo-floater">

        <?php

          // Prepare header

          $site_fields = array();

          if ($site_name) {

            $site_fields[] = check_plain($site_name);

          }

          if ($site_slogan) {

            $site_fields[] = check_plain($site_slogan);

          }

          $site_title = implode(' ', $site_fields);

          if ($site_fields) {

            $site_fields[0] = '<span>'. $site_fields[0] .'</span>';

          }

          $site_html = implode(' ', $site_fields);

 

          if ($logo || $site_title) {

            print '<h1><a href="'. check_url($front_page) .'" title="'. $site_title .'">';

            if ($logo) {

              print '<img src="'. check_url($logo) .'" alt="'. $site_title .'" id="logo" />';

            }

            print $site_html .'</a></h1>';

          }

        ?>

        </div>

这些我们也不用管。

 

下面的这段是一级链接,和二级链接的输出。

<?php if (isset($primary_links)) : ?>

          <?php print theme('links', $primary_links, array('class' => 'links primary-links')) ?>

        <?php endif; ?>

        <?php if (isset($secondary_links)) : ?>

          <?php print theme('links', $secondary_links, array('class' => 'links secondary-links')) ?>

        <?php endif; ?>

 

      </div> <!-- /header -->

 

再下面是左栏区域:

<?php if ($left): ?>

        <div id="sidebar-left" class="sidebar">

          <?php if ($search_box): ?><div class="block block-theme"><?php print $search_box ?></div><?php endif; ?>

          <?php print $left ?>

        </div>

      <?php endif; ?>

如果左栏区域中没有区块的话,这里的html片段就不用输出了。

 

我们所关心的到了:

<div id="center"><div id="squeeze"><div class="right-corner"><div class="left-corner">

          <?php print $breadcrumb; ?>

          <?php if ($mission): print '<div id="mission">'. $mission .'</div>'; endif; ?>

          <?php if ($tabs): print '<div id="tabs-wrapper" class="clear-block">'; endif; ?>

          <?php if ($title): print '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?>

          <?php if ($tabs): print '<ul class="tabs primary">'. $tabs .'</ul></div>'; endif; ?>

          <?php if ($tabs2): print '<ul class="tabs secondary">'. $tabs2 .'</ul>'; endif; ?>

          <?php if ($show_messages && $messages): print $messages; endif; ?>

          <?php print $help; ?>

          <div class="clear-block">

            <?php print $content ?>

          </div>

          <?php print $feed_icons ?>

          <div id="footer"><?php print $footer_message . $footer ?></div>

      </div></div></div></div> <!-- /.left-corner, /.right-corner, /#squeeze, /#center -->

这里面放的主内容,包括节点的标题,各种字段,属性。即便是在别的主题中,通常我也是直接拷贝这一整段代码,通常需要略作修改,比如这里,我们需要把标题删去,也就是删除以下内容:

<?php if ($title): print '<h2'. ($tabs ? ' class="with-tabs"' : '') .'>'. $title .'</h2>'; endif; ?>

这样“drupal国内新闻”这一标题就不出现在顶部了,当然现在啥也没有了。

 

如何去掉“Mon, 10/20/2008 - 16:59 — admin”这样的信息呢?有不少初学者都这样问。是不是删除以下内容:

<?php if ($show_messages && $messages): print $messages; endif; ?>

就可以了。

我试了一下,不行,看来文章的作者,及发布日期不在这里控制。你可以逐个的删除这里面的变量,来观察页面内容的变化。

其中<?php print $content ?>的$content变量,是由节点模板控制的,也就是node.tpl.php,这个是最一般的节点模板,有时候我们需要更具体的节点模板,这个将在接下来的文章中讲到。

 

再下面是右栏:

<?php if ($right): ?>

        <div id="sidebar-right" class="sidebar">

          <?php if (!$left && $search_box): ?><div class="block block-theme"><?php print $search_box ?></div><?php endif; ?>

          <?php print $right ?>

        </div>

      <?php endif; ?>

 

    </div> <!-- /container -->

  </div>

<!-- /layout -->

这个和左栏一样,不过就是放在了右边罢了,左右是对成的。

 

最后面的这个变量一定要注意,

<?php print $closure ?>

  </body>

</html>

 

$closure是干什么的,我们先别管,忘了这个变量,会犯莫名其妙的错误的,有一次,我同事制作drupal主题,出现了错误,怎么都找不到,搞了半天,我让他从头开始,一个一个对照,看到底哪里少东西了,最后发现,忘记了这个变量<?php print $closure ?>。当你制作drupal主题的时候,出了问题,也应该看看是不是缺了这个变量。这个是经验之谈。

 

相关链接: Think in Drupal

 

Drupal版本:

6.4 Node-front_page.tpl.php

     你可以为特定节点类型的节点单独的创建一个节点模板文件,对于我们的首页节点类型,如果要单独的定制它的外观的话,就需要创建一个node-front_page.tpl.php.创建的过程就是拷贝node.tpl.php,然后将其重命名。

      我们先来看看这个garland的node.tpl.php,也就是还没有被修改的node-front_page.tpl.php。注意不要把node-front_page.tpl.php写成了“node-front-page.tpl.php”,因为我在写本文的时候就犯了这个错误,有时候,这样的一个很小的错误就会浪费你半天时间。我遇到过这样的情况。换成了后者,就不管用,因为系统内部没有front-page这种节点类型,只有front_page。

 

让我们先分析一下这个模板文件,最前面的部分,

<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?>">

 

<?php print $picture ?>

<?php if ($page == 0): ?>

  <h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>

<?php endif; ?>

    第一行是输出div的id和class的,根据节点的类型,状态的不同,其id和class也不相同。其次是输出图片的,接下来看看是不是个整节点,如果不是的话,也就是仅仅是一个摘要(特aser),那么在节点标题上就加个链接。

 

    再往下看:

<?php if ($submitted): ?>

    <span class="submitted"><?php print $submitted; ?></span>

  <?php endif; ?>

     这段就是输出节点的提交信息的,包括节点的作者,提交日期等等,也就是前文所提到的,尚未解决的问题。“Mon, 10/20/2008 - 16:59 — admin”,如何去掉这一信息呢? 我们把上段代码从节点中删除,就可以了。

 

    接下来就是节点的正文了,由CCK创建的内容,也在这里直接输出。

<div class="content clear-block">

    <?php print $content ?>

  </div>

    我们一会再看看,如果控制输出CCK定义的字段。

 

    最后的这段代码,用来输出节点的分类,以及其它链接的:

<div class="clear-block">

    <div class="meta">

    <?php if ($taxonomy): ?>

      <div class="terms"><?php print $terms ?></div>

    <?php endif;?>

    </div>

 

    <?php if ($links): ?>

      <div class="links"><?php print $links; ?></div>

    <?php endif; ?>

  </div>

 

</div>

     你在zhupou.cn的每篇文章下面,基本上都可以看到这样的分类,比如druapal6.x, druapal5.x等等。你可以根据需要将这些信息放到正文的上方,或者下方。

 

     这里面用的变量,都是节点模板中常用的变量,具体含义可参看http://drupal.org 上的手册,以及我以前翻译的一些文章。最后提示一个技巧,在这个节点模板中,善于使用<?php print_r($var) ?>。

 

相关链接:Think in Drupal

Drupal版本:

6.5 改造CCK节点模板node-front_page.tpl.php

我们在前面提到,在节点模板中,模板使用$content变量将正文,以及由CCK创建的字段一股脑的输了出来,怎么才能将其单独的输出来,放到定制的html中呢?

       在文章的最后面,我们提到了print_r()这个函数的应用,这个函数在制作模板文件中,用处可大了,又专门的支持主题制作的drupal模块,不过我没有用过,我觉得print_r已经够用了。让我们在节点模板中,插入<?php print_r($node) ?>,访问首页,发现里面的内容全乱套了。

stdClass Object ( [nid] => 8 [type] => front_page [language] => [uid] => 1 [status] => 1 [created] => 1224493166 [changed] => 1224493166 [comment] => 2 [promote] => 0 [moderate] => 0 [sticky] => 0 [tnid] => 0 [translate] => 0 [vid] => 8 [revision_uid] => 1 [title] => Drupal国内新闻 [body] =>。。。。。。。

这么多东西,怎么办,我们要做的就是直接在这里找到对应的变量,怎么找,先找内容阿。先把那一大串复制到一个文本文件中,然后慢慢的找,最后找到了

<?php //print_r($node->title) ?>

<?php //print_r($node->body) ?>

<?php //print_r($node->field_news[0]['value']) ?>

<?php //print_r($node->field_news_body[0]['value']) ?>

<?php //print_r($node->field_security[0]['value']) ?>

<?php //print_r($node->field_security_body[0]['value']) ?>

怎么找出来的?慢慢的试出来的,最后发现$node->field_news[0]['value']可以,很快其它的也一样,搞定。找到了这些具体的字段,我们就可以将其放到我们的html片段中了。放置的过程中,发现不能使用$node->body,因为同样输出所有的正文加上所有的CCK字段。这里应为使用<?php print $node->content['body']['#value'] ?>,注意这里的value前面有个“#”号。我咋知道的?试了好几遍才试出来。最开始学习drupal的时候,都是这样试错试出来的。这样我们就可以将

<div class="content clear-block">

    <?php print $content ?>

  </div>

替换为了

<div class="content clear-block">

  <div><h2><?php print $node->title ?></h2> <?php print $node->content['body']['#value'] ?> </div>

  <div><h2><?php print $node->field_news[0]['value'] ?></h2> <?php print $node->field_news_body[0]['value'] ?> </div>

  <div><h2><?php print $node->field_security[0]['value'] ?></h2> <?php print $node->field_security_body[0]['value'] ?> </div>

    </div>

这样我们把CCK创建的节点类型就完整的输出来了。最终首页节点模板的文件内容如下:

<?php

// $Id: node.tpl.php,v 1.5 2007/10/11 09:51:29 goba Exp $

?>

<?php //print_r($node) ?>

<?php //print_r($node->title) ?>

<?php //print_r($node->body) ?>

<?php //print_r($node->field_news[0]['value']) ?>

<?php //print_r($node->field_news_body[0]['value']) ?>

<?php //print_r($node->field_security[0]['value']) ?>

<?php //print_r($node->field_security_body[0]['value']) ?>

<div id="node-<?php print $node->nid; ?>" class="node<?php if ($sticky) { print ' sticky'; } ?><?php if (!$status) { print ' node-unpublished'; } ?>">

 

<?php print $picture ?>

<?php if ($page == 0): ?>

  <h2><a href="<?php print $node_url ?>" title="<?php print $title ?>"><?php print $title ?></a></h2>

<?php endif; ?>

 

 

 

  <div class="content clear-block">

  <div><h2><?php print $node->title ?></h2> <?php print $node->content['body']['#value'] ?> </div>

  <div><h2><?php print $node->field_news[0]['value'] ?></h2> <?php print $node->field_news_body[0]['value'] ?> </div>

  <div><h2><?php print $node->field_security[0]['value'] ?></h2> <?php print $node->field_security_body[0]['value'] ?> </div>

    <?php //print $content ?>

  </div>

 

  <div class="clear-block">

    <div class="meta">

    <?php if ($taxonomy): ?>

      <div class="terms"><?php print $terms ?></div>

    <?php endif;?>

    </div>

 

    <?php if ($links): ?>

      <div class="links"><?php print $links; ?></div>

    <?php endif; ?>

  </div>

 

</div>

 

还差最后一个问题没有解决,那就是如何去掉“Add new comment ”这一链接,其实这个很简单,那就是编辑该节点,在编辑页面的“comment settings”部分选中“Disabled”就可以了。好了最终的效果图如下:

  你可能说,怎么还是这么丑,将3个div排成什么样的样式,是美工的活,CSS的东西我不大懂,在这里就不多讲了。讲的就是这个流程,如何把CCK的字段提取出来,如何将CCK创建的节点设为首页。有点累了,歇会先。

Drupal版本:

6.6 drupal CCK总结

使用CCK创建一个front page节点类型,然后再创建一个首页节点.这种方式有啥好处呢?那就是将来你编辑首页时,首页的各个部分现在都成了一个字段,相互之间互不干扰.或许 这是唯一的好处了,但是,使用这种方式创建的首页,仍然是静态的,而且与纯HTML的首页相比,没有任何明显的优势,而且我们也看到了为CCK节点类型定制节点模板也相当的费时费力.

 

       这里仅仅作为一个参看,也作为drupal CCK的一个入门教程,特别是定制节点模板的那部分,很少人会提到.你可以看看这篇文章Use CCK to make a unique front page,很早就有人提出了这种想法,而且不少人这样用,应该还是drupal圈内的高手吧, Lullabots的文章.还有这篇Take control of your Drupal front page layout using contemplate and CCK. Contemplate模块我没有用过,不过有不少介绍这方面的文章, joetsuihk 有篇文章Drupal cck contemplate theming 技巧, 教學,希望在你制作节点模板时,此文能给你带来一些帮助.

 

       CCK是个会用了以后特别上瘾的drupal模块,看到一个内容,都想用CCK实现,我为CCK这种方式,特别是它的灵活性感到惊讶,当然,当我把这种方式告诉没有接触过drupal的一些技术人员时,他们的态度就是批判再批判,当然他们没有用过CCK. 后来的实践,让我对CCK产生了免疫,能不用就不用,我说个例子,比如我现在的站点上,有个drupal安全公告栏目,这个都是翻译drupal.org上的,你看看你面的内容,你再想想CCK,是不是可以将它们对应起来。我最初确实是打算使用cck来实现的,但我看看了官方页面的源代码,就改变了自己的主意,事实上,我用的方式就是普通的story节点+分类+<!—break-->,看起来外观也是统一的。因为我使用的是同一个word模板。事实上,官方采用的也是我这种方式。我模仿了官方的用法^_^。

 

       CCK也是有前世今生的,最早是flexnode,已初具CCK的原型了,后来在此想法的基础上,独立开发出来了CCK,到现在CCK2也出来,将来这种方式也将被drupal官方正式采用,不知道什么时候。CCK是把重剑,你看看这个drupal模块集中模块的个数,以及模块的大小就知道了。重剑无形,使用不当就会对自己不利,只有等你力气比较大,能够掂得动它的时候再去学习它。

      

       那么使用CCK创建首页,这种方式我们就介绍到这里。我们将回过头来,继续赶路,学习一下其它的方式。

相关链接: Think in Drupal

Drupal版本:

7.0在template.php文件中添加自定义函数

没想到CCK的写了好几篇,怎么写都写不完,还好终于勉强的搞定了.现在让我们接着第5篇继续往下写.我们现在要采取的方式就是使用一段代码,将这些东西输出了.

我们写一个函数,用来读取分类以及它下面的内容,然后直接在页面文章中调用这个函数,这是一个很高效的方法,稍微会点php的都会这样干,我见过不少以前搞php的人,开始使用drupal时,都是直接使用裸php函数,无论是节点中,区块中,还是任何可以使用php code输入格式的地方,他们都会使用php。不过在drupal6.x中,我们这里6.5,php代码这种输入格式被取消了,大量的在内容中使用php代码,在drupal圈内是个被严重鄙视的方式。

Php代码放到文件,放到哪里?最好放到template.php文件中。也就是你的主题的template.php文件中,我们这里是garland。我们先来看看garland的template.php文件,里面有phptemplate_body_class(),phptemplate_breadcrumb(),phptemplate_comment_wrapper(),phptemplate_preprocess_page(),phptemplate_menu_local_tasks(),phptemplate_comment_submitted($comment),phptemplate_node_submitted($node),phptemplate_get_ie_styles()这样的函数,列出来这么多就是建议如果有时间的话,就看看这些函数,它们是干什么的。包括函数的命名方式,用途。有时候你需要修改这些函数。

我们写个函数,phptemplate_show_taxonomy_($tid),根据分类术语输出下面的内容,函数中内容就是读取术语ID $tid,根据ID得到术语的名称,已经使用该术语作为标签的节点列表。下面是我写的函数。

function phptemplate_show_taxonomy_($tid){

       //根据tid读取术语名称

       $sql ="SELECT name FROM {term_data} WHERE tid = %d";

       $result = db_query(db_rewrite_sql($sql),$tid);

       while($data = db_fetch_object($result)){

              $term_name = $data->name;

       }

       //$term_name = db_result(db_query($sql),$tid);

       //$output是用来拼html的,把html片段和数据拼起来

       //print_r($term_name);

       $output = "<div>";

       $output .= "<h2>".$term_name."</h2><ul>";

       //下面是术语相关的节点,按照时间顺序读取

       $sql = "SELECT n.nid, n.title, n.created

                                   FROM {term_node} tn

                                   LEFT JOIN {node} n on n.nid = tn.nid

                                   WHERE tn.tid = %d

                                   ORDER BY n.created DESC";

       //这里面只取前两个

       $result = db_query_range(db_rewrite_sql($sql),$tid,0,2);

       //循环,输出节点标题,这里加了链接了,注意l()函数的使用

       while($data = db_fetch_object($result)){

              $output .="<li>".l($data->title,"node/$data->nid")."</li>";

       }

       //加上结束标签

       $output .= "</ul></div>";

       //ok返回

       return $output;

}

 

注意我中间的改动,最初我用的是$term_name = db_result(db_query($sql),$tid),但是发现在这里不行,就改成了:

$result = db_query(db_rewrite_sql($sql),$tid);

       while($data = db_fetch_object($result)){

              $term_name = $data->name;

}

现在在page-front.tpl.php中插入3个语句:

<div class="clear-block">

          <?php print phptemplate_show_taxonomy_(1) ?>

          <?php print phptemplate_show_taxonomy_(2) ?>

  <?php print phptemplate_show_taxonomy_(3) ?>

          <?php //print $content ?>

 </div>

同时注掉$content的输出,就可以了。效果如下:

7.1 善用template.php

这个文件很有用,但是很多人,特别是初学的,连这个函数是干什么的都不知道,所以我在上文中让大家好好的看看这个函数。

这里可以干什么?可以覆写各种各样的主题函数,可以为page,node,comment,等模板文件中添加自定义的变量,还可以在这里添加模板建议(template suggestion),另外,这里面的函数你可以在页面模板文件中,直接调用。在前文中,我们就是这样用的。

对于许多小的drupal站点,如果觉得编写drupal模块真的比较麻烦的话,就可以使用这种方式,想一想吧,template.php中你可以放置任意的php函数,还有什么功能,不能直接实现呢?php能够实现的,drupal也大都可以实现。当然对于比较大的站点,用到这个文件的地方也不少。所以认真地读读garland的template.php,对于以后的开发工作是很有帮助的。

强调完这一点,接下来让我们看看front模块的使用。

相关链接: Think in Drupal

Drupal版本:

8. 使用drupal front page模块

Front模块,这个是专门用来创建首页的drupal模块,在实际的项目中,确实用到过这个项目,而且是客户点名要用这个模块.使用这个drupal模块,也可以创建首页.我在上周6的给参加meetup的朋友,演示过这个模块的用法。

如果你遇到了这种情况,首页面看起来很复杂,很花哨,里面充满了图片,flash,而这个页面可能每过一段时间,还需要更新一次的话,那么就可以考虑使用Front page模块,是用该模块来管理你的页面,这样就可以将这个页面完全独立于主题中其它页面的外观样式了。

在front模块的配置页面admin/settings/front,前面的配置都很好理解,注意最后一项,激活你的front_page设置,你需要按照说明在输入框中输入“front_page”,这样才能激活你的设置,我开始用这个模块的时候,就不知道配置这里,总是看不到效果,看不到效果,后来费了好大的劲,才发现还需要激活以下,这样才能取代drupal以前的首页设置。

回过头来看看前面的设置,你可以为匿名用户,登陆用户分别设置不同的首页,还可以定制站点离线时候的消息,还有首页面包屑链接的设置,对于哪些好久没有登陆的用户,当他再次登陆时,你还可以为他专门显示一些特有的信息。在具体的首页设置中,在type下拉选项中,有themed,full,redirect,前两个我用过,themed就是使用主题的页面模板,full就是完全独立,自己负责,redirect我没有用过,这个和项目的redirect to文本输入框有关。另外还有php代码设置,你可以选择是否在里面使用php代码。

除了我前面所讲的使用情况以外,如果你想为不同的用户显示不同的首页内容的话,你也可以考虑使用front page模块来管理你的各种情况。

不过在以前的项目中,每当遇到首页的制作时,我都会向同事推荐使用这个模块,但是最终的结果,他们都不采纳,觉得制作一个首页,还需要另外的模块?

对于没有接触过的朋友,不妨下载下来试用以下,将来在实际的项目中,也就多了一种选择。

Front page模块的相关链接:

官方网址:http://drupal.org/project/front

Drupal台湾的简介:http://drupaltaiwan.org/module/front_page

Drupalchina的介绍:http://drupalchina.org/node/2048

相关链接: Think in Drupal

Drupal版本: