我需要一些帮助,使用PHP中的这个简单脚本来适应Silverstripe MVC系统。
<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中,我需要将一部分代码渲染到模板中并从控制器中进行检索。
有人知道怎么做吗? 谢谢!
答案 0 :(得分: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));
最终,ID响应容器必须在HomePage.ss中激活或停用