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

文章提交页面跳转和用户导入,2个问题想请教

赞成!
0
否决!

1.想请教一下如何修改文章提交后的跳转问题。默认是跳转到具体文章的node编号里面,及是阅读完整的文章。现在有个提交我想让它跳转到我用views 做好的文章列表里面。这个可以如何修改呢。

2.还有一问题,我这里有一个事件的页面安装有date模块也是安日期排序。有什么方法可以令他们过了今天的日期后自动从已发表变为没发表状态么。

3.就是如何把以前非drupal网站的用户名和密码等信息导入到新的drupal 网站里面来。总不能叫以前的用户又重新注册多一次吧。

我在网上看到有一个是从drupal 导到discuz 里面的:

说明:discuz7(ucenter)用户的加密算法: md5密码后,再加上一个随机6位数,再md5一次.如下sql:

SELECT md5(concat(md5('mypassword'),'extjs.')) AS pass
'mypassword’ 为用户密码,'extjs.’为随机的6位数(其实不一定要随机,只要6位就可以了).

完整的迁移用户名密码的sql如下:

INSERT INTO discuz7.cdb_uc_members  
    (  
    username,  
    password,  
    email,  
    myid,  
    myidkey,  
    regip,  
    regdate,  
    lastloginip,  
    lastlogintime,  
    salt,  
    secques 
    ) 
SELECT name,md5(concat(pass,'extjs.')) AS pass 
    ,mail,'','','hidden',created,0,0,'extjs.',''
FROM drupal.users WHERE name != 'fatjames' AND name!= 'extjs.org.cn'

所以想问一下可以用这个方法导入drupal么。drupal 的md5又是怎么加密的呢?

3 个回答

赞成!
0
否决!

1,有几种方法:

方法A:

写一个模块,加下面代码

 

1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
function mymodule_nodeapi(&$node, $op, $a3 = NULL, $a4 = NULL) {
  switch ($op) {
    case 'submit':
      if (!$node->nid && $node->type == 'mynodetype') {
        drupal_set_message(t('%nodetitle has been created.', array('%nodetitle' => $node->title)));
        node_save($node);
        drupal_goto('node/add/mynodetype');
       
      }
      break;
  }
}
?>

 

其中mymodule 改为你的模块名称。

 

方法 B:自己写一个模块,通过form api 重写提交表单,然后在form_submit(),自己写跳转页面的地址。这里比较长篇,所以直说方法,详细资料略。

 

2, 这个跟corn job 有关,linux为例,让你的服务器自动每天运行一次某一页,然后通过这页的数据,跟当前日期做比较,如果日期是今天的日期后,就自动运行某一动作。具体代码略。

 

3,这个问题是非常严峻的问题,drupal 的加密方式是多层。密码规则跟其他系统的肯定是不同的。而之前密码也不能很好的破解,所以如果是这样的话,可以通过做一个中间模块,这个中间模块是要来专门处理这个导入的用户,对这部分的特殊用户做一个标识,这个标识我们假使叫:用户加密类型,让这类用户能够通过密码加密再加密来登陆,举例

有三个用户,drupalla, 猪跑啦, zhupaoladrupalla是在dedecms 转过来的,猪跑啦 是discuz转过来的,而zhupaole 是默认drupal注册的用户,假使三个的密码都是123456。

再假使 dedecms 加密是16位md5加密, discuz 是32位md5加密。

那如果直接将drupalla, 猪跑啦,两个也转去drupal的话,一定是无法访问的,只有zhupaole 才能登陆。那这种情况,(drupalla, 猪跑啦) 两个用户就得特别对待,首先,drupalla是dedecms 转过来的,我们前面假设dedecms 是16位md5,“123456” 加密出来假使是“49ba59abbe56e057”, 我们就直接在drupal中新建用户名为:drupalla,密码为:49ba59abbe56e057,然后用户加密类型md5 16

而同样的,猪跑啦是discuz的用户,他在数据库中密码是32位md5:e10adc3949ba59abbe56e057f20f883e,所以我们同样的,在drupal中新建用户名为:猪跑啦,密码为:e10adc3949ba59abbe56e057f20f883e,然后用户加密类型 md5 32

 

好了,因为改了多一个规则,所以我们不能用默认的登陆表单登陆,我们得重写表单,并且在点击“登陆”按钮后,多做一个判断,就是判断这个用户的“用户加密类型”,如果这个不为空,就先用他的加密类型加密一次,再用drupal默认的加密方式再加密一次,然后再跟数据库的密码数据匹配,这样就能匹配上了。

 

如果要再做好点的,可以再做一个判断,让这部分人慢慢的转义过去drupal 正式的密码,方式是:假使 用户加密类型 不为空,意味着他是其他系统转过来的,在他们登陆后,我们可以对这部分的用户用信息还是什么的做点改密码提示,如:尊敬的客户您好,我们的密码规则已经更改为二代加密方式,二代加密将会更安全更可靠,为了您的账号安全,请赶紧升级为二代加密。然后给个改密码的方式给他们。让他们都改了,并且,每个改了的用户,再做一个标识,用来衡量还有多少用户没改的。当用户全部改了。那就可以将上面的规则去掉了。

 

是一个比较漫长的过程。不知道有没有更好的方法。仅供参考。

 

赞成!
0
否决!

waa, 诗人回复得甘及时,甘大段··多谢嗮,我慢慢品···

赞成!
0
否决!

这种情况,我觉得可以保留dz的登录功能,把原来的dz依然放在那里,用户在drupal登录的时候 跳转或远程访问dz验证,成功了又跳转到drupal上。

 

写一个模块,桥接dz和drupal用户,这个drupal自带了一些外部用户api,很简单的。