2009-12-21 54 views
0

我正在与CCK一起工作在Drupal 6中。在每个文本字段下都有一个PHP部分,您可以在其中运行一些PHP代码以获取允许的值。我遇到了麻烦,使用“if”语句来更改基于用户类型的允许值Drupal:允许值的PHP字段

因此,首先,我执行查询以确定当前用户的用户类型。 -1是缺省用户,即员工和用户类型标识“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; 
} 

这些选择是在节点类型=帐户,然而,当创建用户的选择中的一个被选择并存储在用户表中,下一个列我创建的名为“帐户”

回答

1

如果你的意思是它永远不会被执行,即使user_type_id不等于1,它可能是上缺少的db_fetch_array()。你将结果对象直接与字符串'1'比较,而不是字段值

+0

你是男人!就我所说的那样,问题是我的数组结果是一个整数,但我试图将它与一个字符串进行比较?所以,即使他们认为他们是一样的,他们是不平等的? – tpow 2009-12-21 23:59:40

+0

我并不确定会发生什么,但是当类型不匹配时,PHP会列出一些比较奇怪的比较规则(请参阅http://www.php.net/manual/en/language.operators.comparison.php上的文档)。 Drupal的'db_query'似乎返回一个资源,它被转换成一个数字(可能是1)。如果添加'db_fetch_array'帮助,很好:-)我不止一次地在比较问题上绊倒... – Simon 2009-12-22 07:49:29

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; 
}