Drupal 7 开发内部培训资料, 分头诗人

5月10日,Drupal 深圳交流研讨会

今年5月份,深圳地区经历了自2008年来最大的一场暴雨!气象局在头一天发布了橙色暴雨警报,但这么恶劣的天气并没有熄灭我们Drupaler 聚会交流的热情,广州、东莞及深圳各地的Drupaller如期聚集到了一起。也感谢黎浩江和赵高欣在聚会时候的分享。特别需要感谢晴天组织了这次聚会,我们期待广深地区Drupal 交流聚会越办越好!

另外,在以后Drupal 广东区域的聚会,我们都会公布在Drupal 广东群里面,群号是:345293977

 

 

Drupal 7 创建一个自动建立机器名的表单(如创建内容类型时候一样)。

在自定义表单的时候,我们有时候需要用到自动生成机器名,如创建内容类型的时候。该怎么做呢,很简单,见下面代码。

跟烦人的垃圾信息说再见。

垃圾信息屡禁不止,相信做动态站的站长都有深刻体会,如论坛,或者问答站。

Drupal 上面有很多的垃圾信息过滤方式,如验证码模块CAPTCHAreCAPTCHA

还有是链接第三方垃圾资料库的模块如:Spambot,通过注册表单的控制,检查注册的名字、ip、邮件等数据是否在www.stopforumspam.com网站的黑名单里面,从而过滤掉一部分垃圾注册用户。

还有其他类似Bad Behavior之类的模块,都是反机器人模块,为了减少垃圾信息而存在。

还有设置邮件验证注册等系统基本的反机器人机制,都能有效的减少垃圾信息的出现。

但现在的机器人系统越来越精明了,很多机器人能穿过这道道的难关,顺利通过注册流程,进而开始肆无忌惮的发垃圾信息。

做了那么多的安全工作,却还是给攻破了,确实很无奈。

如猪跑啦网站,每天总会有几条垃圾信息的出现,尽管不是很多,但还是很碍眼。

偶尔在一个项目里面,发现他的注册表单里面有一个隐藏的email input box,开始我很不明白,为什么要隐藏起来了不让别人看到,那留着在注册表单就变成累赘代码了。我用浏览器的开发者工具在隐藏的email input box 里面增加一个email,点击提交,发现居然无法注册了。提示我是机器人。。。

顿时茅塞顿开,其实只是很简单的原理,一个隐藏的表单元素,正常的注册者,如果不是打开开发者工具的话,是不会发现的,所以通常是留空的。

但机器人不同,机器人是直接通过html代码做填写动作的,就算是隐藏的表单元素,他都能搜索出。于是就自动的填写上了。

结果是显而易见的,机器人注册失败了。

我把这个功能加在drupalla.com 后,发现还真的少了很多的垃圾信息。非常有效。

当然,这也只是暂时的,我相信机器人会越来越聪明的,与垃圾作斗争,是站长长期的工作。

注:这里推荐一个模块:Honeypot,它的原理就是在表单增加隐藏字段,可以设置指定的表单,而不单单是只能用于注册表单。

第一个Drupal8 做的网站, 基于Drupal 8 Alpha 7。

网址:http://www.gqwuliu.com

Drupal 8 真的非常强大,但苦于正式版一直没有面世。为了切身体验一下Drupal 8 带来的惊喜,我毅然选择了Drupal 8 Alpha 7作为基础进行开发一个企业站。

途中遇到不少的障碍,例如搜索引擎没有任何的文档资料,官方也没有文档资料。官方模块也是寥寥无几,主题屈指可数,如表单没有webform,只能用form api;slideshow 也没有,只能自己幻灯片;faq功能也没有,只能自己写。就算有的,也是一堆的bug。

更痛苦的是Drupal 8 Alpha 7的核心bug也真的不少,连views 也有bug而只能放弃,自己写列表。。。。。。经常莫名其妙就出现错误,Alpha 8 出来后,直接升级还失败了。

官方解析是,无法Alpha 版本升级Alpha版本。。。

这是我的一个bug反馈。答案超级无奈。Drupal 8 Alpha 7 To Alpha 8 Upgrade error

不过怎么说也好,Drupal 8 Alpha 7做企业站还是绰绰有余的。

只用了自定义模块,官方的第三方模块没有用,所以速度还可以,下面是自定义的模块。

下面是网页截图。

首页:

内容页:

列表页:

表单页:

关于 Drupal中 Entity 的通俗解释

Drupal 的 Entity 是一个很重要的概念,暂时把 Entity 翻译成“实体”吧。正确的理解 Entity,有助于理解 Drupal 信息管理结构,对于使用 Drupal 会有很大的帮助,下面将对这个 Entity 做一个通俗的解释。

先简单介绍一下 Entity:

什么是 Entity?Entity 包括 Nodes(节点), Users(用户), Taxonomy Terms(术语), Comments(评论),它们都是实体,只是命名和用途不一样而已。下面翻译一下 Drupal 官网找到的几行定义文字:

An entity type is a base class
一个实体类型是基础类别
A bundle is an extended class
一个集合是扩展类别
A field is a class member, property, variable or field instance (depending on your naming preference)
一个字段是一个类别的成员、属性、元素、或者字段实例(取决于你的命名喜好)
An entity is an object or instance of a base or extended class
一个实体是一个物体,或者是基础类别的实例,或者是扩展类别的实例

更多的就不翻译了,免得看得一头雾水。如果你能理解,下面的内容也不用看了。

关于 Entity 的通俗解释:

这是根据我对 Entity 的理解来解释的,我觉得我对 Entity 理解得差不多了,不至于对大家造成多大的误导。

好了,让我们来打个比方,请充分发挥你的联想能力:

把 Entity Type(实体类型) 看做事物——事物有很多种,包括生物、非生物等,比如竹子、蝴蝶、雨花石、空气等。
把 Bundle(集合) 看成某一类具体的事物,比如竹类——竹子其实也分很多种,比如水竹、毛竹、紫竹、苦竹等
把 Entity(实体)看成某一种具体的事物,比如毛竹——毛竹其实其实是由很多部分组成的,比如主干、竹枝、竹叶、根须等
把 Field(字段)看成组成某一具体事物的一部分,比如竹叶
这样也许比较好理解吧。你也可以把 Bundle 看成蝴蝶这个大类,Entity 相当于大鸟翼蝶什么的,字段相当于翅膀、触须什么的。以此类推。

在drupal 8 中增加模块,创建区块。

今天花了一点时间,眼睛了一下drupal 8的模块开发。并且分享一下作为例子。

在开发前,我们首先看看在drupal7 下的基本模块是怎么样的。

test.info

; $Id:$
name = Test
description = "Test Module"
package = "Test"
core = 7.x
dependencies[] = node
dependencies[] = some_other_custom_module
files[] = test.module

test.module

Drupal 7 与 Drupal 8 的一些变化

1,Settings, States, ConfigEntity

Drupal 7:保存配置

// mymodule/mymodule.module
variable_set("mymodule_results", 5);

Drupal 8:保存配置

// mymodule/mymodule.module
config('mymodule.config')->set('results', 5)->save();
// mymodule/config/mymodule.config.yml
myvalue: 5

Drupal 7:保存状态

// mymodule/mymodule.module
variable_set("mymodule_last_update", 12345678);

Drupal 8:保存状态

// mymodule/mymodule.module
state()->set('mymodule_last_update', 12345678);

Drupal 7:设定

Drupal 7的设定是放在数据库

Drupal 8 设定是基于ConfigEntity,举例图像样式,image style。

在sites/default/files/config/activeXXX能看到image style的配置。

现在通过drupal 8后台增加一个image style,你会发现多了一个配置文件。

如果我们把这个配置文件拷贝到其他drupal8站点的话,同样的,在drupal8后台也能看到新加的image style

drupal 7 通过编写代码方式创建自定义区块。

我们先看看跟block相关的钩子。
hook_block_info () –用于在模块中声明新的区块,以及指定区块的初始设置。每个区块通过一个数组声明,其中使用了在本模块中用来唯一标识区块的delta作为该数组的键。注意:是在本模块中唯一标识。也就是说:其他模块中可能出现与本模块中区块同名的delta。这就意味着:通过“模块名+delta”可以唯一确定一个区块。block的基本信息,如是否缓存,是否默认开启,是否默认显示在某些页面,显示在哪些页面等。
在每个区块声明数组中有很多键值对:

  • info:必须,指定区块的人读名。
  • cache:可选,指定区块的缓存类型。
  • properties:可选,附加给区块的元数据。
  • weight:可选,指定区块的权重。
  • status:可选,指定区块的启用状态。
  • region:可选,指定区块的所在区域。
  • visibility:可选,用于区块可见性,解释了pages的值。
  • pages:可选,用于区块可见性。

hook_block_info_alter() – 我们知道,凡是钩子以 alter结尾的,都是要来修改已有的内容的。这个也不例外。价值在于不需要
hook_block_configure() -用于定义区块设置表单。在Drupal后台的区块管理列表中(http://你的网站域名/admin/structure/block)的Operations一栏,可以看到每个区块都有一个configure链接,点击进去就是每个区块的设置表单了。该钩子函数就是为这个设置表单添加新的设置项目的。首先通过delta确定需要定义设置的区块,然后创建表单项,再通过Drupal的持久变量提供默认值。
hook_block_save() -用于保存来自hook_block_configure()的区块设置。它需要的参数有两个:

  • $delta:需要定义设置的区块。
  • $edit:来自通过hook_block_configure()定义的区块设置表单的数据,它的键是表单的元素。

hook_block_view() - 用于生成区块的内容。它的返回值是一个数组,该数组有两个键:

七节课掌握DRUPAL7应用之三:DRUPAL的seo设置

本节课主要讲怎样通过使用drupal的一些功能模块,实现网站的seo效果。

说起SEO(Search Engine Optimization),汉译为搜索引擎优化,真是每个做站的站长都要了解的基本功了。不过国内做seo的手段有点太过了,其实已经超出优化的范畴,弄得SEO这个词都有点被妖魔化了。呃好像不应该评论这些东西太多,因为本人也做过这些事情。

言归正传,本节课是给大家讲解一些drupal为站长们提供的seo模块功能,学会使用后。你就会体会Drupal在SEO方面得天独厚的优势了。(当然你不能拿来和国内那些seo“过激”手段比的)

那么我们先从链接别名的设置开始说起:

链接别名的设置

当你在互联网上搜索网站的时候,如果看到链接是http://yourdomain.com/node/83 这种形式,那它99%可能是drupal平台搭建的网站。

这种是很典型的drupal内容页面的链接。不过,也可以把链接语义化,比如网站的自我介绍页面就可以用http://yourdomain.com/about-us,让网友看链接就明白。
下面说下链接别名设置的步骤

1、进入链接别名的设置界面。

先点击进入后台的设置页面( Configuration),然后点击域名别名(URL Aliases)的链接进入。

对应路径地址(admin/config/search/path)

2、链接别名自动化的设置

在你发布文章内容,进行网站运营前.我推荐你先对你发布内容类型的链接格式设置进行定义.

这样你发布某种类型内容时就能自动生成带语义的别名链接了,比如:

产品介绍文章的链接可以变成 /product/[node-title](标题)

图片内容的链接可变成 /image/[node-title] (标题)

博客文章的链接可变成 /image/[node-title] (标题)‘

要实现以上这些形式,先要进入链接别名的设置界面,然后点击“格式”(Pattern)这个tab页。

按照下图,例如你要发表所有博文的链接都能显示用户名和标题,你可以设置成blogs/[user-raw]/[title-raw] 的格式。

猪跑去牛背山了。。。

2013年9月15日,猪跑上牛背山了。

http://www.mafengwo.cn/i/2857176.html

 

页面

订阅 RSS - 博客