Php 设置SilverStripe博客模块样式的最佳方法

Php 设置SilverStripe博客模块样式的最佳方法,php,css,module,blogs,silverstripe,Php,Css,Module,Blogs,Silverstripe,我正在尝试将CSS需求添加到 我目前采用的方法是创建Blog类和Blog_控制器以及BlogPost和BlogPost_控制器的子类,试图将css需求引入init函数。然而,由于某些原因,我似乎无法获得任何对这些css文件的引用 class ProjectsHolder extends Blog{ private static $allowed_children = array( 'ProjectPage' ); } class ProjectsH

我正在尝试将CSS需求添加到

我目前采用的方法是创建Blog类和Blog_控制器以及BlogPost和BlogPost_控制器的子类,试图将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");
    }
  }
我还尝试了模板语法。我能让css呈现的唯一方法是在模板顶部的head标记中硬编码css链接标记,这很糟糕

我还注意到SilverStripe向类中注入功能的方法,这似乎适用于我的情况

我的问题是:设计模块(比如博客模块)的最佳实践是什么


很明显,这里有些东西我遗漏了或不理解;如有任何澄清,将不胜感激

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

要求:主题CSSP项目

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

SilverStripe文档给出了在模板和php文件中执行此操作的示例。不过,最近我注意到,现在的“首选”方式是仍然使用“需求”,但使用的是您提到的模板

至于只设计博客模块的样式,而不必扩展或修改任何核心代码,为什么不将样式添加到主样式表或它自己的文件/css中,并将它们包含在主主题模板中


我要做的是创建一个名为blog.css的文件,并使用上述模板将其包含在我的themes/themename/templates/Page.ss文件中。当然,你的css文件没有那么大的占用空间,你需要利用组合文件。

是的,你尝试过模板化和php语法中的主题css,但都没有用。括号代码是我在一个教程中注意到的,我也尝试过通过以下方式使用点连接:Requirements::css$this->ThemeDir./css/projects.css;是的,我可以将我的全局风格与博客特定风格合并;我发现,如果将大型项目细分为单独的页面,那么维护它们的CSS就更容易了。作为最后的手段,这可能会奏效。我认为新的理由是,你可能有多个主题/模板,如果你在模块中或通过类扩展指定特定的样式,你几乎会在所有主题中使用这些样式。将样式放在各个主题中并使用模板语法,可以在视觉上对每个主题进行更多的自定义。它还增加了SS更多的MVC框架。@RyanAchten您应该查看sass以获得样式表。一旦你使用它,你就再也不会回去编辑css文件了。@GavinBruce Nah。