Drupal的功能非常灵活,用户可以通过多种设置选择来改变站点外观,与用户互动的方式以及显示哪类信息。虽然设置选项很多,但安装后你只需进行极少的设定就可以让你的站点跑起来。随着你的站点的成长,你可能会有更多的需求,而Drupal能够使你很容易的添加新的功能,或者对你的站点来个大变脸。更棒的是,Drupal是通过GNU开源发布的,是你可以自由的几乎无限制的来改造定制成自己需要的样子。
点击导航区块中的administer » settings,就可以开始Drupal的基本设置了。你必须先登录并且拥有设置权限才能访问设置页面。在改变某个设定后,别忘了点击相应页面下的“保存”按钮。
你输入的设置选项,将被保存在数据库中用来帮助Drupal决定如何准备与展示相应的页面。请记住设置页面只包括了站点基本的设置选项,许多模块还有自己的设置页面,具体如何设置可以在模块自己的帮助页面或者在手册的模块介绍中找到。另外一些高级设置参阅定制与外观手册
在基本站点设置里,基本上所有的选项下面都有简短的说明,并且都是很容易理解的。唯一需要注意的是,站点的口号(slogan)、目标(mission)、脚标(footnote)等在某些外观主题里是显示不出来的。如果你是第一次使用Drupal,建议先把所有的信息都填上,这样你就可以直观的了解各个设置是干什么用以及如何显示的。如果你不需要或者不喜欢某些设置,再可以回过头去把它们去掉。
设置
下面这些链接提供了设置页面的详细帮助。如果你只是想先把你的Drupal站点跑起来,完全可以先略过这些介绍,以后回过头来再慢慢试验。唯一的例外是文件系统设置,你可能需要一开始就把它设置好,这样也可以避免新安装Drupal后在设置页面可能出现的一些错误信息。
基本站点设置在administer » settings
通用设置
在通用设置中您可以配置站点的一些基本信息。
- 名称(name):设置站点的名称。
- E-Mail地址(e-mail address):站点的合法的电子邮件地址,用于注册、重设密码和通知时的自动电邮发送。您可以设置一个真实有效的E-Mail地址,这样用户可以回复邮件;或者设置一个类似no-reply@example.com虚拟的e-Mail地址,仅用于站点的电邮发送而不接受用户的电邮回复。注意,您的站点使用的电子邮件服务器应在php.ini文件中设置而不是在Drupal中。
- 口号(slogan):站点的口号(可以理解为站点的副标题)。若您设置了口号,某些主题将会显示它。同时站点口号也将显示在浏览器的标题栏上。
- 任务(mission):站点的任务声明或关注内容。若要显示站点任务,可在主题设置中启用站点任务显示,当然这要求主题本身的支持。
- 底部信息(页脚,footer):这些信息将显示在网站页面的最下方,通常用于为你的网页添加版权信息。
提醒,任务和底部信息可以使用HTML语言格式。
- 匿名用户(anonymous user):访问你的网站但没有登陆的用户在默认情况下被称为“Anonymous”(匿名用户)。在这里您可以改变这种默认的称呼,例如改为“神秘人”。此称呼将用于Drupal创建的内容发布信息中,例如“由 Anonymous 在 周一, 2006-05-01 23:45 提交”。
默认首页
通过对默认首页的设置,您可以控制用户访问站点首页时(即访问Drupal的所在目录),首页将显示什么样的内容。例如,您可能创建了一个大的目录列表以链接站点的各项内容板块,并且希望当用户访问站点时首先看到这个目录列表(即将它作为首页主体显示)。
这个设置告诉Drupal将用户访问重定向到哪个链将用户访问重定向到哪个链接地址(URL)。需要注意的是,这个链接地址是相对于Drupal所在的目录的。例如,用于代替
"http://www.example.com/node/83" 或 "http://www.example.com/drupal_installation_directory/node/83",
您只需输入"node/83"。就算您的站点没有使用简洁链接,您也无需在输入的链接前加上"?q="。
在缺省状态下,“默认首页”被设置为“node”,这使得首页主体仅简单地显示那些已被“推荐到首页”的文章或内容。注意,当您将“默认首页”改为其它设置时,那些已被“推荐到首页”的文章或内容将不再缺省地显示在首页上;不过,你还是可以通过相对链接“node”访问它们。
如果您设置了任何非法或无效的Drupal路径,当用户访问首页时将看到“页面无法显示”之类的错误。此外,您无法将用户转向到任何不是由您的Drupal站点创建的网页(例如其它的静态HTML页面)。
简洁链接
其实正常情况下,简洁链接是不需要单独设置apache和.htaccess,本页面是遇到问题时来查询使用的。
缺省情况下,Drupal 用内部的路径参数生成URL,这样的结果就是URL看起来象是:"http://www.example.com/?q=node/83."。这使得很多搜索引擎,比如google,在索引这些页面时被挡在门外。你可以告诉Drupal使用“简洁链接”,以去掉内部链接中的“?q=”。注意,这只能在加载了重写模块(rewrite_module)并且在配置中启用重写模式(mod_rewrite)的apache服务器上能正常工作。
有两种方法可以在Apache中启用URL的重写。如果你有Apache服务器的全部权限的话,可以在httpd.conf文件中启用简洁链接。或者参看更有效率和安全(的apache)
警告:如果你的服务器配置不正确时启用了“简洁链接”可能会导致你回不到管理页面来修复你错误的改动。如果你已经在这种状况,你可以直接键入“非简洁链接” http://www.example.com/?q=admin/settings 来回到管理页面。
启用简洁链接需要下面三步:
- 启用Apache的重写模式。请咨询主机服务商或查询Apache 文件以了解有关重写模式和如何操作。最少,要确认你的Apache安装中启动了重写模式。它应该被编译进(apache)或被做成可加载的模块。一句话,你可通过在apache的配置文件中引用下面的代码来告诉Apache加载重写模块。
LoadModule rewrite_module modules/mod_rewrite.so
AddModule mod_rewrite.c
注意,并不是所有的*nix系统都是这样设置。请查询你的分发版文档中关于apache的部分。我们也建议要禁止Apache 的multiviews功能,因为将会与简洁链接发生冲突。
- 编辑站点的Apache配置文件:有关Apache的配置信息一般存放在httpd.conf文件中,一般来说位于 /etc/httpd/conf/httpd.conf ;如果你使用虚拟主机,那么可能会在其它位置,或者你没有权限修改httpd.conf文件时,也可以尝试修改你的drupal安装目录下的.htaccess文件。最主要的配置就是设置重写基点 RewriteBase 。举例来说,如果你的Apache的文件根路径是 /var/www/ (即, /var/www/index.html 是当你浏览http://www.example.com/ 时显示的页面),而你的Drupal安装在子目录 /var/www/mysite/ 下, 那么重写基点就要被设为/mysite 。 在某些情况下,需要在配置文件中设置为
RewriteBase /
以使得重写模式可以工作。
如果你不使用Drupal自带的 .htaccess文件,你就要添加重写规则到你的Apache目录定向(directory directive)中。样例请参考 .htaccess file in Drupal.
<Directory /var/www/example.com>
RewriteEngine on
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]
</Directory>
你也要设置Allow Override 以使.htaccess的命令能够在你的站点上运行,如果你改变了drupal自带的 .htaccess,你应该把它设置为
AllowOverride All
以保证重写可以启用。参阅"Behind the scenes with Apache’s .htacces" 以总观了解 。.htaccess。 这里有个示例。
- 设置路径模块。你必须保证Drupal站点上的路径模块(path module)被启用而且正确的配置了权限。你可以在管理>>模块中启用路径模块,把权限设置为管理URL别名和创建URL别名在管理>>设置中启用简洁链接。首先,看看你是不是能用简洁链接访问到设置页面,键入下面的链接:http://www.example.com/admin/settings ( 用你的主机名替换掉 www.example.com )。 如果没有发生错误,并且这个页面和你点击“管理”然后点击“设置”时的页面相同,那么你就该知道重写规则的设置是成功的,你可以点击“简洁链接”处的 确认选项。如果有问题,你可以查阅卸载简洁链接。如果你还有关于简洁链接的问题 你可以在Drupal的settings.php中设置$conf['clean_url']=1;。
注意:在标准的Drupal安装中, .htaccess文件已经支持简洁链接了。不过很容易在拷贝时漏掉它,因为前面有个“点”
注意 关于MultiViews: Apache web服务器支持的MultiViews,是一种允许你访问页面时不需要文件的扩展名。比如,你有一个叫"evaluation.txt"的文件,在启用MultiViews的站点,你可以用"example.com/evaluation"来访问到这个文件。就已经知道的情况来说,MultiViews这种方便的功能,会在Drupal启用简洁链接时产生问题。除非你确实知道你在做什么,否则你应该在你计划启用简洁链接的drupal站点上禁止MultiViews。幸运的时,MultiViews在Apache的缺省安装时已经被禁止了。查阅Apache文档进一步了解MultiViews的信息。
待补充页面
* Apache 2 configuration of clean URLs on Debian
* Clean URL Support in Abyss
* Clean URL support in XAMPP
* Clean URLs with different webservers
* Example Clean URL configuration of httpd.conf for performance
* Existing URLs for server overwrite Drupal paths
* IIS CleanURLs using some of the available ISAPI filters.
* Using Clean URLs with IIS
原文链接http://drupal.org/node/15365
设置403和404错误页面
Drupal的页面错误信息是简明扼要的。您可能希望这些信息对于用户显得更友好些,通过一下步骤,您可以自定义它们:
- 创建两个节点,分别用于403和404错误页面。
- 记下这两个节点的id号。
- 现在在“管理”>>“设置”>>“错误设置”中,将403错误和404错误两处设置分别输入相应的路径。例如,为403错误创建的节点的id号为129,则在“默认禁止访问(403错误)页面”文本框中输入“node/129”。
配置站点的错误报告
错误报告,记录Drupal、PHP和SQL错误记录的地方。在一个正式服务器上,建议只将错误写入日志;而在一个正在测试的服务器上,建议选择将错误同时输出到屏幕(当然错误仍将写入日志),这对于您及时发现错误、调试错误会很有帮助。
您可以设定日志的保持时间,当超过这个时间后Drupal会自动将旧日志删除。注意,这需要已被正确设置的crontab(yoursite.com/cron.php)。
缓存支持
繁忙的Drupal站点可能需要缓存站点的页面,这样可以减轻服务器的压力同时提高页面载入速度。
通常,每次用户访问一个页面,Drupal会向数据库发送一系列查询请求,获得数据用来产生HTML页面,并最终呈现在用户的浏览器中。对于一个安装运行了大量模块的网站或存在大量内容的页面,每个页面的数据库查询请求可能有上百个。一般情况下,您不会注意到这些,这是因为现在的计算机系统运行速度很快还有Drupal十分拥有很高的效率。但如果是一个每分钟页面访问量达到成百上千的非常忙碌的站点,大量的数据库查询请求可能使得服务器的速度大大降低。
而通过开启Drupal的缓存功能,繁忙的站点可以大幅度减少这些数据库查询请求数量。
缓存功能开启时,Drupal会将匿名用户访问的任何页面的所有HTML代码直接存入数据库中。当同样的页面被再次请求,Drupal会直接从数据库中读取之前产生的HTML代码,而不是重新生成这些HTML代码。结果,近百条的数据库请求被一条请求代替,从而大大减轻了服务器的负荷。
主链接和二级链接
一般信息
在4.6及之前版本中,主链接和二级链接是在外观主题中进行管理的。
而4.7版本,主链接和二级链接被整合到菜单系统中。通过创建菜单项,您的主题将在相应位置显示设定好的主链接或二级链接。全新安装的Drupal4.7将默认创建一个名为“主链接(Primary Links)”的菜单,用于显示主链接或二级链接。
设置您的主链接和二级链接
这里有两个相关的设置区:
- 在“管理”>>“设置”>>“菜单”中,您可以选择哪个菜单用于主链接、哪个菜单用于二级链接。如果您已向默认的“主链接(Primary Links)”菜单中添加了菜单项,但它们却没有显示出来,请查看此处设置并确保没有设置为“没有主链接(No Primary Links)”。
- 在“管理”>>“菜单”中,您将找到默认的“主链接(Primary Links)”菜单,您应该添加您的链接至其中,即向里面添加菜单项。当然,您也可以常见一个新的菜单用于二级链接,或者另外新建一个菜单用于主链接。请记得将“管理”>>“设置”>>“菜单”设置成相应的菜单。
自定义显示您的主链接和二级链接
通过一下两种方式在页面上显示主链接和二级链接:
- 您可以添加一个菜单区块,就像其它的菜单一样。
- 您可以在页面中希望显示菜单的地方添加如下代码:
<?php if (isset($primary_links)) { ?><div id="primary"><?php print theme('links', $primary_links) ?></div><?php } ?>
<?php if (isset($secondary_links)) { ?><div id="secondary"><?php print theme('links', $secondary_links) ?></div><?php } ?>
之后您可以使用CSS定义菜单的显示。
设置主页上的文章数目和摘要长度
在“管理”>>“设置”>>“文章”中,您可以设置在类似主页的总览页面上显示的文章数目和文章摘要的长度。您也可以设定是否强制用户发表前进行预览。
注意:摘要长度设置只影响新建立的或更新的内容。
文件系统设置
通过设置文件系统,您可以控制用户和管理员是否可以上传下载文件及怎样上传下载。
没有设置或设置不当,在“设置”页面上可能将显示一条或更多的错误信息,以提示“文件系统路径”或“临时目录”不存在或权限设置有问题。
其实,您只需简单的创建这些目录并赋予它们正确的权限(通常是完全的权限),这样Drupal就可以读写这些目录了。
如果您不确定在什么地方或怎样创建这些目录,或怎样改变目录的权限,请联系您的网站空间服务商以获得进一步的协助。
日期时间设置
Drupal允许您设置日期和时间的格式及如何显示。当您设置日期和时间的格式时,应考虑到网站受众和用户的文化习惯。
以下是对于如何设定“默认时区”及“配置时区”可选项的一些建议。
- 若网站的大多数用户生活在一个相对小的地理区域:
设置“默认时区”为此地理区域的时区,将“配置时区”可选项设为“禁用”。
- 若网站的大多数用户生活在跨越连续几个时区的地理区域(例如,中国或美国):
设置“默认时区”为此地理区域的标准时间所在的时区,将“配置时区”可选项设为“禁用”。例如,在中国,您应将“默认时区”设置为北京时间所在的时区,即GMT+0800。
- 若网站的用户生活在全球各地:
设置“默认时区”为格林尼治标准时间(GMT+0000),将“配置时区”可选项设为“启用”。
界面定制
当发布一个新的drupal站点时,你可以从以下一些方面来对你的站点设计与结构进行个性化的定制。
定制登陆界面
在Drupal缺省设置下,用户未登陆时总是显示登陆区块的。但有时候你可能需要隐藏登陆区块。比如一个站点只有极少数用户被允许登陆后发布或编辑文章,而绝大多数用户只是浏览者(比如一个个人blog就是典型的例子),这时候你可能会希望隐藏登陆区块,因为占用了很大一部分页面但是对大多数用户并没什么用,反而会引起用户的困惑。
要关闭/隐藏登陆区块,你需要:
- 进入区块设置(“管理-〉区块”)
- 清楚“用户登陆”的复选框
登陆区块隐藏后,需要编辑的用户以及管理员可以通过下面的链接进入登陆页面:
http://www.example.com/?q=user
(将上面的example.com替换为你的drupal站点地址)
你还可以更进一步定制自己的登陆区块。
你可以在 “管理-〉访问控制->账户规则” 里定义自己的用户名称与email规则。如果一个用户帐号或email地址符合你所定义的拒绝规则,同时并不符合任何允许规则时,那么这个新账户将是非法的,用户将不能注册此账户。常见的用途是,你不希望用户名中有任何不恰当的字眼,比如“管理员”或者“xxxx"之类的。
检查输入格式过滤器
Drupal的输入格式过滤是一项重要的功能,但是很多新手往往对此不太了解。输入格式控制可以让管理员更好的控制站点上内容的发布格式,例如是通过HTML还是bbcode的格式发布等等。Drupal社区有很多扩展模块提供了各种各样的输入格式过滤功能。
在“管理->输入格式”下面可以进行相关的设置。
用户注册的设置
管理员可以对用户注册进行控制,共有三种选择:
* 只有管理员可以创建新的用户帐号。
* 访客可以申请创建帐号,需要管理员批准后生效。
* 访客可以自行创建帐号,无需管理员的批准。
如果你允许用户注册,用户注册后将通过email收到自动发出的欢迎信,所以最好花一点时间来写好你的站点的欢迎词。
在这里你还可以设置是否支持用户头像。
如果你使用4.6,这些设置在 “管理 >> 用户 >> 设置” 下。如果你使用4.7,这些设置在 “管理 >> 设置 >> 用户” 下。
如果你需要创建用户名规则来限制特定用户名的使用,或者禁止特定的email地址用户注册,那么可以到 “管理 >> 访问控制” (?q=admin/acess/rules)下建立相应的账户访问规则。
访问规则可以用来限制特定用户名或注册email的使用。如果一个用户名或email地址符合任意一条拒绝规则,同时并不符合任意一条允许规则,那么这个这个新账户的注册将被拒绝。
在创建规则时可以使用通配符:
% 百分号,匹配任意长(包括0个)字符。
_ 下划线,匹配恰好1个字符。
例如:
%- 将包括任何以 ‘-’ 结尾的用户名
w_r 将包括第一个字母为w,第三个字母为r的所有用户名(如wor, war等)
在账户规则设置页面同时提供了一个检查工具,来帮助你检查你要创立的规则是否正确工作。
创建菜单结构
Drupal自带的菜单模块允许你建立无限嵌套的菜单结构。在 “管理 >> 模块” 下启动菜单模块后,就可以进入 “管理 >> 菜单” 进行菜单设置了。
Lullabot提供有一份配有英文解说的视频,演示如何建造基本的站点导航菜单系统。
创建菜单
- 要添加菜单,只需到 “管理 >> 菜单” 下点选 “添加菜单” 并提供菜单名称即可。
- 建立了菜单后,还需要到 “管理 >> 区块” 下找到你刚刚添加的菜单名称,点选其后的复选框来开启菜单。你还同时可以选择菜单显示的位置与顺序(权重)。关于区块的介绍与使用,请参考手册中的区块介绍。
- 建立菜单项。回到 “管理 >> 菜单” 页面,点击 “建立菜单项”。在这里你可以定义具体菜单项,如标题、说明、路径等。(关于路径及url别名,请参见pathmodule模块的相关介绍。然后,你还为这个菜单项选择一个上级菜单项,也就是说这个菜单项将作为哪个导航菜单项下的子菜单来显示。当上级菜单项就是第一步中定义的菜单时,那么此菜单项就成为这个菜单中的顶级菜单项。接下来选择权重,权重用来定义菜单项的显示顺序,权重数字越小,菜单项就越“轻”,也就是说越显示在上方。
你还可以为同一个节点生成多个菜单项,但是最好只有在必须的时候再这样做,因为用户将可以通过不同的菜单访问到同一个节点内容,有可能会引起用户的困惑。
简化流程
在Drupal 4.6 版本中,新建页面后你还必须要进入到菜单管理页面,才能把这个页面加入到菜单中。Drupal 4.7 大大简化了这一流程,在发布内容时,用户将可以直接通过发布页面下的“菜单设置”来将此页面加入到指定菜单中。当然,管理员可以规定哪些用户才有权限来使用这一功能。
搜索引擎和robots.txt帮助
Drupal本身就是相当搜索引擎友好(Search engine friendly)的,例如常常会有基于Drupal的站点的Google ranking在5甚至更高(小于10),而放置同样内容的其它CMS则要低的多。
不过,你还可以通过更改一些默认参数让Drupal更加搜索引擎友好。有很多Drupal的设置你都可以调节来使Drupal更加搜索引擎友好。
- 首先你需要启用简洁链接(Clean URL)
- 然后,如果你使用的版本是4.5.x,确认你去掉了链接(URL)里的会话(session)ID,这可以通过设置.htaccess文件来改变。在4.6中,链接里的会话ID是默认禁止的。
- 可选的,对某些或所有节点使用URL别名(URL aliasing)。你可以使用自动路径(pathauto)模块来为新节点自动创建别名。
在php.ini里增加内存
虽然Drupal核心的运行只需要你的服务器分配8MB的内存,但是根据你站点上使用的模块数量,你可能需要增加些内存分配。当你访问?q=admin/moudles时会加载你站点上的所有模块,不管你是否启用。如果你出现了白屏,你只有两个选择:增加分配给PHP的内存,或者删除不使用的模块。
根据你的主机的不同,有几个地方都可以完成这个配置,一般是php.ini,或者htaccess,具体要看你的主机状态。
比如:
- 在你的php.ini文件里设置
memory_limit = 12M(推荐使用,如果你拥有这个权限的话)
- 在你的sites/default/settings.php文件里设置
ini_set('memory_limit','12M');
- 在你的Drupal根目录下的.htaccess文件中设置
php_value memory_limit 12M
你需要做点试验来确定最适合你的值。
设置默认内容选项—禁止自动提升到首页
配置默认的内容工作流(workflow)以适合你的站点。默认的情况下,Drupal模块被设置为提升到首页(Promote to the front page),一些时候这个功能很有用,不过你不会总是想要这样。
4.7中管理菜单发生了变化,因此这个配置页面也移动到了其它位置。
在4.6或更早版本中:
访问管理 >> 内容
选择配置(Config)标签,然后选择内容类型(Content types)子标签。
在4.7中:
访问管理 > 设置 > 内容类型
点击有需要的节点类型的配置(Config)链接,根据你的站点的需要更改默认的工作流选项。
如果你增加或者启用了包含额外内容类型的模块,你需要重新访问这些设置。
在帖子里显示或隐藏“提交人信息”
4.7及以前版本
你可以通过下面的链接为你的站点设置适当的帖子显示信息。
?q=admin/themes/settings
在管理 >> 主题菜单下,选择配置(Configure)标签之中的全局设定(Global settings),然后在显示文章信息(Display post information)面板中为你的站点选择适当的选项。可用的选项是根据你安装的模块自动检测的,其它选项可以在单个主题配置页面设置。
5.0
在管理 >> 站点建设 >> 外观主题(admin >> site building >> themes)下面选择设置(configure)标签之中的全局设定(Global settings)。然后选择适当的文章显示选项就可以了
区块
区块是显示在Drupal站点的边栏或特定区域上的框状结构。你可以看到大多数的区块(比如,最新论坛主题)都是各个Drupal模块动态生成的,当然你也可以创建你自己的区块。
区块在在页面上显示的位置和在哪些页面显示,既取决于使用的主题,也和区块的设置有关。区块设置由区块管理页控制,你可以通过点击管理 » 区块来访问。在这个页面你可以控制每个区块的启用、在页面上的显示位置、以及在哪些页面会显示。
区块配置
区块是否在某个页面上显示取决于以下几个因素。
- 首先,区块必须被[i]启用[/i],这可以通过勾选区块管理页的“启动”复选框来完成;
- 其次,区块的[i]用户定义可见性[/i]设置必须让用户允许区块显示。你可以配置区块为[i]用户不能控制是否显示此区块[/i];[i]默认显示此区块,但用户可以自行隐藏[/i];或者[i]默认隐藏此区块,但用户可以选择显示[/i]。每个用户可以在“我的帐户”页面里选择或禁止显示可配置的区块。
- 然后,管理员可以通过设置区块的“页面自定义可见性”,来决定区块是否在站点的某个页面上显示。你可以配置区块只在某些页面显示,或者只在某些页面之外的页面显示,或者根据php代码返回值来决定是否显示。
- 最后,如果启用了[i]低负荷模块[/i],并在区块管理页面选中区块的低负荷复选框,那么只有当站点的负荷低于指定阀制的时候,区块才会显示。
当你配置好区块,使其按需要显示在指定页面的正确边栏时,你可能希望调节区块的权重来指定区块在边栏中的垂直位置。区块的权重通过区块管理页面的下拉选择框来选择,更重的区块(具有更大的正值权重)会“下沉”到边栏的底部,同时更轻的区块将向顶部“上浮”。
更多信息可以在手册的模块部分有关区块介绍里找到。
限制特定页面上的区块显示
在区块配置的“页面定义可见性设置”选项组下面有一个大文本框,其中每一行你可以输入路径指定区块在哪些页面将会显示或者不显示,这取决于你上面选择的选项。
下面是一些有注释的例子,它们都假定你选择了第二个选项(只在指定页面显示),如果你选择了第一个选项(在除了下列页面外的所有页面上显示),区块将会在除了你下面列出的页面之外的所有页面显示。你可以在列表中加入任意多个页面,每个占一行。(注意你不能同时指定会显示区块的页面和不会显示区块的页面,两者只能选一)
<front> 指定区块将在首页上显示
node/42 指定区块会在节点ID为42的文章里显示
aggregator 指定区块仅在聚合页面显示。
blog/* 指定区块区块会在所有地址(URLs)以blog/打头的页面上显示。注意,如果你希望在blog主页面上也能显示区块,则只要再加入一个路径blog(不需要后面的反斜线)就可以了。
另一个例子,如果你有在管理界面不需要显示的HTML,Javascript或PHP区块,你可以选择“在除了下列页面外的所有页面上显示”选择,然后使用下面的通配路径:
admin/*
除此以外,你还可以选择第三个选项(看下列的 PHP 代码是否返回 TRUE)来进一步定制区块的显示,这时需要在下面的文本框中输入PHP代码,并使用<?php ?>标记,PHP代码的返回值决定了区块的可见性。
自定义区块
自定义区块包含的内容由你来提供(与模块生成的区块相反),自定义的内容可以是静态的(如HTML)或者动态的(PHP生成内容)。事实上Drupal提供的所有功能都可以在PHP内容区块中访问到,这种区块的弹性提供了极其强大的途径来定制你的Drupal网站。
你可以通过区块管理页(点击管理 » 菜单),选择添加区块标签,并完成表单来创建自定义区块。
每个自定义区块由标题、描述和正文组成,正文中的内容可以为任意长度。
注意:在Drupal4.6中,区块的标题被用来作为数据库的标识符,因此你只能定义一个没有标题的区块(这个问题已经为更新的Drupal版本作了修正)
这个问题的一个解决办法是把标题改为:<!–title of custom block–>,这样既能满足Drupal对区块标题的要求,同时注释标记(<!–…–>)也防止了标题在区块中的显示。
数据库表名前缀(以及进程间共享表)
有些网络主机限制了客户只能拥有一个数据库,因此需要不能重复的表名。即使在这种情况下,管理员仍可以使用Drupal,甚至可以安多个Drupal,因为Drupal提供了表名前缀(table prefix)功能。
为了使用这项功能,你必须首先编辑脚本database/database.x,以创建带有你的前缀字串的数据库表。如果你要安装附加模块,你也需要修改数据库脚本里的INSERT和REPLACE语句来加上前缀(译注:Drupal 4.7模块自带的Install文件无需修改)。例如,改变以下格式的所有语句从:
CREATE TABLE access
INSERT INTO system VALUES
(’modules/filter.module’,'filter’,'module’,”,1,0,0);
变成
CREATE TABLE dr1_access
INSERT INTO dr1_system VALUES
(’modules/filter.module’,'filter’,'module’,”,1,0,0);
然后使用dr1_(举例)作为$db_prefix的值,写入到
sites/example.com/settings.php文件中。
你也可以使用脚本来自动完成这项工作,你可以同时更新多个站点,使用(bash shell)的命令行:
for F in '' prefix1 prefix2; do \
for S in 'find ./modules --name \*mysql'; do \
scripts/dbprefix.sh $F < $S | grep -v DROP |\
mysql -h DBHOST -u DBUSER -pPASSWD DATABASE; \
done;
done
注意:不是所有数据库脚本都是以mysql结尾的,这里只是一个例子; ” 表示前缀为空的情况。
这里还有一个PHP脚本,用于为/drupal/sites/*下的所有站点创建所有数据库表,可以在DRUPAL-4-6下工作,访问数据库表创建脚本问题以获取更多信息。
如果你想在多个站点间共享用户,你需要按照下面的格式设置$db_prefix变量:
<?php
$db_prefix
= array(
'default' => 'thissite_',
'authmap' => 'shared_',
'profile_fields' => 'shared_',
'profile_values' => 'shared_',
'role' => 'shared_',
'sequences' => 'shared_',
'sessions' => 'shared_',
'users' => 'shared_',
'users_roles' => 'shared_',
'users_uid_seq' => 'shared_', // 用于pgsql
);
?>
请访问共享表以及数据库间共享表一节获取更多信息。
多个数据库间共享公共表
多个数据库间共享公共表
[仅在mysql上测试过]把多个Drupal安装在不同的数据库中,但是仍然共享共用的表,这是可以做到的,只需要指定数据库名作为前缀的一部分,例如
$db_prefix = array(
"default" => "slave1.", // slave1安装的默认数据库
"users" => "master.",
"sessions" => "master.",
"authmap" => "master.",
"sequences" => "master."
"profile_fields" => "master.",
"profile_values" => "master.",
);
上面的例子中,slave1以及master为数据库名。
如果你共享的是users表,你应该还需要共享一系列的表(虽然我不太清楚)。如果你不是想共享用户表,只想共享翻译,那么共享locale表就足够了。
进程间共享表
表名前缀可以选择性的只应用到某些表上,这样多个Drupal安装就可以共享共用的表。一个有趣的应用是共享分类表(vocabularies, term_date),另一个有趣的用法是在多个Drupal安装间共享users表。
为了使用这项功能,先安装两个Drupal到同一数据库中,并使用不同的数据库前缀。在这个例子中,一个前缀为“master_”,另一个为"slave1_"。然后编辑"slave1_"安装的conf.php文件,让一些表指向"master_",实现用户共享,如下:
$db_prefix = array(
"default" => "slave1_", // slave1_安装的默认表前缀
"users" => "master_",
"sessions" => "master_",
"authmap" => "master_",
"sequences" => "master_"
"profile_fields" => "master_",
"profile_values" => "master_",
);
注意:下面的表含有的数据属于每个站点特有,因此不能被共享:
在PostgreSQL中使用模式作为前缀
本页讨论了使用PostgreSQL的模式(Schema)作为前缀的用法。“普通”前缀可以和MySQL一样的用法,所以这里不再讨论。
PostgreSQL有种叫“模式”的机制(http://www.postgresql.org/docs/current/static/ddl-schemas.html)。有时非常方便,但如果你不知道那是什么,你可能实际上不需要它们并可以不用读下去了。
模式在Drupal中可以被用作前缀,也就是说,在多站点安装中,每个站点可以存在于自己的模式中,并且共享的表可以存在于一个“共享”模式中(或者甚至可以是公共模式)。
这儿有个问题:Drupal的升级会失败。很不幸,但是没办法,因为“普通”前缀和模式前缀是不兼容的。如果你对详细情况感兴趣,请访问http://drupal.org/node/40034。
不过也不用担心,可以通过小小的修改更新脚本(update.php和updates.inc)来简单的修正这个问题。问题来自CREATE [UNIQUE] INDEX和ALTER TABLE .... DROP/ADD CONSTRAINT语句,当使用模式作前缀时,会执行下面的查询:
CREATE INDEX prefix.search_total_word_idx ON prefix.search_total(word)
ALTER TABLE prefix.boxes DROP CONSTRAINT prefix.boxes_title_key
ALTER TABLE test.contact ADD CONSTRAINT test.contact_category_key UNIQUE (category)
必须从索引名和约束名前面移除前缀,也就是它们必须改为:
CREATE INDEX search_total_word_idx ON prefix.search_total(word)
ALTER TABLE prefix.boxes DROP CONSTRAINT boxes_title_key
ALTER TABLE test.contact ADD CONSTRAINT contact_category_key UNIQUE (category)
你只需要搜索CREATE INDEX,CREATE UNIQUE INDEX和ADD/DROP CONSTRAINT语句并移除索引/约束名外面的{}就可以了。
最好的方式是运行升级测试,你可以看到错误查询的列表,然后你就可以很简单的修改它们了。
其它注释:你不能使用prefix.sh来为表加上前缀,这会产生错误的CREATE [UNIQUE] INDEX 查询。这点同样可以简单的被修正,只需要修改:
s/^CREATE INDEX \(.*\) ON /CREATE INDEX $PREFIX\\1 ON $PREFIX/;
s/^CREATE UNIQUE INDEX \(.*\) ON /CREATE UNIQUE INDEX $PREFIX\\1 ON
$PREFIX/;
为:
s/^CREATE INDEX \(.*\) ON /CREATE INDEX \\1 ON $PREFIX/;
s/^CREATE UNIQUE INDEX \(.*\) ON /CREATE UNIQUE INDEX \\1 ON $PREFIX/;
一种可选方法
如果你打算用这种方法来解决,下面是你需要做的:
1.添加下面的语句到database.pgsql文件的顶部:
CREATE SCHEMA schemaname;
SET search_path TO schemaname;
2.编辑drupal/includes/database.pgsql.inc,替换函数db_connect()为:
<?php
function db_connect($url) {
$url = parse_url($url);
$db_and_schema = explode(".",substr($url['path'], 1));
$conn_string = ' user='. $url['user'] .' dbname='.
$db_and_schema['0'] .' password='. $url['pass'] . ' host=' .
strtr($url['host'],'+','/');
$conn_string .= isset($url['port']) ? ' port=' . $url['port'] : '';
$connection = pg_connect($conn_string) or die(pg_last_error());
if(!empty($db_and_schema['1'])) pg_query('SET search_path TO
'
.$db_and_schema['1']);
return $connection;
}
?>
3.最后,在你的seeting.php文件里使用类似的db_url:
$db_url = 'pgsql://user:password@+tmp/dbname.schemaname';
- 没有进行彻底的测试,但是我的可以工作(在4.6.3上)。
- 这也解决了无法指定一个Unix socket作为主机的问题——在pg_connect()里/tmp被替换成了+tmp
。[=red]
[/]
Define shared variables for all sites
When you create a multi-site installation, an important table to duplicate is the variable table. However, by duplicating this table, you will also duplicate some variables that you might prefer not to. To force a set value for these variables, for all of your websites, you can do the following.
First, you will probably have a settings.php file for each site in your installation, like sites/example.com/settings.php. Edit each file and add the following to the end.
include_once ('./sites/default/shared_variables.php');
Now, in the default directory, add a file called sites/default/shared_variables.php containing the following.
<?php
/**
* These variables are fixed for all sites that have this line of
* code in their settings.php file:
*
* include_once ('./sites/default/shared_variables.php');
*/
$conf = array(
'site_name' => 'All these sites are belong to us.',
'theme_default' => 'pushbutton',
'anonymous' => 'Visitor'
);
The element names (eg. ’site_name’) correspond to a variable in the variable table. So no matter how many copies of the variable table that you need, each site in your multi-site installation will defer to the variables that you define in the $conf array in your shared_variables.php file.
The disadvantage is that these variables cannot be edited via the Drupal admin pages.