2010-10-23 7 views
0

J'ai ce code qui implémente hook_form_alter pour le formulaire de recherche durpal et y ajoute quelques nouveaux éléments. J'ai également ajouté le code de remplacement de thème dans mon template.php pour ledit formulaire. En plus de cela, je passe également des éléments de formulaire là-bas. Tout fonctionne bien - ajoute de nouveaux éléments, le thème est utilisé, mais, voici le problème. Lorsque j'essaie de rendre chaque élément de formulaire avec drupal_render, cela ne montre rien. J'ai vérifié le contenu du tableau $ form et il a toutes les données de formulaire nécessaires. Ceci est l'exception de mon code -drupal_render ne restitue pas l'élément de formulaire

mymod.module

function mymod_form_alter(&$form, $form_state, $form_id) { 
    switch ($form_id) { 
     case 'search_theme_form':   
      $form['prop_type'] = array(
       '#type' => 'select', 
       '#default_value' => 'Selection A', 
       '#options' => array("Selection A","Selection B"), 
       '#attributes' => array('class'=>'Bold'),  
     ); 
     break; 
    } 
} 

template.php -

function mytheme_theme() { 
    return array(
     'search_theme_form' => array(
      'arguments' => array('form' => NULL),  
      'template' => 'search_myblock_form',   
     ), 

    ); 

} 

Et il y a aussi un problème bizarre, qui est, le dsm de devel ne pouvait même pas montre ce qui est à l'intérieur de $ form. J'ai dû utiliser print_r pour obtenir la valeur de la chaîne en premier et l'alimenter en dsm pour l'affichage. Pour ce qui vaut la peine, une autre chose est, à l'intérieur de mon modèle de thème, il y a cette variable ($ search_form) avec tous mes éléments de formulaire rendus. Comme je veux traiter l'élément individuel de manière différente, je ne peux pas l'utiliser; J'aime rendre l'élément individuel par moi-même.

+0

'dsm()' suit les permissions. Les personnes n'ayant pas la permission d'accéder aux informations de Devel ne verront pas la sortie de dsm(). – berkes

+0

Je me connecte en tant qu'administrateur. Donc, l'accès n'est pas un problème. – Andrew

Répondre

0

hook_theme devrait être dans votre module, pas template.php.

Mais il semble que vous n'avez pas besoin de form_alter et du tout. template.php est là pour remplacer ces fonctions à thème puis:

function MYTHEMENAME_search_theme_form($form) { 
    return "<h1>ceci nes't pas un form</h1>"; 
} 

Ensuite, actualisez votre registre de thème et vous devriez voir votre h1 en ligne figurant sur la place de la forme.

+0

Je n'ai pas de problème avec hook_theme étant dans le template parce qu'il est utilisé et mon template reçoit également un tableau $ form. Mais, quand j'essaye de rendre chaque élément drupal_render, ça ne montre rien. J'ai vérifié et $ form contient tous les éléments dont j'avais besoin. Pour le moment, je n'ai pas d'autre choix que d'utiliser $ search qui contient des éléments rendus inclus dans des balises créées par le module de recherche lui-même. – Andrew

+0

Non. Vous avez un problème avec hook_theme dans template.php, parce que votre solution ne fonctionne pas. Selon votre question :) – berkes

Questions connexes