0

这几天我一直在想办法解决这个问题。有经验的人可以让我看看并告诉我我做错了什么。

这是 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 的帮助。

4

2 回答 2

0

将此添加到我的模板顶部:

    <?php use_helper('Javascript') ?>

将此添加到应用程序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 的帮助。

于 2012-06-06T05:30:01.143 回答
0

第一步,清理所有东西,然后重新运行发布

./symfony cc
./symfony plugin:publish-assets

然后,检查你的 web 文件夹,里面是否有一个文件夹,sfProtoculousPlugin里面有一个cssjs文件夹?

当您检查 Firebug 中的网络选项卡时,是否有任何 js 标记为 404 ?

是否prototype.js加载良好?

于 2012-06-05T07:23:53.860 回答