Drupal自定义表单自动完成。 (DB字段位置的语法)

时间:2015-11-06 10:28:19

标签: php jquery forms drupal autocomplete

我一直致力于创建一个带有自动填充字段的自定义表单,该字段将在数据库中搜索特定内容类型的字段值并返回结果,以便用户可以为该输入框选择一个。

我的主要问题是实际上知道如何定位数据库中的特定字段。

数据库信息位于名为“'部件”的内容类型中。在该内容类型中,有一个名为“交叉引用”的字段。

我们有数以千计的零件,每个零件都有许多交叉参考值作为交叉参考'字段设置为无限制。我需要自定义表单的自动填充功能才能查看这些“交叉参考”。值。

菜单和页面

function frontcross_menu(){
$items['frontcross'] = array(
    'title' => 'Front Cross',
    'page callback' => 'frontcross_page_callback',
    'access arguments' => array('access content'),
    'description' => t('Front cross'),
    'type' => MENU_CALLBACK,
);
$items['cross/autocomplete'] = array(
    'title' => 'Autocomplete for cross',
    'page callback' => '_cross_autocomplete',
    'access arguments' => array('use autocomplete'),
    'type' => MENU_CALLBACK
);
return $items;
}

function frontcross_page_callback(){
return drupal_get_form('frontcross_form');
}

表格

function frontcross_form($form,&$form_state){
$form = array(
    '#method' => 'post','#default_value' => 'Status Message',
    '#id' => 'frontcross_form',
    'field_across_reference_value' => array(
        '#type' => 'textfield',
        '#required' => FALSE,
        '#autocomplete_path' => 'cross/autocomplete',
    ),
    'submit' => array(
        '#type' => 'submit',
        '#value' => t('Submit'),
        '#name' => t('Submit'),
        '#id' => t('Submit'),
    ),
);
$form["#submit"][] = 'frontcross_submit';
return $form;
}

提交

此函数将表单信息放入目录结果页面上的URL查询字符串

function frontcross_submit($form,&$form_state){
$options = array('' => TRUE);
$options['query']['field_cross_reference_value'] = $frontcrossval;
$frontcrossval = trim($form_state['values']['field_across_reference_value']);
if($frontcrossval){
    $options['query']['field_cross_reference_value'] = $frontcrossval;
}
$form_state['redirect'] = url($GLOBALS['base_url'].'/cross-reference',$options);
}

自动填充功能

这是我坚持的部分。它需要在数据库中查找属于内容类型的值' Part'及其领域的交叉参考'它有多个值。

我留下了以下代码作为我找到的例子。

function _cross_autocomplete($string) {
$matches = array();
    $result = db_select('cities', 'c')
    ->fields('c', array('city'))
    ->condition('city', '%' . db_like($string) . '%', 'LIKE')
    ->execute();
foreach ($result as $row) {
    $matches[$row->city] = check_plain($row->city);
}
drupal_json_output($matches);
}

我希望我的解释足够简洁。非常感谢帮助。

由于 乔

0 个答案:

没有答案