2016-01-22 41 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