将表单从模块加载到自定义页面模板

时间:2013-07-10 16:53:36

标签: forms templates drupal-7 admin taxonomy

我已成功将自己的表单(来自同一模块)添加到我的自定义模板中,但现在我希望将分类法添加术语表单(由ubercart使用,我认为目录词汇中的产品类别)添加到我的模板中。

我已经使用我的模块 - 文件名simpleadmin.module

    

/**
 * @file
 * A module to simplify the admin by replacing add/edit node pages
 */

function simpleadmin_menu() {
  $items['admin/products/categories/add'] = array(
    'title' => 'Add Category',
    'page callback' => 'simpleadmin_category_add',
    'access arguments' => array('access administration pages'),
    'menu_name' => 'menu-store',
  );
  return $items;
}

function simpleadmin_category_add() {
module_load_include('inc', 'taxonomy', 'taxonomy.admin');
$output = drupal_get_form('taxonomy_form_term');
return theme('simpleadmin_category_add', array('categoryform' => $output));
}

function simpleadmin_theme() {
  return array(
    'simpleadmin_category_add' => array(
      'template' => 'simpleadmin-template',
      'variables' => array('categoryform' => NULL),
      'render element' => 'form',
    ), 
  );
}
?>

至于主题文件本身 - 文件名simpleadmin-template.tpl.php,目前只是非常简单,直到我将表单加载到其中:

<div>
    This is the form template ABOVE the form
</div>


<?php
dpm($categoryform);
print drupal_render($categoryform);
?>

<div>
    This is the form template BELOW the form
</div>

它告诉我它是

  

尝试在taxonomy_form_term()

中获取非对象的属性

并抛出错误。我应该使用node_add()并传递nodetype吗?

1 个答案:

答案 0 :(得分:0)

要呈现分类术语表单,该函数应该能够知道它所属的词汇表。否则怎么知道要显示哪种形式?我认为这是正确的方法。

module_load_include('inc', 'taxonomy', 'taxonomy.admin');
if ($vocabulary = taxonomy_vocabulary_machine_name_load('vocabulary_name')) {
  $form = drupal_get_form('taxonomy_form_term', $vocabulary);
  return theme('simpleadmin_category_add', array('categoryform' => $form));
}

要重定向表单,请使用hook_form_alter

function yourmodule_form_alter(&$form, &$form_state, $form_id) {
  //get your vocabulary id or use print_r or dpm for proper validation
    if($form_id == 'taxonomy_form_term' && $form['#vocabulary']['vid'] = '7' ){ 
  $form['#submit'][] = 'onix_sections_form_submit'; 
 }
}

function yourmodule_form_submit($form, &$form_state) {
     $form_state['redirect'] = 'user';
}