Message d'avertissement

The subscription service is currently unavailable. Please try again later.

Désactiver champ de formulaire #disabled

Information importante

En raison d'un grand nombre d'inscriptions de spammers sur notre site, polluant sans relache notre forum, nous suspendons la création de compte via le formulaire de "sign up".

Il est néanmoins toujours possible de devenir adhérent•e en faisant la demande sur cette page, rubrique "Inscription" : https://www.drupal.fr/contact


De plus, le forum est désormais "interdit en écriture". Il n'est plus autorisé d'y écrire un sujet/billet/commentaire.

Pour contacter la communauté, merci de rejoindre le slack "drupalfrance".

Si vous voulez contacter le bureau de l'association, utilisez le formulaire disponible ici, ou envoyez-nous un DM sur twitter.

Bonjour,

Après plusieurs essais, je n'arrive toujours pas à désactiver un des mes champs alors que j'arrive à affecter une valeur par défaut.

Après avoir fait un print_r($form) je vois bien la propriété disabled, mais rien ne se passe.

[field_img_projet] => Array
        (
            [#type] => nodereference_select
            [#default_value] => Array
                (
                    [0] => Array
                        (
                            [nid] => 68
                        )

                )

            [#required] => 1
            [#columns] => Array
                (
                    [0] => nid
                )

            [#title] => Référence projet
            [#description] =>
            [#delta] => 0
            [#field_name] => field_img_projet
            [#type_name] => image
            [#tree] => 1
            [#weight] => 33
            [#access] => 1
            [#count] => 9
            [#disabled] => disabled
        )

Une question subsiste doit on mettre ?
['#disabled'] = 'disabled';
ou
['#disabled'] = TRUE;

Voici le code qui me permet d'altérer mon form

<?php
function init_img_form_alter(&$form, $form_state, $form_id) {
 
   if(
$form_id="image_node_form"){
     
$nid=$_GET['nid'];
      
$form['field_img_projet']['#default_value']['0']['nid']=$nid;
     
      
//desactiver
      
$form['field_img_projet']['#disabled'] = 'disabled';
    
        print
"<pre>";
        
print_r($form);
        print
"</pre>";
   }
}
?>
Forum : 
Version de Drupal : 

J'ai regardé un peu au nivau des modules du core
Effectivement au niveau de la déclaration du champ tu mets
'#disabled' => TRUE,
Mais quand tu altères ton formulaire, essaie qqch basé sur ce modèle:
$form['submission']['title_label']['#attributes'] = array('disabled' => 'disabled');

merci pour cette réponse ça paraît tenir debout, mais ça ne fonctionne pas bien que quand je fasse un print_r je le vois bien...

J'ai essayé de remplacé par d'autres attributs comme 'class' mais rien n'apparaît dans le code html...

[field_img_projet] => Array
        (
            [#type] => nodereference_select
            [#default_value] => Array
                (
                    [0] => Array
                        (
                            [nid] => 1
                        )

                )

            [#required] => 1
            [#columns] => Array
                (
                    [0] => nid
                )

            [#title] => Référence projet
            [#description] =>
            [#delta] => 0
            [#field_name] => field_img_projet
            [#type_name] => image
            [#tree] => 1
            [#weight] => 33
            [#access] => 1
            [#count] => 9
            [#attributes] => Array
                (
                    [disabled] => disabled
                )

        )

en fait il s'agit d'un champ obligatoire que je renseigne par défaut.

J'ai un type de contenu projet et un autre image.
Le type de contenu image contient un node-reference à un projet.

Via mon système d'administration je liste les projets. Et pour chacun j'ai un lien "images liées au projet" qui me liste les images associées à un projet. Lorsque l'administrateur souhaite en rajouter une, par défaut le node-reference prend la valeur du projet.
Je souhaite donc griser le champ pour que l'administrateur ne puisse sélectionner un autre projet.

Si je fais un unset, je le supprime et comme il est obligatoire, je risque d'avoir un message d'erreur.

Ce qui est curieux c'est que j'arrive bien à mettre la valeur par défaut donc le nom de mon champ est bon...

Je suis pas sur que le unset te marque une erreur car si le champs est obligatoire mais que l'utilisateur n'y a pas acces (unset ou CCK field permission) alors ca ne devrait pas renvoyer d'erreur. Mais vu que tu n'auras pas de valeurs c'est pas top.

Ce que je fais dans le cas ou je prerempli un champs, je le cache juste en CSS (display:none) et c'est tout ;).

Et oui un coup de firebug et tu reactives ton champs mais avec disabled c'est pareil donc de toute facon c'est pas 100% safe...

Et voila le pourquoi du parce que How to set the disabled attribute of a CCK field
Setting the #disabled attribute of the element in form_alter doesn't work because the FAPI process handler of the CCK field won't transfer the #disabled attribute to its children elements.