设计SilverStripe博客模块的最佳方法

时间:2017-09-14 03:54:50

标签: php css module blogs silverstripe

我正在尝试将CS​​S要求添加到Blog module

我采用的当前方法是创建Blog类和Blog_Controller的子类(以及BlogPost和BlogPost_Controller),以尝试将css需求引入init()函数。但是,出于某种原因,我似乎无法获得对这些css文件的任何引用。

  class ProjectsHolder extends Blog{

    private static $allowed_children = array(
       'ProjectPage'
     );
  }

  class ProjectsHolder_Controller extends Blog_Controller{

    public function init(){
      parent::init();
      Requirements::css("{$this->ThemeDir()}/css/projects.css");
    }
  }

我也试过<%require css%>模板语法。我可以获得css渲染的唯一方法是在模板顶部的头标记内部硬编码css链接标记(这很糟糕)。

我还注意到了SilverStripe的DataExtension/SiteConfig方法,用于向类中注入功能,看起来它可能适用于我的情况。

我的问题是:样式模块的最佳实践是什么,例如Blog模块。

显然我在这里缺少或不理解;任何澄清将不胜感激!

1 个答案:

答案 0 :(得分:1)

乍一看,如果您使用的是Themed CSS,那么您只需使用

即可

Requirements::themedCSS("projects");

但是,在您的代码中,括号可能会导致问题:{$this->ThemeDir()}

SilverStripe Docs提供了在模板和php文件中执行此操作的示例。不过,最近引起我注意的是,“首选”是这些天的方式仍然是使用'要求'但是在你提到的模板中。

<% require themedCSS("projects") %>

至于为您的Blog模块设计样式,而不必扩展任何内容或修改其中的任何核心代码,为什么您只是将样式添加到主样式表或其中?&#39 ; s自己的文件/ CSS,只是将它们包含在主题模板中?

我所做的是创建一个名为blog.css的文件,并使用上面的themes/themename/templates/Page.ss模板将其包含在我的<% require %>文件中。当然,你的css文件没有足够的空间来利用组合文件。