【问题标题】:Drupal - I'm trying to refresh a view after voting with Fivestar moduleDrupal - 我正在尝试在使用 Fivestar 模块投票后刷新视图
【发布时间】:2010-12-04 03:12:41
【问题描述】:

我有一个网站在首页节点上进行投票,每次投票后我需要更新同一节点上的视图。我目前在我的 page.tpl.php 中使用以下代码

<script type="text/javascript">
 function fivestarResult(voteResult) {
      $('div#fivestar-summary-'+voteResult.vote.id).html(voteResult.result.summary);
      window.location = "http://www.mydomain.com/";
 };
</script>

有没有办法直接刷新视图而不是刷新整个页面?我的javascript不太好,所以有点迷茫。

【问题讨论】:

    标签: php javascript drupal drupal-views drupal-fivestar


    【解决方案1】:

    在这种情况下我可能会做的一个想法是 Ajax 再次调用视图并在单击事件时通过 JQuery 再次将其呈现在页面内。

    举这个例子,我想这会更清楚

    Drupal 6: Render Views 2 data in a page tpl file

    【讨论】:

      【解决方案2】:

      谢谢拉贝,

      听起来应该可以。我尝试了几种不同的方法,但无法实现...

      这段代码(在 page.tpl.php 中)是否有明显的遗漏?

      <script type="text/javascript">
          function fivestarResult(voteResult) {
          $('div#fivestar-summary-'+voteResult.vote.id).html(voteResult.result.summary);
          <?php
              $name = "comparison_view";
              print views_embed_view($name, $display_id = 'default');
          ?>
          };
      </script>
      

      非常感谢您的帮助

      【讨论】:

      • 是的,有一些明显的缺失。当他们从网络服务器请求页面时,PHP 代码会被扩展,而不是在执行 Javascript 时,因此它将保存他们投票之前的值。您将需要某种方式通过 javascript 获取视图以嵌入到页面中。
      【解决方案3】:

      与 Drupal 中的许多东西一样,可能已经编写了一个模块来执行此操作。 Ajax views refresh 听起来很有希望!

      【讨论】:

      • 感谢 ZoFreX - 我尝试了这个模块,但无法找到任何方法连接它以在投票后刷新...我会尝试你建议的代码建议。
      • 我已经用 AJAX 视图刷新完成了这一点。这不是一个超级直截了当的方法,但它完全是正确的方法。
      【解决方案4】:

      我花了无数个小时调试一个视图,结果才意识到我启用了缓存并且正在查看旧结果。不同用户组的缓存也是分开的。所以你可能需要手动刷新缓存来更新它,这对 Ajax 来说可能是一个挑战。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-04-12
        • 1970-01-01
        • 2011-01-18
        • 1970-01-01
        相关资源
        最近更新 更多