2016-01-22 40 views
1

我需要一些帮助,以适应银河系MVC系统中运行良好的PHP脚本。用jquery ajax自动加载银线条内容

<script type="text/javascript" src="http://ajax.googleapis.com/ajax/ 
libs/jquery/1.3.0/jquery.min.js"></script> 

<script type="text/javascript"> 

jQuery(document).ready(function() { 
    var refreshId = setInterval(function() { 
     jQuery('#load').fadeOut("fast", function() { 
      jQuery(this).load("reload.php", function() { 
       jQuery(this).fadeIn("fast"); 
      }); 
     }); 
    }, 1000 * 15); 
}); 

</script> 

我的主要问题是如何加载部分代码模板,而不是一整页内容。在这个例子中,reload.php只是代码的一部分。但在Silverstripe中,我需要将一部分代码呈现给模板,并从控制器中检索它。

有没有人知道如何做到这一点? 谢谢!

+1

你需要在你的控制器呈现你想要的部分行动。您也可以重用Director :: is_ajax()中可能存在的效用。也可以看看。 http://ajax-silverstripe.mmkdigital.com/#/ – wmk

+0

不错!不完全是我需要的,但知道如何将代码从控制器传递到模板很有用。谢谢! – StefGuev

+0

那么,你的问题太过宽泛,以至于没有更好的答案。如果您告诉我们更多关于问题的银条纹部分以及您已经尝试过的代码,我们可以帮助更多... – wmk

回答

0

我不知道你是否有更好的想法做到这一点,但有我的!它适用于我的用法。我是一个初级编码器;)

routes.yml

Director: 
    rules: 
    'ajax//$Action/$ID': 'AjaxController' 

ajaxcontroller.php

class AjaxController extends Controller { 

    private static $allowed_actions = array(
     'news' 
    ); 

    public function news(){ 

     $News = News::get()->sort('Sort',DESC); 

     if (Director::is_ajax()){ 
       // Ajax! 
       return $this->renderWith('AjaxInclude', array('News' => $News)); 
      } else { 
       // Not ajax! 
       //return print_r($Pages); 
     } 
    } 
} 

包括/ AjaxIncludes.ss

<% loop News %> 
    <p>$Title</p> 
<% end_loop %> 

HomePage.php或其他网页

class HomePage_Controller extends Page_Controller { 

    public function init() { 
     parent::init(); 

     Requirements::javascript($this->ThemeDir()."/javascript/ajax.js"); 
    } 
} 

ajax.js

jQuery.noConflict(); 

(function($) { 
    $(document).ready(function() { 

     var refreshId = setInterval(function() {  


      $.ajax({ 
       url: "ajax/news", 
       cache: false, 
       dataType: "html", 
       success: function(data) { 
        if(!data){ 
         $("#responsecontainer").removeClass('online'); 
         $("#responsecontainer").addClass('offline');  
         $("#responsecontainer").fadeOut(); 
         //alert("offline"); 
         $("#responsecontainer").html(data); 
        } else { 
         $("#responsecontainer").removeClass('offline'); 
         $("#responsecontainer").addClass('online'); 
         //alert("online"); 
         $("#responsecontainer").html(data); 
        } 
       } 
      }); 
     }, 1000 * 5); 
    }); 
}(jQuery)); 

Finaly,ID responsecontainer必须在HomePage.ss被激活或desactivate

+0

这正是我在开始时所需要的,但它不是一个超级解决方案。如果刷新被触发只加载新消息,并且将内容置于其他消息之上,则会更加准确。复杂的我认为... – StefGuev