【问题标题】:Drupal drupal_get_formDrupal drupal_get_form
【发布时间】:2010-07-26 09:26:17
【问题描述】:

我试图在 div 中获取 twitter_admin_form 和 twitter_user_settings 表单。

/**
 * 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;
}

我得到一个 drupal 错误。

警告:call_user_func_array() [function.call-user-func-array]:第一个参数应该是一个有效的回调,'twitter_admin_form' 在 .../includes/form.inc 第 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;
}

我不确定我做错了什么。 twitter_admin_form 没有任何参数,因此我认为获取和显示会很简单。

我是新的表单/菜单,所以我不能 100% 确定 %user_category、%map 和 %index 是什么以及如何传递它们。

你怎么知道有效的表格是什么?

【问题讨论】:

    标签: php drupal drupal-6 drupal-fapi


    【解决方案1】:

    当您调用drupal_get_form 时,您提供了一个表单ID,这是Drupal 需要调用的函数。您遇到的问题是 Drupal 找不到函数:twitter_admin_form

    要么它位于包含文件中,并且您需要包含它,要么您已将其命名为其他名称。

    【讨论】:

    • 感谢您的快速回复 :) 它在 twitter.pages.inc 中,我尝试过 module_load_include('inc', 'twitter') 和 module_load_all()。
    • Oups - 发布我的时没有注意到这个答案。离开我的替代/扩展解释,但这是正确的,是第一个 (+1)
    • @James Bayliss:查看我的类似答案,了解module_load_include() 的正确用法。
    【解决方案2】:

    你得到的错误源于以下行:

    $twitter_form = drupal_get_form('twitter_admin_form');
    

    它希望 'twitter_admin_form' 是一个有效的回调函数,但找不到它。这可能是因为在您致电时未包含相关文件“twitter.pages.inc”。

    您可以通过以下方式解决此问题:

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

    (鉴于代码示例中的注释行,您似乎已经尝试过类似的操作,但忘记提供要包含的文件的名称)。

    【讨论】:

    • 哇,这行得通,我可以包含 twitter_admin_form。谢谢你:)我真的很感激。
    • 谢谢,我也在核心模块上使用了它。我不想在“块”中使用它,所以我只是在 page.tpl.php 文件上使用了 HO 实现(首先测试一下),它完美地工作。 (fwiw,我在 drupal 6 模块中的 tracker.module 上使用了它)。谢谢 - 何!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-04-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多