我创建了一个模块来完成我所有的表单更改,称为“form_mods”。它适用于大多数情况,但不适用于Taxonomy页面。
我的目标是“taxonomy_overview_vocabularyies”的表单ID。我正试图隐藏“网站管理员”和“dj”角色的“编辑词汇”链接。
我的代码正确地取消了$ form数组,但是Drupal仍然显示“编辑词汇表”链接。
function form_mods_form_alter($form, $form_state, $form_id) {
if($form_id == 'taxonomy_overview_vocabularies'){
global $user;
$hide=0;
$hideArray = array('webmaster', 'dj');
foreach($user->roles AS $key => $value){
if(in_array($value, $hideArray)){
$hide++;
}
}
if($hide){
foreach($form AS $vocab){
//print_r($vocab);
if(isset($vocab['edit']['#value'])){
unset($vocab['edit']['#value']);
}
}
}
}
}
答案 0 :(得分:0)
非常小的PHP错误,
当您想要为每个语句更改数组成员时,您必须通过引用& foreach($form AS &$vocab)
传递它们,否则$ vocab将只是数组的副本
foreach($form AS &$vocab){
//print_r($vocab);
if(isset($vocab['edit']['#value'])){
unset($vocab['edit']['#value']);
}
}
答案 1 :(得分:0)
除了Amjad的回答,如果你不喜欢使用引用,我会建议另一种选择:
foreach ($form as $key => $vocab) {
unset($form[$key]['edit']['#value']);
}
这样您就可以避免使用引用,以及它们可能导致的潜在问题。
另请注意,我删除了if
语句,这是没用的(PHP可以解决这个问题)。
也可以考虑array_map
。