0

我正在与 SilverStripe 合作为客户建立一个新网站,现在我遇到了以下问题:

每个页面(以及这些页面的子页面)都会有一个特定的背景图片,我希望这些背景图片在加载新页面时滑到一边,而不是像往常一样加载整个页面(在这里你可以看到一个例子我的意思是:http://www.thenomadhotel.com/)。我想我必须使用 Ajax 来做到这一点,还是有更好的解决方案?由于我对 Ajax 不太熟悉,我的大问题是:如何在 SilverStripe 中使用 Ajax?哪个代码应该放在哪个文件中?谁能帮我解决这个问题?我不是超级程序员,而是一个快速学习者,所以任何帮助将不胜感激!:)

4

1 回答 1

1

很多工作要做。

基本上,您需要为要通过 ajax 加载的页面创建一个模板,其中仅包含您将在页面更改时更新的内容,所以没有<header>等。

接下来,请参阅http://doc.silverstripe.com/framework/en/3.1/reference/templates#calling-templates-from-php-code了解如何渲染它们(Director::is_ajax()这里是你的朋友)。

在客户端,您可能想要使用 jquery 的 ajax 函数并捕获页面上的所有内部链接,并使用 ajax 加载它们。简单的代码示例:

$(document).ready(function(){
    $('a').click(function(){
        var $a = $(this);
        var href = $a.attr('href');
        $('body').load(href);
        e.preventDefault();
   });
});

此代码段将使用 ajax 加载任何链接,并将当前页面的内容替换为<body>加载的 html。你应该仔细看看 jquery 的 ajax 功能,有很多东西要学:http ://api.jquery.com/category/ajax/

as for your 'sliding background image', what you could do is to prepare 2 containers in your <body>, one holding the background image, the other for the page's content (to be replaced using ajax). then, whenever a link is clicked, make the ajax call as shown before, then slide the background image.

these are just some pointers into the right direction - as i said before, lots of work to do.

in case you'd like to completely avoid this whole ajax stuff, another option might be to have your page's content inside in iframe - but that's another story.

于 2013-08-28T09:01:32.877 回答