不使用回调自动完成

问题描述:

我想使用自动完成字段链接到外部源的自动完成数据。 Drupal似乎拒绝在Drupal中无法访问的所有autocomplete_paths。任何想法如何绕过这个问题?表单字段如下所示:不使用回调自动完成

$form['business_city'] = array(
    '#type' => 'textfield', 
    '#size' => 30, 
    '#title' => t('city'), 
    '#autocomplete_path' => '_/city?=', 
    '#default_value' => $userProfile->field_address_business_city[0]['value'], 
); 

由于性能原因,在Drupal中无法访问_/city。该脚本将Drupal引导至会话级以检查有效的登录。

UPDATE:

如果我通过手动安装所需的标记,以它的工作领域创建一个autcomplete场却是尴尬的维护:

'#attributes' => array('class' => 'form-autocomplete'), 
'#suffix' => '<input type="hidden" disabled="disabled" value="/_/city?n=" id="edit-private-city-autocomplete" class="autocomplete">', 
+0

通常,不使用表单API来构建表单域并不是一个好主意。 – kiamlaluno 2011-05-29 11:37:16

+0

我只用隐藏字段来装饰表单字段(通过使用表单api)。如果你有一个更好的主意,我全是耳朵。表单API不允许我为自动完成功能使用非Drupal路径。我唯一能做的就是为文本字段应用一个自定义主题函数,这个函数甚至可以编写更多代码,并且可以使用更强大的黑客。 – marsbear 2011-05-29 12:05:37

+0

输出''标签应该只从表单API完成。 @Berdir给出的答案建议覆盖主题函数,这也避免了在主题函数或表单API之外输出表单字段。 – kiamlaluno 2011-05-29 12:16:55

的Drupal 6 theme_textfield()如果验证自动完成路径是有效的(内部)路径。

因此,除非您重写该主题功能,否则无法解决此问题。

+0

啊,是啊本来可以找到自己:)谢谢。然后坚持与黑客。 – marsbear 2011-05-29 09:03:50

而不是黑客攻击,你可以确保你查询“/ _/city?n =”的路径是一个有效的menu_hook项目。这样它将验证内部theme_textfield()内的drupal_valid_path()。从菜单钩子函数回调中,您可以将请求转发给您的外部数据源。

+0

是,否:)通过一个真正的菜单挂钩重新发送请求会危及我的性能 - 这是使用外部脚本的最初原因。我试图创建一个类似的命名菜单挂钩,以允许drupal验证网址。如果在文件系统中存在类似的文件,那么.htaccess中的RewriteRule会阻止访问Drupal-urls,因此它将针对drupal回调进行验证,并且会使用外部脚本。问题是包含?n =的特殊url。我无法创建匹配的回调。 – marsbear 2011-05-29 13:45:10