Drupal:允许值的PHP字段

时间:2009-12-21 22:43:38

标签: php drupal-6

我正在使用CCK在Drupal 6中工作。在每个文本字段下都有一个PHP部分,您可以在其中运行一些PHP代码来获取允许的值。我使用“if”语句根据用户类型

更改允许值时遇到了麻烦

首先,我做一个查询来确定当前用户的用户类型。 -1是默认用户,即员工和用户类型ID“1”,用于站点用户。我想要的是将网站用户限制为只需要看到的允许值,同时允许员工在节点编辑屏幕上编辑该值并进行所有选择。

if语句的第一部分有效。但是,“其他”部分不起作用。该字段是否设置为处理控制结构?

global $user;
$sql1 = "SELECT user_type_id FROM user_types_user WHERE uid = ".$user->uid." ";
$res1 = db_query($sql1);
if($res1 == '1'){
$sql = "SELECT account FROM users WHERE uid = ".$user->uid." ";
$res = db_query($sql);
while($row = db_fetch_array($res)){
$rows[] = $row['account'];
}
$rows = drupal_map_assoc($rows);
return $rows;
}
else {
$sql2 = "SELECT title FROM node WHERE type = 'accounts' ";
$res2 = db_query($sql2);
while($row2 = db_fetch_array($res2)){
$rows2[] = $row2['title'];
}
$rows2 = drupal_map_assoc($rows2);
return $rows2;
}

选择是节点中的type = accounts,但是,当创建用户时,会选择其中一个选项并将其存储在用户表中,在我创建的名为“account”的列下

2 个答案:

答案 0 :(得分:1)

如果“其他部分不起作用”意味着它永远不会被执行,即使user_type_id不等于1,它也可能是db_fetch_array()$res1丢失的'1'您将结果对象直接与字符串{{1}}进行比较,而不是字段值。

答案 1 :(得分:0)

这是这个的工作代码。可能有更快/更短的方法来做到这一点。

global $user;
$sql1 = "SELECT user_type_id FROM user_types_user WHERE uid = ".$user->uid." ";
$res1 = db_query($sql1);
while($type = db_fetch_array($res1)){
$types[] = $type['user_type_id'];
}
$resType = $types[0];
if($resType == "1"){
$sql = "SELECT account FROM users WHERE uid = ".$user->uid." ";
$res = db_query($sql);
while($row = db_fetch_array($res)){
$rows[] = $row['account'];
}
$rows = drupal_map_assoc($rows);
return $rows;
}
else {
$sql2 = "SELECT title FROM node WHERE type = 'accounts' ";
$res = db_query($sql2);
while($row2 = db_fetch_array($res)){
$rows2[] = $row2['title'];
}
return $rows2;
}