【发布时间】:2012-06-05 07:12:23
【问题描述】:
我这几天一直在尝试解决这个问题。有经验的人可以看一下并告诉我我做错了什么。
这是 symfony 1.4 内置的,借助 sfProtoculousPlugin 的 input_auto_complete_tag。
我的模板:
<?php echo input_auto_complete_tag(
'tag', /*id_of_field*/
'', /*default_value_of_field*/
'tag/autocomplete', /*url_to_ajax_script*/
array('autocomplete' => 'off'), /*array_with_extra_tag_attributes*/
array('use_style' => 'true') /*array_with_options*/
) ?>
<input type="submit" name="submit" value="Tag me!" />
...
</form>
添加到我的 routing.yml 顶部:
tag_autocomplete:
url: /tag_autocomplete
param: { module: tag, action: autocomplete }
创建的模板/autocompleteSuccess.php:
<ul>
<?php foreach ($tags as $tag): ?>
<li><?php echo $tag ?></li>
<?php endforeach; ?>
</ul>
将此操作添加到 modules/tag/actions/action.class.php 文件中:
public function executeAutocomplete(sfWebRequest $request)
{
$this->tags = QuestionTag::getTagsForUserLike(
$this->getUser()->getGuardUser()->getId(),
$this->getRequestParameter('tag'),
10
);
}
将此方法添加到 QuestionTag.class.php 文件中:
public static function getTagsForUserLike($user_id, $tag, $max = 10)
{
$tags = Doctrine_Query::create()
->select('qt.tag')
->from('QuestionTag qt')
->where('qt.user_id = ?', $user_id)
->andWhere("qt.tag LIKE '%".$tag."%'")
->orderBy('qt.tag')
->limit($max)
->fetchArray();
return $tags;
}
这里是生成的js代码:
//<![CDATA[
new Ajax.Autocompleter('tag', 'tag_auto_complete', '/frontend_dev.php/tag_autocomplete', {});
//]]>
在我的 Firebug 控制台中,我收到以下错误:
Ajax is not defined
[Break On This Error]
...ax.Autocompleter('tag', 'tag_auto_complete', '/frontend_dev.php/tag_autocomplete...
我尝试了以下命令,据说将“资产”(js 脚本)复制到我的 /web 文件夹。好像有worked for some,但不是我的。
./symfony plugin:publish-assets sfProtoculousPlugin
我觉得我快到了。任何帮助将不胜感激。非常感谢。
更新 1
在我的/web/sfProtoculousPlugin 文件夹中,我有:
css /
input_auto_complete_tag.css
js/
builder.js
controls.js
dragdrop.js
effects.js
index.html
prototype.js
scriptaculous.js
slider.js
sound.js
unittest.js
另外,我没有看到带有prototype.js 的<script> 标签。
已解决
将此添加到应用程序settings.yml:
all:
.settings:
prototype_web_dir: /sfProtoculousPlugin
这是应用程序view.yml:
javascripts: [%SF_PROTOTYPE_WEB_DIR%/js/prototype, %SF_PROTOTYPE_WEB_DIR%/js/scriptaculous]
然后我运行./symfony cc 并刷新了页面。它现在可以按我的预期完美运行。感谢 j0k 的帮助。
【问题讨论】:
标签: ajax autocomplete symfony-1.4