2010-07-26 8 views
2

J'essaie d'obtenir le formulaire twitter_admin_form et twitter_user_settings dans un div.Drupal drupal_get_form

/** 
* Get twitter form for user 
* @param $account 
* @type user object 
*/ 
function getTwitterForm($account){ 
    //module_load_include('inc', 'twitter'); 
    module_load_all(); 
    $twitter_form = drupal_get_form('twitter_admin_form'); 
    return $twitter_form; 
} 

Je reçois une erreur drupal.

avertissement: call_user_func_array() [function.call-utilisateur-func-tableau]: Le premier argument devrait être un rappel valide, 'twitter_admin_form' a été donné en .../includes/form.inc en ligne 372.

twitter.module

/** 
* Implementation of hook_meu() 
*/ 
function twitter_menu() { 
    $items = array(); 

    $items['admin/settings/twitter'] = array(
    'title' => 'Twitter setup', 
    'description' => 'Twitter module settings', 
    'page callback' => 'drupal_get_form', 
    'page arguments' => array('twitter_admin_form'), 
    'access arguments' => array('administer site configuration'), 
    'file' => 'twitter.pages.inc' 
); 

    $items['user/%user_category/edit/twitter'] = array(
    'title' => 'Twitter accounts', 
    'page callback' => 'twitter_user_settings', 
    'page arguments' => array(1), 
    'access arguments' => array('add twitter accounts'), 
    'load arguments' => array('%map', '%index'), 
    'weight' => 10, 
    'file' => 'twitter.pages.inc', 
    'type' => MENU_LOCAL_TASK, 
); 

    return $items; 
} 

Je ne suis pas sûr de ce que je fais mal. Le twitter_admin_form n'a pas d'arguments donc je pensais que ce serait simple à obtenir et à afficher.

Je suis de nouvelles formes/menu pour que je ne suis pas 100% sûr de ce que% user_category,% carte et% de l'indice sont et comment les passer dans.

Comment savez-vous ce que les formes valides sont?

Répondre

3

Lorsque vous appelez drupal_get_form, vous fournissez un ID de formulaire, qui est la fonction que Drupal doit appeler. Le problème que vous rencontrez est que Drupal ne peut pas trouver la fonction: twitter_admin_form.

Soit il est situé dans un fichier include, et vous devez l'inclure, ou vous l'avez nommé quelque chose d'autre.

+0

Merci pour la réponse rapide :) C'est dans twitter.pages.inc, j'ai essayé module_load_include ('inc', 'twitter') et module_load_all(). –

+1

Oups - n'a pas remarqué cette réponse tout en affichant le mien. Laissant le mien pour l'explication alternative/étendue, mais ceci est correct et a été le premier (+1) –

+1

@ James Bayliss: Vérifiez ma réponse similaire pour l'utilisation correcte de 'module_load_include()'. –

2

L'erreur que vous obtenez provient de la ligne:

$twitter_form = drupal_get_form('twitter_admin_form'); 

Il attend d'être une fonction de rappel valide « twitter_admin_form », mais ne peut pas le trouver. C'est probablement parce que le fichier "twitter.pages.inc" n'est pas inclus au moment de votre appel.

Vous pouvez corriger cela via un:

module_load_include('inc', 'twitter', 'twitter.pages'); 

(Compte tenu de la ligne commentée dans votre exemple de code, vous semblez avoir essayé quelque chose comme ça, mais il a oublié de donner le nom du fichier à inclure).

+0

WOW, cela a fonctionné, je peux inclure le twitter_admin_form. Merci pour cela :) Je suis vraiment reconnaissant pour cela. –

+0

Merci, j'ai aussi utilisé ceci sur un module de base. Je ne voulais pas l'utiliser dans un 'bloc' alors j'ai simplement utilisé l'implémentation HO (pour tester les choses au début) directement sur le fichier page.tpl.php et cela a fonctionné parfaitement. (fwiw, je l'ai utilisé sur le tracker.module dans drupal 6 modules). Thx - HO! –