【问题标题】:Silverstripe 3 - extend sitetree and layoutSilverstripe 3 - 扩展站点树和布局
【发布时间】:2014-11-12 11:23:07
【问题描述】:

我是 SilverStripe 的新手。我需要通过扩展一个新的类站点树来创建一个新页面。我的问题是如何在模板中检索类似于经典 page.php 中使用的 $Layou 的内容。例如,在我的模板文件夹中,我希望为由此创建的新页面组织一个类似“布局”的文件夹。

这是控制器:

class WhitePage extends SiteTree {
    private static $db = array(
    );
    private static $has_one = array(
    );
}

class WhitePage_Controller extends ContentController {
    private static $allowed_actions = array(
    );

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

    function index() {
        return $this->renderWith("WhitePage");
    }
}

我想在模板目录中的“.ss”文件中创建一个文件夹名称“whitepage”,并在模板中使用类似 $whitepage instate of $Layout ...

如何做到这一点?

thk,很多 弗朗切斯科

【问题讨论】:

  • 据我所知,您不会轻易覆盖$Layout。除了尝试以不同的方式组织您的模板文件夹之外,您究竟为什么要这样做呢?我工作过的每个站点,自定义页面模板都像往常一样存储在mysite/templates/Layout 文件夹中,任何添加新页面模板的模块都存储在{my-module-name}/templates/Layout 中。
  • 我的目的是创建一个不会呈现基本页面 page.ss 的新页面,在这种情况下,我需要一个没有 page.ss 内元素的 withe 页面(在主题/mytheme/templates/ Page.ss)
  • 你可以把你的 WhitePage.ss 放在主题/mytheme/templates 中,它将被用来代替 Page.ss 更多关于 Silverstripe 模板引擎的信息:doc.silverstripe.org/framework/en/reference/templates
  • 这就是我所做的,但我对更复杂且可重复使用的东西感兴趣。因为如果我需要为新的扩展页面重用白页,我会这样做......
  • 您可以使用 renderWith 因为它可以处理数组并且将使用第一个有效的数组。见这里:api.silverstripe.org/master/class-ViewableData.html#_renderWith

标签: silverstripe


【解决方案1】:

您可以通过扩展WhitePage 类来使用具有多种页面类型的主WhitePage.ss 模板。然后你可以像往常一样使用$Layout来调用你的自定义布局模板。

白页

class WhitePage extends SiteTree {
}

class WhitePage_Controller extends ContentController {
    private static $allowed_actions = array(
    );

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

CustomWhitePage

class CustomWhitePage extends WhitePage {
}

class CustomWhitePage_Controller extends WhitePage_Controller {
    private static $allowed_actions = array(
    );

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

在您的 themes/mytheme 文件夹或 mysite 文件夹中创建您的模板,如下所示:

templates/Page.ss
templates/WhitePage.ss
templates/Layout/Page.ss
templates/Layout/WhitePage.ss
templates/Layout/CustomWhitePage.ss

您的Layout/WhitePage.ssLayout/CustomWhitePage.ss 将使用templates/WhitePage.ss 父模板,而任何扩展Page 的页面都将使用templates/Page.ss

确保您调用?flush=all 以便第一次加载您的模板。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-09-27
    • 1970-01-01
    • 1970-01-01
    • 2018-02-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多