0

我已经成功地将我自己的表单(来自同一个模块)添加到我的自定义模板中,但现在我希望将分类添加术语表单(由 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吗?

4

1 回答 1

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';
}
于 2013-07-10T18:45:42.890 回答