2010-08-09 4 views
0

J'ai créé différentes formes de noeuds pour différents types de contenu, en utilisant cette fonction dans mon modèle:Drupal - Faire une fonction de validation pour la forme CCK

function mytheme_theme($existing, $type, $theme, $path) { 
    return array(
    'type1_form' => array(
     'arguments' => array('form' => NULL), 
     'template' => 'type1_form' 
    ), 
    'type2_form' => array(
     'arguments' => array('form' => NULL), 
     'template' => 'type2_form' 
    ), 
); 
} 

Maintenant, je voudrais faire une fonction de validation pour une des formes. J'ai essayé d'utiliser cette fonction dans template.php:

function mytheme_form_alter(&$form, $form_state, $form_id) { 
    if($form_id == 'type1_form') { 
    $form['#validate'][] = 'my_sample_validate_func'; 
    } 
} 

function my_sample_validate_func($form, &$form_state) { 
    dsm($form_state); 
} 

Mais apparemment le hook_form_alter est avaliable pas à la couche de thème. Dois-je créer un nouveau module pour accomplir cela?

Répondre

0

hook_form_alter doit aller dans un modul, pas un fichier template.php. Pour la plupart de mes projets Drupal, je finis par créer un module de collage juste pour contenir des choses comme les fonctions form_alter.

Cette Lullabot article montre comment modifier des formes avec hook_form_alter et dans le calque de thème, mais à mon avis il est plus facile de le faire dans un module séparé.

+0

Eh bien, la solution la plus simple est souvent la meilleure. Je vais faire un module de colle pour cela, j'espère que j'aurai d'autres utilisations pour ça aussi. – Toxid

+0

Oh, vous le ferez certainement. Avoir un module de colle ouvre plus de personnalisation que vous ne pouvez l'imaginer avec Drupal! –

0

Oui, vous pouvez. Mais plus simple de créer type1_form.tpl.php, type2_form.tpl.php, examinez $ form via print_r ou le module devel.
Vous pouvez également utiliser le préprocesseur de ces thèmes.

Questions connexes