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

drupal 新用户注册 要邮箱验证后才能激活账户同时让游客自己设置密码

今天解决的一个小问题,来分享一下,发现网上还没有相关的教程。

 

需要用到的  两个小模块。1.User registration password     2.LoginToboggan   

安装好后在后台设置一下。admin/config/people/accounts    这里设置成Require a verification e-mail, but let users set their password directly on the registration form.    

admin/config/system/logintoboggan    里设置  勾上 Set password。

最重要的一步,写一个rules

{ "rules_blockuser" : {
    "LABEL" : "blockuser",
    "PLUGIN" : "reaction rule",
    "REQUIRES" : [ "rules" ],
    "ON" : [ "user_insert" ],
    "DO" : [ { "user_block" : { "account" : [ "account" ] } } ]
  }
}

大家复制我的rule规则,导入就可以啦。

希望对大家有用。

www.drupalla.com

Drupal全球培训日——中国站报名啦!

Drupal培训日(Drupal Training Day)是由Drupal官方发起的一个全球性的培训活动,目的是向所有对Drupal感兴趣的人介绍Drupal。


今年中国地区独家活动举办者落户到戴文。我们将跟全球Drupaler共同在12月14日这一天全天展开免费Drupal培训。

也许你还没开始使用Drupal、只是在各大CMS(内容管理系统)之间进行评估,也许你刚刚开始考虑使用Drupal—— 不用犹豫,此次Drupal Day向诸位开放!

我们希望经过这一天,能够给您一些指引,即使您对PHP/HTML/CSS/JS很陌生,也能够通过此次倾听对未来职业(Drupal开发者、设计师、前端工程师、软件工程师、网站架构师、市场推广者等)的选择比以往更清晰。
 

培训经历


这并不是戴文第一次为Drupal爱好者提供培训。Drupal培训一直以来都是我们的服务项目之一。每一次服务于客户,在网站完成/稳定后、最终发布前,我们都会为客户进行培训。培训对象拥有不同的技能和工作背景、来自不同岗位,有网站编辑、市场专员和拥有设计师和前端开发者和IT部门。

我们还为已经使用Drupal系统的公司提供单独的Drupal培训。我们曾为一位已经使用Drupal搭建网站的客户向其IT部门提供Drupal培训。
 

培训课程内容

此课程由戴文提供,并经Drupal Association审核通过。

  • 简介及综览
  • 核心模块及第三方模块介绍
  • 操作指导
  • 多语言指导
  • 基本模块安装
  • 空间及文件结构
  • Drupal hooks基本模块API
  • 编程准则
  • 社区的力量

 

培训时间/地点/公交


- 12月14日上午10点到下午5点。
- 上海市闸北区中山北路900号加禾商务中心2号楼311室。戴文信息科技(上海)有限公司。
- 地铁1号线(富锦路方向)中山北路站1号口出,西行470米即到加禾商务中心。
  公交可选:47, 69, 129, 252,309,706,829,849,869。
 

报名

离12月14日培训日还有三天,即刻报名吧!

Drupal 7中通过Views建立一个A-Z(Glossary-Style)的分类

Drupal 的Views 是一个非常强大的模块。还能做A-Z(Glossary-Style)的分类。只需要开启glossary view,你会找到一个,依照字母排列的功能。他会显示一个A-Z的分页,

 

1,基础设置(Basic Settings)

  • Display Status: Enabled
  • Items to display: All Items

 

2,高级设置(Advanced Settings)

  • Use AJAX: Yes
  • Use grouping: No
  • Query settings: Settings

 

3,样式设置(Style Setting)

  • Style: Unformatted
  • Row style: Node

 

4,附件设置(Attachment Settings)

  • Attachment to Block/Page/Multiple Pages
  • Position before

 

5,上下文过滤(Contextual Filters)

写一个简单的导入csv 进drupal 数据库的模块。

很多人有问我,Feeds 模块怎么用,如何导入,说真的,我也没细看,不过如果说只需要导入功能的话,其实不需要一定要feeds,只是几句简单的代码就能实现。

我们来建一个模块,名字叫thinkincsvimport,先在sites/all/modules/建立文件夹thinkincsvimport。 并在里面建立三个文件:thinkincsvimport.info / thinkincsvimport.module / thinkincsvimport.pages.inc

1,thinkincsvimport.info,填写基本资料

name = thinkincsvimport
description = thinkincsvimport.
core = 7.x
package = http://www.thinkinsoft.com
files[] = thinkincsvimport.module

2,thinkincsvimport.module,定义一个地址

<?php
/**
 * Implements hook_menu().
 */
function  thinkincsvimport_menu() {
  $items['csvimport/import'] = array(
    'title' => t('CSV import'),
    'description' => t('CSV import'),
    'page callback' => 'csvimport',
    'file' => 'thinkincsvimport.pages.inc',
    'access arguments' => TRUE,
    'type' => MENU_NORMAL_ITEM,
  );
  return $items;
}

 

3,thinkincsvimport.pages.inc,导入数据库

Drupal 7 以编程方式创建词汇表

Drupal 7 里面有这样一个函数:taxonomy_save_vocabulary(&$vocabulary),这个函数用来创建一个新的词汇表或者更新一个已有的词汇表。参数$vocabulary是一个关联数组(注意它不是一个词汇表对象!),包含以下键:

? name: 词汇表的名字。

? description: 词汇表的描述。

? help: 一个帮助文本,在节点创建表单中,它显示在这个词汇表字段的下面。

? nodes: 一个数组,包含了这个词汇表适用的所有节点类型。

? hierarchy: 0表示没有层级,1表示单个层级,2表示多个层级。

? relations: 0表示禁用相关术语, 1表示允许相关术语。

? tags: 0表示禁用自由标签化, 1表示启用自由标签化。

? multiple: 0表示禁用术语的多选,1表示启用多选。

? required: 0表示节点被提交前术语是可选的(这将引入一个默认的“没有选择任何选项”术语), 1表示节点提交前术语是必选的。

? weight: 词汇表的重量;它影响它在节点提交表单的词汇表字段集里面的位置。

? module: 负责这个词汇表的模块的名字。如果没有传递这个键,那么它的值默认为taxonomy。

? vid: 词汇表ID。如果没有传递这个键,那么将创建一个新的词汇表。

taxonomy_save_vocabulary(&$vocabulary)函数返回SAVED_NEW 或者 SAVED_UPDATED。

Drupal 7 模板改写建议

原文:Drupal 7 Template (Theme Hook) Suggestions

核心默认主题改写建议

区块

基模板:block.tpl.php
block--[region|[module|--delta]].tpl.php
查找顺序:

  1. block--module--delta.tpl.php
  2. block--module.tpl.php
  3. block--region.tpl.php

例子:block--block--1.tpl.php,block--sidebar_first.tpl.php,block--custom--my-block.tpl.php

 

评论

基模板:comment.tpl.php
comment--node-[type].tpl.php
例子:comment--node-article.tpl.php

基模板:comment-wrapper.tpl.php
comment-wrapper--node-[type].tpl.php
例子:comment-wrapper--node-article.tpl.php

字段

基模板:field.tpl.php
field--[type|name[--content-type]|content-type].tpl.php
查找顺序:

nginx 下的drupal 无法正常显示头像解决办法。

今天在   wiki 上看了 一下  drupal 的 nginx 设置,http://wiki.nginx.org/Drupal    按照上面的设置,基本上没有问题,但是会出现一个小问题,就是  用户头像无法正常的显示,然后查了一下是rewrite规则没有写好,在nginx.conf 里    修改    添加下面的 代码

    location / { 
        if (!-e $request_filename) { 
            rewrite ^/(.*)$ /index.php?q=$1 last; 
        } 
    } 

 

最后当然要重启一下nginx,问题解决。

判断用户是否管理员角色。

user_access() 是可以检查用户是否管理员。而超级管理员默认是没角色的。所以超级管理员可以用下面的方式判断:

<?php
if(user_access('administer')) 
{....your code goes here....}
?>

然而,如果你想判断一个登陆了的用户,是否拥有某一角色,举例角色名叫 buyer

<?php
global $user;
if(is_array($user->roles) && in_array('buyer', $user->roles))

{... your code goes here ...}

?>

通过hook_form_alter()隐藏现有表单中的表单元素。

举个例子说明如何通过hook_form_alter()隐藏现有表单中的表单元素。我建议用Devel 模块判断元素的结构。安装Devel 后,你可以通过dpm($form)调试。

<?php
function mymodule_form_alter(&$form, $form_state, $form_id) {
  global $user;

  // "hide" a few fieldsets for non-admins
  // (the lead developer only wants UID 1 to see these fields; I suggest doing it by role though!)
  // Note that you can also check out the $form_id variable for a different way to which form this is
  if ($form['#id'] == 'node-form' && $user->uid != 1) {       
    $form['author']['#access'] = FALSE;
    $form['revision_information']['#access'] = FALSE;
  }
}
?>

Drupal 模块的 Hooks(钩子)。

Drupal 一个CMS(Content Management System),Drupal的模块系统实现了一个钩子系统,什么是钩子?我已经开始了解钩子是允许您在多个地方调用。让我们先来看看一个PHP函数的编写和应用:

function do_something($thing)
{
    //这里写一些代码实现一些功能
    //例如插入数据库资料
    //标记一个物体
    //唱一首歌。。。。         
    return $something
}
 
... 程序的其他地方  ...
do_something();

一旦我们编写函数和部署代码,我们不能轻易改变它。也就是说,它虽然很容易被编辑,但是其他程序员不敢乱改,因为他们不懂这个函数的工作原理。所以要很好的跟其他程序员沟通,就必须通过很详细的代码注释。即使你有一个团队并且拥有完善的沟通,也有问题因为修改函数而产生副作用。所以就有一个概念:永远不改现有代码,除非你已经完全了解代码所做的任何事情。

我们试图解决问题,当“一些事情”发生,我们想采取额外的动作,需求的变化,就需要新的功能加入,这对于一个开发人员来说,我们得要随时应付这些新功能的加入。那么,我们如何不改变核心代码,但又能实现这些功能呢?

 

钩子系统很好的解决了这个问题。当你想做些什么,不是直接调用一个函数,而是调用一个钩子。

//老方法,直接call do_something函数
//do_something();
 
//新方法,调用do_something的 hook
module_invoke_all('do_something');

当一个hook 被调用了,Drupal 会

  1. 获得所有安装并启用模块列表
  2. 问每一个模块:你有do_something 这个 hook吗?
  3. 如果有,那么Drupal在这些模块实现了钩子调用函数

然而如果作为一个核心的开发者,你可以达到 “你想要”的同时,还能让其他开发者通过钩子实现“他们想要”

举个例子?

这些都是抽象的概念,我们需要举个例子说明

页面

订阅 RSS - 博客