【问题标题】:Drupal 7 Form "Unidentified Index" ErrorsDrupal 7 表单“未识别索引”错误
【发布时间】:2013-11-23 17:59:57
【问题描述】:

我有一个自定义模块,里面有一个表单:

function emuforms_bistatistics_form($form, &$formstate){
    $form['#id'] = 'bistatistics';

    $form['headings'] = array(
        '#markup' => '<hgroup><h3>Instruction Statistics Form</h3>
        <h4>Please Fill Out Form Completely for Each Instructional Session.</h4></hgroup>'
    );  

   $form['general'] = array(
       '#title' => t('General'),
       '#type' => 'fieldset',
       '#collapsible' => TRUE,
       '#collapsed' => FALSE
   );
   ...etc
}

我为这个表单创建了一个菜单链接...

function emuforms_menu(){
    $items['emuforms'] = array(
        'title' => 'Forms and Tools 2',
        'page callback' => 'drupal_get_form',
        'page arguments' => array('emuforms_bistatistics'),
        'access callback' => TRUE,
        'type' => MENU_NORMAL_ITEM,
    );
    return $items;
}

...还有一个 preprocess() 函数...

function emuintranet_preprocess_emuforms_bistatistics_form(&$variables){
    $variables['emuforms_bistatistics'] = array();
    $hidden = array();
    ...etc
}

...还有一个 theme() 函数

function emuforms_theme(){
    return array(
        'emuforms_bistatistics' => array(
            'render element' => 'form',
        'template' => 'emuforms-bistatistics',
        ),
    );
}

问题出在: 当我以这种方式设置时,'page arguments' => array('emuforms_bistatistics') 跟随指向我的自定义 .tpl.php 文件的链接。但是,我收到几个错误:

1) 注意:未定义索引:include() 中的 emuforms_bistatistics(/home/libintranet/htdocs/sites/all/modules/emuforms/emuforms-bistatistics.tpl.php 的第 9 行)。

2) 注意:未定义索引:drupal_retrieve_form() 中的 emuforms_bistatistics(/home/libintranet/htdocs/includes/form.inc 的第 764 行)。

3) 警告:call_user_func_array() 期望参数 1 是有效的回调,未找到函数 'emuforms_bistatistics' 或 drupal_retrieve_form() 中的函数名称无效(/home/libintranet/htdocs/includes/form.inc 的第 799 行) .

另一方面 如果我设置 'page arguments' => array('emuforms_bistatistics**_form**'),我不会收到任何错误。但是,路径不再跟随我的 .tpl.php 文件。相反,它只是直接从 _form 函数显示我的表单。

【问题讨论】:

    标签: forms drupal module drupal-7 form-api


    【解决方案1】:

    您传递给drupal_get_formpage arguments 应该是一个现有的函数,它构建并返回一个表单。如果您希望表单使用自定义主题 (tpl),您可以通过设置 #theme 值在表单中定义它。

    菜单

    function emuforms_menu(){
        $items['emuforms'] = array(
            'title' => 'Forms and Tools 2',
            'page callback' => 'drupal_get_form',
            'page arguments' => array('emuforms_bistatistics_form'),
            'access callback' => TRUE,
            'type' => MENU_NORMAL_ITEM,
        );
        return $items;
    }
    

    表格

    function emuforms_bistatistics_form($form, &$formstate){
        $form['#id'] = 'bistatistics';
        $form['#theme'] = 'emuforms_bistatistics';
    
        $form['headings'] = array(
            '#markup' => '<hgroup><h3>Instruction Statistics Form</h3>
            <h4>Please Fill Out Form Completely for Each Instructional Session.</h4></hgroup>'
        );
    
       $form['general'] = array(
           '#title' => t('General'),
           '#type' => 'fieldset',
           '#collapsible' => TRUE,
           '#collapsed' => FALSE
       );
       ...etc
    }
    

    【讨论】:

    • 谢谢。现在这是一个附加问题:我已经知道了,但 .tpl 文件只会显示我的字段集(例如,$form['general'])。每当我打印该字段集中的单个字段时,例如 $form['general']['first-name'],它只会返回“
    • 您是否使用drupal_render 打印出您的字段?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-02-19
    • 2014-02-17
    • 2016-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多