Message d'avertissement

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

Afficher $form dans drupal 7

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,

J'adapte actuellement un de mes modules perso sous drupal 7.

Dans ce module je récupère certaines données, via des requetes vers ma bdd, je les traite et je les affiche.

Seul problème, je n'arrive pas à afficher les données une fois traitées.

Par exemple, voici un bout de code que j'utilise:

<?php
 
function monmodule_page(){
//....
//...

$output = drupal_get_form('momodule_form');
return
$output;
}

function
monmodule_form(){
//....
//....

$form[$i]=array(
 
'#type'=>'item',
 
'#value'=>$mynode->title,
);

$form[$i]['Etat']=array(
 
'#type'=>'item',
 
'#value'=>$mynode->field_etat,
);


return
$form;


}
?>

Lorsque j'écris ce code je n'ai rine qui s'affiche sur ma page (j'obtiens une page de mosite avec entete, pied de page, etc... , mais pas le contenu de $form).

Par contre si je fais dsm($form) ou dsm($output) je vois que mes deux variables contiennent bien les données que je les ai passé.

D'ou ma question comment faire pour réaliser l'affichage de $form sous drupal 7 ( avec les mêmes fonctions sous drupal , j'arrivai à afficher mes données)??

Si qqn peut m'orienter, je le remercie d'avance.

Forum : 
Version de Drupal : 

Je ne sais pas si tu as fait un copier coller de ton code mais ici il y a une ereur de frappe:

$output = drupal_get_form('momodule_form');

Qui devrait être :

$output = drupal_get_form('monmodule_form');

Cordialement, Aya

Edit: Ou sinon avec un drupal_render() peut être.

Merci,
Mais çà ne marche toujours pas

J'ai aucun message d'erreur mais juste une page de mon site vierge (j'ai bien les pieds de pages, l'entete, les onglets, etc...)
Toujours pas de contenu de $form affiché.

Pour info à chaque que j'appelle mon module, je me retrouve sur ma page "Accueil" avec un contenu vide (au milieu de la page).
En faisant un print_r($output) (ou un dsm($output)) j'ai pu verifier que ma variable etait bien complétée comme je le souhaitais.

Je ne sais pas pourquoi il ne veut pas s'afficher.

Je suis dans le regret de te dire que chez moi cela marche bien ^^.

function mon_module_menu() {

    $items['test'] = array(
        'page callback' => 'test',
        'access arguments' => array('Enregistrement REACH'),
        'title'=> 'test',
        'type' => MENU_NORMAL_ITEM,
    );

    return $items;
}

function test(){
    $output = drupal_get_form('mon_form_test');
    return $output;
}

function mon_form_test(){
    $form['test'] =  array('#type'=>'textfield', '#title'=> 'aaaaaa');
    return $form;
}

Je ne travaille pas beaucoup avec Drupal 7 donc pas un expert mais il a l'air d'être assez fâché avec le cache. Donc essai de faire un clear all cache peut être que sa passera mieu.
Voila jespère que ça pourra t'aider.
Cordialement, Aya

Et moi j'ai le plaisir de t'informer... que oui ton code marche tres tres bien.
J'ai fais un copier/coller et j'ai bien l'affichage des resultats de ton code.

Je ne pense pas que c'est du à un problème de cache(enfin pas à première vue).

Mais apparemment c'est plus lié à l'utilisation du '#type'=>'item'

En remplaçant le type de champs par item et en passant une valeur à cet item ('#value'=>'toto'), je retombe exactement sur mon problème de départ.

Apparemment drupal7 n'arrive pas à gérer l'affichage de ce type de champs (sous drupal 6 çà marchait bien).
Il faut donc que je cherche l'équivalent d'un champs "item" sous drupal 7.

Qqn a une idée??
Tout ce que je veux en fait c'est créer des champs qui sont ensuite remplis par un bout de code et non des textfield ou autre champs qui demande l'interaction avec l'utilisateur.

Je vous remercie d'avance.

Ton problème se précise...
Effectivement le type item na plus d'attribut value en drupal 7 ( WTF !!! )
Je te conseille donc d'aller voir du coté de la doc. It's Here
De nouveaux types apparaissent tel que le type value ... (WTF AGAIN)(EDIT : autant pour moi sa existait déjà).
Affaire a suivre.
Dsl de pas pouvoir répondre mais je suis plus devant mon poste donc dans l'incapacité de tester.
Cordialement, Aya

Salut,

Merci pour ton aide.

J'ai testé le type 'value' en mettant:

<?php
$form
['toto'] = array('#type'=>'value', '#value'=>'ma_valeur');
?>

Et çà ne marche pas!! Toujours pas d'affichage de mon $form
Tres bizarre tout çà.

Par contre en utilisant le type 'item'

<?php
$form
['toto'] = array('#type'=>'item','title'=>'mon_titre', '#markup'=>'ma_valeur');
?>

Là j'ai bien mon $form qui s'affiche.

Mais probleme quand je crée un $form qui contient plusieurs array() encastrés,
Là par contre l'affichage des array() de 2eme niveau ne se fait pas.
Par exemple:

<?php
$form
['toto'] = array('#type'=>'item','title'=>'mon_titre', '#markup'=>'ma_valeur');

$form['toto']['etat'] = array('#type'=>'item','#markup'=>'mon_etat');

$form['toto']['Date'] = array('#type'=>'item','#markup'=>'ma_date');
?>

J'obtiens uniquement l'affichage du premier array et les autres ne sont pas affichés.
Pourtant ils sont bien présents dans le $form (affichage via dsm($form)

je m'y perd grave là, çà à l'air tout simple pourtant.

Si qqn a une idée pour récuperer des données simplement, les stocker et les afficher, faites moi signe.

Là ce que je vois c'est que tes élements de 2e niveau n'ont pas d'attribut #title. Si tu regardes sur http://api.drupal.org/api/drupal/developer--topics--forms_api_reference.... tu peux voir que l'attribut #title est en gras, donc obligatoire pour les items.

Tu peux afficher le contenu soit en leur donnant un #title, soit en remplaçant "'#type' => 'item'" par "'#type' => 'markup'" (ou rien du tout, markup étant le choix par défaut). Le type markup n'a pas besoin d'un titre, lui.

Salut,

Merci pour ton aide, mais en fait j'avais déja testé ce que tu me dis.
Et helas sans grand succes non plus.

Apres plusieurs tests, je viens à la conclusion suivante: il faut en fait creer à chaque fois un nouvel array() vide si l'on souhaite obtenir plusieurs niveaux.

Exemple de code qui marche (en tout cas sur mon pc):

<?php
$form
['toto'] = array();// Je cree un premier array()
$form['toto']['genre'] = array('#type'=>'item','#markup'=>'genre_toto');
$form['toto']['date'] = array('#type'=>'item','#markup'=>'date_toto');

// Maintenant si je veux creer les amis de toto, je suis obligé de creer un nouveau array() vide:

$form['toto']['amis'] = array();
$form['toto']['amis']['nom'] = array('#type'=>'item','#markup'=>'nom_toto');
$form['toto']['amis']['prenom']= array('#type'=>'item','#markup'=>'prenom_toto');

//Si j'ecris la ligne suivante elle ne sera pas affichée mais sera bien présente dans dsm($form)
//(Ce genre de code pourtant marchait bien dans drupal 6)

$form['toto']['amis']['nom']['adresse']= array('#type'=>'item','#markup'=>'adresse');


return
$form;
?>

Aprés m'etre fait quelques noeuds au cerveau j'arrive enfin à afficher ce que je souhaite.

Je pense qu'il doit peut être exister plus simple.

Pour info: le type 'item' avec ou sans l'attribut '#title' marche tres bien.
Meme si cet attribut est absent, il n'y a pas d'erreur qui est remonté et le contenu '#markup' est bien affiché(en tout cas chez moi et dans mon code.

Bonjour. Merci de nous faire partager vos expériences. Comment peut-on faire pour afficher les résultats sur la même ligne. Doit-on passer par l'appel d'un thème personnalisé ?
Comment peut on afficher une liste de données (plusieurs items sur la même ligne) issue d'une table. Merci