gpt4 book ai didi

themes - 更改 Silverstripe 中的模板继承顺序

转载 作者:行者123 更新时间:2023-12-02 09:02:05 24 4
gpt4 key购买 nike

根据the documentation of Silverstripe ,模板继承定义如下:

  1. mysite(或网站文件夹的其他名称)
  2. 特定于模块的主题(例如主题/simple_blog)
  3. 主题(例如主题/简单)
  4. 模块(例如博客)
  5. 框架

现在我的网站有很多不同的主题。嗯,“不同”是因为它们有不同的名字,但它们仍然有很多共同点。现在,我将所有通用文件放在/mysite/templates 文件夹中,但这意味着如果我的主题之一需要更改其中一个模板,我需要从通用文件夹中删除该文件,并将其移动到 ALL不同的主题文件夹。这样我最终会得到很多重复的模板。

就我而言,更改继承顺序会很有帮助,从而使特定主题文件夹优先于/mysite 文件夹。通过这种方式,我可以将需要更改的模板复制到主题文件夹中,并且该主题将使用更改后的模板,而其余主题则继续使用/mysite 文件夹中的通用模板:

  1. 主题(例如主题/简单)
  2. 特定于模块的主题(例如主题/simple_blog)
  3. mysite(或网站文件夹的其他名称)
  4. 模块(例如博客)
  5. 框架

在我看来,这也是更明显的方法,但我可能在这里遗漏了一些重要的观点。尽管如此,在不破坏核心的情况下可以做到这一点吗?

最佳答案

模板继承渲染似乎主要由两个类管理,SSViewer(用于处理 View 渲染的核心类)和Controller(所有其他 Controller 都继承自它)。

对于 View 渲染,SSViewer 对象可以take an array in its constructor for template inheritance 。这很重要,因为 Controller 类实际上 instantiates the SSViewer in a function called getViewer .

在此阶段值得一提的是,您通常从 ContentController 继承一个普通的 SilverStripe 站点,而不是 overrides the getViewer of Controller 。它不会真正改变您需要编写的太多内容,但这很重要,具体取决于您希望应用它的低级别。

对于您想要应用于一般页面的内容,您可以考虑在 Page_Controller 中重写 getViewer。至于具体需要写什么,这在某种程度上取决于您的整个网站结构。我想它需要像这样开始:

public function getViewer($action) {
$viewer = Parent::getViewer($action);
$templates = $viewer->templates();

//Do your processing that you need to here
//Set it back via:
//$viewer->setTemplateFile($type, $file);
//Alternatively, you can create a new SSViewer object

return $viewer;
}

需要进行一些实验才能弄清楚您到底需要做什么来调整数据,尽管这绝非易事。一旦您开始沿着这条道路走下去,您可能会发现许多边缘情况,这可能无法正常工作(例如模板包含)。

关于themes - 更改 Silverstripe 中的模板继承顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36673790/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com