注册 登录  
 加关注
   显示下一条  |  关闭
温馨提示!由于新浪微博认证机制调整,您的新浪微博帐号绑定已过期,请重新绑定!立即重新绑定新浪微博》  |  关闭

John's Blog

天空,有梦就可以飞翔!

 
 
 

日志

 
 
关于我

刚走出校园的毕业生,就读计算机网络专业,对网站建设有一定的基础。开始探求Drupal已有一段时间,对Drupal的发展很是看好。现就职于深圳慧衡科技有限公司(intematrix.cn),它是一家专门服务于中国及海外中小企业的网络营销分析和优化服务提供商。 QQ交流群:44581272

网易考拉推荐

Drupal:覆写用户登录区块user_block,drupal theme template.php 里设置  

2009-10-08 12:01:15|  分类: drupal学习 |  标签: |举报 |字号 订阅

  下载LOFTER 我的照片书  |

默认主题,在后台区块里面可以看到一个用户登录的区块,但是有时想改掉它的表现形式,按照自己的设计来设计。
这时就需要修改user_block。这个用户登录的block,注意这是区块和user 登录注册那个不一样。这个用户登录区块是在user模块里面定义的。可以先看看代码: 文件位于 user.module
分析源文件:

DE<<?php
function user_login_block() {//定义与个登录区块form 函数 返回一个表单数组
 
$form = array(// 定义一个表单form属性
   
'#action' => url($_GET['q'], array('query' => drupal_get_destination())),
   
'#id' => 'user-login-form',
   
'#validate' => user_login_default_validators(),//用到 user_login_default_validators验证函数
   
'#submit' => array('user_login_submit'),
  );
 
$form['name'] = array('#type' => 'textfield', //定义用户名表单
   
'#title' => t('Username'),
   
'#maxlength' => USERNAME_MAX_LENGTH,
   
'#size' => 15,
   
'#required' => TRUE,
  );
 
$form['pass'] = array('#type' => 'password',//定义密码表单
   
'#title' => t('Password'),
   
'#maxlength' => 60,
   
'#size' => 15,
   
'#required' => TRUE,
  );
 
$form['submit'] = array('#type' => 'submit',
   
'#value' => t('Log in'),
  );
 
$items = array();//返回items 数组 主要是两个衔接
 
if (variable_get('user_register', 1)) {
   
$items[] = l(t('Create new account'), 'user/register', array('attributes' => array('title' => t('Create a new user account.'))));// 创建新帐号衔接
 
}
 
$items[] = l(t('Request new password'), 'user/password', array('attributes' => array('title' => t('Request new password via e-mail.'))));//创建找回密码衔接
 
$form['links'] = array('#value' => theme('item_list', $items));
  return
$form;
}
?>
DE<

定义一个user 登录区块

DE<<?php
function user_block($op = 'list', $delta = 0, $edit = array()) {
  global
$user;
//省略
 
if ($op == 'list') {
   
$blocks[0]['info'] = t('User login');//定义一个登录区块
    // Not worth caching.
   
$blocks[0]['cache'] = BLOCK_NO_CACHE;

    return
$blocks;
  }
//省略
 
else if ($op == 'view') {
   
$block = array();

    switch (
$delta) {
      case
0:// 用户登录区块显示
        // For usability's sake, avoid showing two login forms on one page.
       
if (!$user->uid && !(arg(0) == 'user' && !is_numeric(arg(1)))) {//判断是否登录,而且是否是注册页面,第一个参数不是user 并且 第二个参数不是数字

         
$block['subject'] = t('User login');
         
$block['content'] = drupal_get_form('user_login_block');// 区块内容就是返回一个form,调用上面的form 数组,drupal_get_form 这个函数强大,很好用。
       
}
        return
$block;

?>
DE<

理解上面的源文件,开始做覆写的工作,主要参考以下代码:

下面就考虑如何在drupal theme template.php里面覆写这个区块了。

第一步:建立template.php文件

在所启用的主题下面新建立一个template.php 的文件夹,然后把下面的代码拷贝进去,把yourthemename 改为自己所用的主题名称。

DE<<?php
//拷贝下面代码 ,<code>不要拷贝&quot;?&gt;&quot;</code>
function yourthemename_theme() {
  return array(
   
'user_login_block' => array(
     
'template' => 'user_login',
     
'arguments' => array('form' => NULL),
    ),
  );
}
function
yourthemename_preprocess_user_login_block(&$variables) {
//去掉两个衔接。
$variables['form']['name']['#title']='请填写你的大名';
$variables['form']['pass']['#title']='请出示的暗号';
$variables['form']['submit']['#value']='快快登录';
$variables['form']['links']['#value']='';
 
$variables['rendered'] = drupal_render($variables['form']); //这个变量去掉,可以采用下面第二种输出的方式、
}

//拷贝到这里,后面问号就不要拷贝了
?>
DE<

第二步:建立user_login.tpl.php文件
然后新建立一个user_login.tpl.php 文件,放在主题里面。

把下面代码拷贝进去即可:

DE<<?php

print $rendered;
 
?>
DE<

还有一种方式也可可以直接在 user_login.tpl.php里面
DE<<?php

 
print  drupal_render($variables['form']['name']);
// 等等。。。。。。
?>
DE<

效果如下图:

Drupal:覆写用户登录区块user_block,drupal theme template.php 里设置 - Drupal 探求者 - Johns Blog

来自:http://hellodrupal.info/node/79

  评论这张
 
阅读(1051)| 评论(0)
推荐 转载

历史上的今天

评论

<#--最新日志,群博日志--> <#--推荐日志--> <#--引用记录--> <#--博主推荐--> <#--随机阅读--> <#--首页推荐--> <#--历史上的今天--> <#--被推荐日志--> <#--上一篇,下一篇--> <#-- 热度 --> <#-- 网易新闻广告 --> <#--右边模块结构--> <#--评论模块结构--> <#--引用模块结构--> <#--博主发起的投票-->
 
 
 
 
 
 
 
 
 
 
 
 
 
 

页脚

网易公司版权所有 ©1997-2016