首页 / 帖子
如果在用户点击某个链接时触发一个动作?

我的想法是这样,系统内有A、B两个内容类型,而A内容类型只允许每个用户创建一个,且必须先创建了A后才能创建B。

所以我想,能否在用户点击“add content”这个链接时,就判断其是否已经创建了A内容类型,如果还没创建了,就直接跳转到创建A的页面;如果已经创建则直接跳转到创建B的页面。

2个答案
赵高欣
发布于:2014-11-05 10:09

实现方法有很多:

1. 用rules + 自定义php代码实现

2. 自己写模块通过hook实现

3. 使用flag + rules实现

具体可以参考这篇文章,涵盖了上述几种方案的具体实现

==============================================

另外附上方案1的例子:

建立如下图的rules规则,当用户创建article时,会检查其是否有page的node,没有则跳转到page的添加页面,并显示提示信息。

其中php代码如下(需要启用php filter模块):

$path = current_path();
if($path == 'node/add/article') {
  global $user;
  $sql = "SELECT COUNT(nid) FROM node JOIN users ON node.uid = users.uid WHERE node.status = :status AND users.uid = :uid AND node.type = :type";
  $result = db_query($sql, array(
  ":status"=> 1, 
  ":uid" => $user->uid, 
  ":type" => 'page'))
  ->fetchField();
  return ($result > 0) ? FALSE : TRUE;
}



刘伯彪
发布于:2014-11-05 10:22

@流浪者的回答已经很完善了,我的简单实现就是写几行代码放到hook_init里面。

if($path == 'node/add/content-type-B') {
 //检查用户是否满足条件
 if (不满足) {
   drupal_goto('node/add/content-type-A');
 } 
}