欢迎莅临阿Q的项目

专业WP商业设计开发销售中心

今天心血来潮学习Drupal,解决了一系列问题,比如如何给内容类型添加分类,给所见即所得浏览器添加图片上传功能。在学习过程中,发现Drupal已经更新到7.9了,本地还是7.0,于是在网上整理了一下升级的步骤...
theme.inc 是控制Drupal输出的主题系统,它允许用户主题定制几乎所有的Drupal系统输出。 函数及方法 Functions & methods drupal_find_theme_functions - 允许主题或主题引擎轻松重写主题函数. drupal_find_theme_templates - 允许主题或主题引擎轻松重写主题模板. drupal_theme_access - 确定是否可以使用该主题. drupal_theme_initialize - 初始化主题系统. drupal_theme_rebuild - 强制重建主题注册表; 使用在当增加了新的主题模块或主题钩子时. list_themes - 返回当前可用主题的列表. path_to_theme - 返回当前主题的路径. template_preprocess - Adds a default set of helper variables for variable processors and templates. This comes in before any other preprocess function which makes it possible to be used in default theme implementations (non-overridden theme functions). template_preprocess_html - html.tpl.php 的预处理变量 template_preprocess_maintenance_page - 这里生成 template_preprocess_page() 的变量数组镜像. 这个预处理将运行于 theme_maintenance_page() 运行时. template_preprocess_page - page.tpl.php 的预处理变量 template_preprocess_region - region.tpl.php 的预处理变量 template_preprocess_username - theme_username(). 的预处理变量 template_process - 一个默认的进程程序,用于尽可能晚的改变变量. template_process_html - html.tpl.php 的预处理变量 template_process_maintenance_page - 这里生成 template_process_html() 的变量数组镜像. […]
预处理函数仅适用于模板形式的主题钩子.它的主要作用是设置模板文件(*.tpl.php)中所用到的变量。在预处理器(Preprocessor)中,一般涉及不到普通的主题函数。 对于单个主题钩子,可以有多个预处理器。内核,模块,引擎,主题,每层都可以有一个预处理器,来逐步的构建显示在模板文件中的变量集。通过将大部分逻辑放到这些预处理器中,可使得模板文件更加简洁,易于使用。 下面是预期的预处理器。当它们同时存在时,按照下面的顺序运行: template_preprocess -这个是由内核提供的,也是始终存在的。这里声称的变量在所有的模板钩子中都可以使用. template_preprocess_hook -实现了主题钩子的内核或者模块提供该处理器。特定于某个钩子的变量,通常首先在这里生成。 moduleName_preprocess -不要将这个与前面的预处理器混淆了。对于那些最初没有实现钩子的模块,它允许影响变量集。它将在所有的钩子中运行。 moduleName_preprocess_hook -和第3个一样,但是特定于某个钩子。 engineName_engine_preprocess -主题引擎的预处理器。适用于所有的钩子。 engineName_engine_preprocess_hook -主题引擎的另一个预处理器,特定于单个钩子。 engineName_preprocess -这是第一个可以在主题内部使用的预处理器。命名方式为,主题所用引擎名称+预处理器名。适用于所有的钩子。 engineName_preprocess_hook -这个和第7个一样,但是特定于单个钩子。 themeName_preprocess -命名方式为:主题名+预处理器名。适用于所有的钩子。 themeName_preprocess_hook -与前者一样,但是特定于单个钩子。 这里有多种方式可修改变量集。在大多数情况下,只有前两个预处理器存在。第一个,添加了所有的默认基本变量,而第2个添加了特定于该主题钩子的变量。第3方模块,如果用到了第3和第4个预处理器的话,需要添加注释对其进行详细说明。这里就不对此展开讨论了。 尽管可以这样做,但是默认的PHPTemplate没有对变量集进行修改。 从列表中的第7个开始,所有的预处理器都是放置在主题中的。这个预处理器列表最多是可以超过10个的,那就是使用子主题,子主题是基于第9和第10个预处理的前缀主题名的,但是这种情况在实际中很少用到。 注意: 一般推荐在基主题的预处理器中使用引擎名称。这有利于代码在主题之间的迁移,同时有利于在Drupal.org上发布代码片断。 而只有在子主题(sub-themes)中才使用主题名称。这将减少潜在的重名冲突,在PHP中是不允许重名的。 为了识别你主题的预处理器,与钩子相关联的模板必须位于主题内部。如果存在默认的模板的话,将其拷贝到你的主题下面,并清空注册表。 注意,这些函数中都没有返回值,所有的变量都是通过引用传递的,前面都有符号“&”,比如&$var。 由于这里适用的是引用方式,所以在前面设置的变量,在后面的预处理器中都会存在,所以你一定要小心,不要在这里出什么乱子。重置以前的变量是可以的,但重置以后,你总会疑神疑鬼,感情哪里会出漏子。 这个例子,来自于实现了钩子"foo"的模块: [syntaxHighLighter brush="php"]function template_preprocess_foo(&$variables) { $variables['foo_list'] = array( 'list item 1', 'list item 2', 'list item 3', ); }[/syntaxHighLighter] 在主题的预处理器中添加变量集: [syntaxHighLighter brush="php"]function drop_preprocess_foo(&$variables) { // Do not do this unless you mean to: $variables['foo_list'] = array('list item 4'); // Instead do this: $variables['foo_list'][] = 'list item 4'; }[/syntaxHighLighter] 在模板文件中使用的变量,就是$variables的键。所以,在上面的例子中,在模板文件中可用的变量就是$foo_list。
Drupal的区块(Block)功能可以嵌入HTML和PHP代码,能够按照权限、URL匹配控制显示,还是很方便、灵活的,不过因为MediaWiki的版面格式用习惯了,无法在Title下添加一个区块有时显得不太方便(Header区块默认是在页面最上方)。 前些天就知道Drupal中Garland主题的默认区块位置以外还可以添加更多的区块,但一直没有尝试,今天来进行了尝试,还是很方便可以实现的,下面分三步进行记录: 第一步:修改模板文件 修改Garland主题目录中的页面模板文件page.tpl.php,插入增加的变量: [syntaxHighLighter brush="php"] <?php print $help; ?> <div> <?php print $top ?> //在内容上方新增变量$top <?php print $content ?> //原来就存在的内容变量$content <?php print $bottom ?> //在内容下方新增变量$bottom </div> <?php print $feed_icons ?> [/syntaxHighLighter] 保存修改后,不会生效,还需要修改注册文件: 第二部:修改注册文件 修改Garland主题目录中的注册文件garland.info,插入新增加的变量: regions[left] = Left sidebar regions[right] = Right sidebar regions[content] = Content regions[header] = Header regions[footer] = Footer regions[top] = Top regions[bottom] = Bottom 除了最下面增加的两行以外,注意还要把默认包含的上面五行也写进来,否则以前的区域区块会消失。 第三部:刷新缓存、开始使用 再就是需要刷新缓存,修改后的garland.info才会生效。在管理菜单中刷新生效后,新增的两个区域即可与以前的五个区域一样显示出来、可以放置区块。 以上办法可在Drupal 6.xx中正常使用。 转自:James Qi's Personal Website
Drupal是一个开源的内容管理系统(CMS) 平台,它是用PHP写成的。主要用于构造提供多种功能和服务的动态网站,这些功能包括用户管理(UserAdministration)、发布工作流 (Publishing Workflow)、讨论、新闻聚合(NewsAggregation)、元数据(Metadata)操作和用于内容共享的XML发布。Drupal有一个优秀的模块化结构,提供了许多模块,包括短消息、个性化书签、网站管理、Blog、日记、电子商务、电子出版、留言簿、Job、网上电影院、论坛、投票 等模块。并且Drupal模块的下载、安装、定制非常方便。
任何一个网站都需要一个功能强大的所见即所得编辑器,Drupal在这方面的表现尤其强大,只需要通过一个Wysiwyg模块就可以任意安装多达10种编辑器,这点是Wordpress无法比拟的。 首先,从Drupal.org上下载Wysiwyg,将下载的压缩包里的文件夹解压到Drupal网站下的sites\all\modules目录,然后在Drupal的后台的【模块】中启用Wysiwyg,之后便可以配置它了。Wysiwyg为我们提供了10个编辑器选项,我比较喜欢CKEditor和TinyMCE,这里用CKEditor举例。 下载CKEditor,将文件夹解压到sites\all\libraries,刷新Wysiwyg的配置页面,就可以看到Input format提供三个选项(Filtered HTML, Full HTML, Plain text)让你选择使用哪种编辑器,并且你还需要在选择编辑器之后,设置一下该编辑器的选项,比如选择编辑器的语言和将需要使用的编辑器按钮勾选上。 至此,所见即所得编辑器安装完毕。
下载 Download 下载Drupal:http://drupal.org/download; 下载简体中文语言包:http://localize.drupal.org/translate/languages/zh-hans; 安裝 Install 将Drupal解压上传到站点根目录; 将语言包上传到到 profiles\standard\translations\; 建立drupal数据库; 在浏览器地址栏输入 http://yourDomain.com 进入安装程序,在Choose language的时候就可以选择简体中文了; 如果drupal7 导入翻译时出错: [question] 请到错误页面 An AJAX HTTP error occurred.HTTP Result Code: 500Debugging information follows.Path: http://localhost/drupal/install.php?profile=standard&locale=zh-hans&id=2&op=doStatusText: Internal Server Error ResponseText: [/question] 解决方法 打开\sites\default\settings.php文件,在最后增加以下两行: [syntaxHighLighter brush="php"] ini_set('memory_limit', '1280M'); //加大php的内存 也可以在php.ini中设置 ini_set('max_execution_time', 200); //加大页面执行时间 php.ini中的默认值是30 (秒) [/syntaxHighLighter] 或者在php.ini里修改: [syntaxHighLighter brush="shell"] max_execution_time = 300 memory_limit = 128M [/syntaxHighLighter] 如果上述方法依然不能凑效,可以先安装英文版,再导入中文包。 英文版的安装就不再赘述,下面介绍一下如何导入中文包: 在英文版安装好了以后,点击顶部的菜单“Modules”,进入模块管理页面(admin/modules),找到“Locale”模块,将其开启。 接着点击“Configuration” > “Languages”,进入语言管理界面(admin/settings/language)。 点击 Add Language 连接,选择 Chinese, Simplified(简体中文),接着点击“Configuration” > “Translate interface”,再点击“Import”,在“Language file”下选择本地已下载的drupal7中文包,接着点击“Import”按钮,即可开始导入中文包。 到 admin/settings/language 目录下,将简体中文设为“Default”即可。 如果还不行,改MySQL的my.ini文件: [syntaxHighLighter brush="shell"]innodb_flush_log_at_trx_commit=2[/syntaxHighLighter] 真的很有效哦!