这几天我一直在想办法解决这个问题。有经验的人可以让我看看并告诉我我做错了什么。
这是 symfony 1.4 中内置的,在 input_auto_complete_tag 的 sfProtoculousPlugin 的帮助下。
我的模板:
<?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 文件夹。它似乎对某些人有效,但对我无效。
./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
另外,我看不到里面有<script>
标签prototype.js
。
解决了
将此添加到应用程序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 的帮助。