我正在创建一个Drupal 7模块。目前,我的目标是获取表单,将某些内容插入数据库,然后告诉用户它工作正常。我可以把它提交给数据库。让表单重新构建并告诉用户他们的术语已经提交了,这是行不通的。我不断得到这些警告错误的变化:由于垃圾邮件的预防,我将在评论中发布这些错误.叹息
最近,我用Chrome开发工具复制了一个错误:
数组( 'term_name‘=> 'jfidj','set_id’=> '1',){“命令”:“设置”,“设置”:{“basePath”:“\/basePath 7\/”,“重叠”:{“路径”:{ "admin":"node\/*\/edit\nnode\/*\/delete\nnode\/*\/revisions\nnode\/*\/revisions\/*\/revert\nnode\/*\/revisions\/*\/delete\nnode\/add\nnode\/add\/*\nadmin\nadmin\/*\nbatch",“non_admin”:“}”,“ajaxCallback”:“overlay”},"merge":false },{“命令”:“插入”,“方法”:null,“选择器”:null“数据”:“\u003cdiv id=\"form_message\"\u003e\u003cdiv”表单-类型-textfield表单-条目-消息\u003E\n\u003 class=\for=\“编辑-消息-2\”\u003 e隐含\u003c\/label\u003e\n \u003 size=\ type=\"text\“128\”name=\“消息\id=\-消息-2\”size=\“60”value=\"\“class=\”表单-文本\“class=\”“设置”:null},{“命令”:“插入”,“方法”:“前置”,“选择器”:null,“数据”:“”,“设置”:null}
我试着把它格式化得更好,但它太乱了.
据我所知,我做的事情是正确的。我一直在跟踪示例模块和Drupal Ajax窗体指南。
我创建带有包装器定义的表单,然后在其中有一个if语句,该语句仅在表单提交时运行,然后使用ajax根据需要替换包装的表单元素。
为了了解我尝试过的所有内容,您可以查看Drupal论坛的主题,我将在评论中发布一个链接。
这是我正在尝试的当前代码,有些代码我已经注释掉了,我已经尝试过了,但是没有工作。
/**
* Add a term
*/
function markit_form_term_add()
{
$sets = markit_get_marksets();
//drupal_set_message(var_export($sets));
$form = array();
$form['message'] = array(
'#type' => 'textfield',// . !(empty($form_state['values']['term_name'])) ? 'textfield' : 'hidden',
'#title' => t('hidden'),
'#value' => '',// . !(empty($form_state['values']['term_name'])) ? 'Added term: ' . $form_state['values']['term_name'] : 'Message goes here.',
'#prefix' => '<div id="form_message">',
'#suffix' => '</div>',
);
$form['add'] = array(
'#type' => 'fieldset',
'#title' => t('Add new Term'),
'#prefix' => '<div id="add_term_form">',
'#suffix' => '</div>',
);
$form['add']['name'] = array(
'#type' => 'textfield',
'#title' => t('Term name'),
'#size' => 15,
);
//select the set you want to add the term to
$setNames = array();
foreach($sets as $row)
{
$id = $row['set_id'];
$setNames[$id] = t($row['set_name']);
}
$form['add']['sets']['set_names'] = array(
'#type' => 'select',
'#title' => t('Select a set.'),
'#options' => $setNames,
'#description' => t('Select from the list of sets.'),
);
$form['add']['submit'] = array(
'#type' => 'button',
'#value' => t('Add'),
'#ajax' => array(
'callback' => 'markit_ajax_terms_add_callback',
'wrapper' => 'form_message',
'method' => 'replace',
),
);
if(!empty($form_state['values']['name']))
{
$form['message']['#type'] = 'textfield';
$form['message']['#value'] = t('Added term: ');// . $form_state['values']['term_name'];
}
return $form;
}
function markit_ajax_terms_add_callback($form, $form_state)
{
$entry = array(
'term_name' => $form_state['values']['name'],
'set_id' => $form_state['values']['set_names'],
);
markit_form_term_add_insert($entry);
return $form['message'];
}
/*
* Get an array of mark sets
*/
function markit_get_marksets()
{
$output = '';
$select = db_select('markit_sets','s');
$select->addField('s','set_id');
$select->addField('s','set_name');
$entries = $select->execute()->fetchAll(PDO::FETCH_ASSOC);
return $entries;
}
/**
* Get terms by set_id
*/
function markit_get_markterms($termid=NULL,$termname=NULL,$setid=NULL)
{
$select = db_select('markit_terms','t');
$select->addField('t','term_id');
$select->addField('t','term_name');
$select->addField('t','set_id');
if($termid)
$select->condition('term_id',$termid);//,'=');
if($termname)
$select->condition('term_name',$termname);//,'=');
if($setid)
$select->condition('set_id',$setid);//,'=');
$entries = $select->execute()->fetchAll(PDO::FETCH_ASSOC);
return $entries;
}
/**
* Insert new set into database
*/
function markit_form_set_add_insert($entry)
{
$return_value = NULL;
try {
$return_value = db_insert('markit_sets')
->fields($entry)
->execute();
}
catch (Exception $e) {
drupal_set_message(t('db_insert failed. Message = %message, query= %query',
array('%message' => $e->getMessage(), '%query' => $e->query_string)), 'error');
}
return $return_value;
}
/**
* Insert new set into database
*/
function markit_form_term_add_insert($entry)
{
drupal_set_message(var_export($entry));
$return_value = NULL;
try {
$return_value = db_insert('markit_terms')
->fields($entry)
->execute();
}
catch (Exception $e) {
drupal_set_message(t('db_insert failed. Message = %message, query= %query',
array('%message' => $e->getMessage(), '%query' => $e->query_string)), 'error');
}
return $return_value;
}发布于 2010-08-11 15:08:15
正确的。在markit_form_term_add_insert中,我使用了一些代码来发现以前的一些bug (drupal_set_message(var_export($entry));)。删除它解决了问题。调试代码是错误..。刘海头撞墙
具体来说,我使用drupal_set_message来查看变量的内容并确保它们是正确的。但是当我开始使用ajax时,drupal_set_message不再被正确地调用了。它应该在表单提交之后调用,或者,很明显,是由ajax回调返回的。如果它只是像在ajax之外那样被调用,它就会给出这些错误。
总之,希望这能帮助人们在寻找类似错误时有所帮助。
基本上,会遍历每个被调用的函数。即使是那些你认识的人也没有影响任何事情。在某个地方,有一些代码没有按其应有的方式被调用。
https://stackoverflow.com/questions/3442917
复制相似问题