开发者

Drupal hook_form_alter for Taxonomy admin

I created a module to do all my form altering called "form_mods". It's working for most situations but not for the Taxonomy page.

I'm targeting the form id of "taxonomy_overview_vocabularies". I'm trying to hide the link "edit vocabulary" for roles of "webmaster" and "dj".

My code is unsetting the $form array correctly, but Drupal is still displaying the "edit vocabulary" link.

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_arra开发者_Python百科y($value, $hideArray)){
                $hide++;
            }
        }

        if($hide){
            foreach($form AS $vocab){
                //print_r($vocab);
                if(isset($vocab['edit']['#value'])){
                    unset($vocab['edit']['#value']);
                }
            }
        }
    }
}


Very small PHP mistake, when you want to change array members in a for each statement you have to pass them by reference & foreach($form AS &$vocab) otherwise the $vocab would be just a copy of the array

foreach($form AS &$vocab){
        //print_r($vocab);
        if(isset($vocab['edit']['#value'])){
            unset($vocab['edit']['#value']);
        }

    }


In addition to Amjad's answer, if you don't like using references, I would suggest another alternative:

foreach ($form as $key => $vocab) {
    unset($form[$key]['edit']['#value']);
}

This way you avoid using references, and potential issues they may lead to.

Also note I removed the if statement, which is not useful (PHP can figure it out).

An array_map could also be considered.

0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜