2010-01-30 8 views
0

Aidez-moi à comprendre pourquoi pas ma forme se style un La sites/all/modules/pecapture/thèmes/pecapture-displayform.tpl.phpDrupal Module - formulaire dans le bloc non modèle application

Voilà mon code:

/** 
* Implementation of hook_theme() 
*/ 
function pecapture_theme() { 
    $path = drupal_get_path('module', 'pecapture') . '/theme'; 
    return array(
    'pecapture_displayform' => array(
     'arguments' => array('form' => NULL), 
     'template' => 'pecapture-displayform', 
     'path' => $path, 
    ), 
); 
} 

en gros, cela dit que les fichiers thématiques sont dans le module/dossier thème ($ path)

Il y a une fonction de thème pecapture_displayform ($ form = NULL), appelé en utilisant le thème ('pecapture_displayform ', $ form) où $ form est un tableau de forme Drupal

Il y a un fichier modèle pecapture_displayform.tpl.php à $ path

function pecapture_block($op = 'list', $delta = 0, $edit = array()) { 
    $block = array(); 
    if ($op == "list") { // Generate listing of blocks from this module, for the admin/block page 
    $block[0]["info"] = t('Persistent E-mail Capture Form Block'); 
    } 
    else /* if ($op == 'view') */ { // Generate our block content 
    $block['subject'] = ''; //'Persistent E-mail Capture Form'; 
    $block['content'] = pecapture_displayForm(); 
    } 
    return $block; 
} // function pecapture_block 

Cela dit que lorsque vous regardez le bloc, utilisez pour générer le contenu de la fonction pecapture_displayForm(). $ block obtient php print() ed

/** 
* Callback for pecapture_theme 
*/ 
function pecapture_displayform() { 
    return drupal_get_form('pecapture_blockform'); 
} 

Ce dit retourne le tableau de formulaire drupal au format html (pour la sortie)

function pecapture_blockform(&$form_state) { 
    /* the form, standard ... */ 

Ceci est le contenu du formulaire, il est typique.

J'ai essayé d'appeler la fonction de thème explicitement dans pecapture_displayform:
return theme('pecapture_displayform', $form);
et
return theme('pecapture_displayform', drupal_get_form($form));

Alors pourquoi la forme ne passe pas par pecapture-displayform.tpl.php?

+0

Avez-vous vidé le cache? ou la reconstruction du registre de thème? – Nikit

Répondre

1

Il existe deux méthodes de base pour créer des thèmes à partir d'un module: l'utilisation d'une fonction de thème ou l'utilisation d'un modèle. Dans les deux cas, vous devez enregistrer les thèmes dans la fonction hook_theme de votre module (pecapture_theme). Cette partie de votre exemple semble correcte.

Si vous enregistrez une fonction de thème, vous créez ensuite la fonction de thème et l'appelez theme_themename. Si vous enregistrez un modèle (comme vous l'avez fait), vous utilisez une fonction optionnelle template_preprocess et un modèle. Les fonctions de template_preprocess sont appelées template_preprocess_themename et sont transmises, par référence, un tableau de variables à transmettre ensuite au template. En outre, vous ne devez jamais appeler directement une fonction de thème. Utilise toujours theme('themename', $args) pour accéder à un thème afin que drupal puisse le gérer correctement (permet de passer outre et de corriger le prétraitement des variables). Tout d'abord, il semble que vous essayez d'appeler directement une fonction thématique que Drupal ne reconnaît pas comme fonction de thème. Deuxièmement, vous utilisez un modèle, vous avez donc besoin d'une fonction appelée template_preprocess_pecapture_displayform(&$vars) si vous souhaitez traiter le formulaire avant de l'envoyer au modèle. Assurez-vous également que votre template s'appelle pecapture-display.tpl.php afin qu'il corresponde exactement au nom que vous avez fourni dans hook_theme à l'exception de l'extension.

En outre, il semble que vous essayez de thématiser un formulaire. Donc, vous devrez indiquer drupal_get_form pour utiliser votre thème en incluant $form['#theme'] = 'pecapture_displayform' dans votre fonction de formulaire.Vous pouvez générer des éléments de formulaire individuels dans votre thème en appelant drupal_render($form['element']), en appelant drupal_render($form) pour restituer les éléments non rendus restants (drupal conserve la trace pour qu'ils ne soient pas rendus deux fois).

Pour plus d'informations sur les formules à thème, reportez-vous à http://api.drupal.org/api/drupal/developer--topics--forms_api.html/6.

Tant que vous avez spécifié le thème dans votre fonction de formulaire, vous ne devez appeler explicitement, de sorte que vous devriez être en mesure de le faire

$block['content'] = drupal_get_form('pecapture_blockform'); 

dans votre crochet de bloc.

+0

Cela ressemble à ce que je veux ... Je vais essayer le lundi. – davidosomething

+0

$ form ['# theme'] = 'pecapture_displayform'; $ block ['content'] = drupal_get_form ('pecapture_blockform'); a parfaitement fonctionné. Je vous remercie! – davidosomething

Questions connexes