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