Silverstripe - 包括样式表和脚本
Silverstripe - Include Stylesheets and Scripts
我已经全新安装了 Silverstripe 并创建了一个新主题。
现在我想在 Page.ss 中包含一个 CSS,但我收到一条错误消息,指出找不到该文件。
我想将主题文件夹中的文件包含在“my-site/themes/my-theme/css/style.css”下。但是,使用“themedCSS('style')”的集成仅在文件已在“my-site/public/_resources/themes/my-theme/css/style.css”下再次集成时才有效。我已经尝试过所有变体,但只有当 CSS 文件同时存在于两个地方时它才有效。
因为我无法想象这是最佳实践,所以我想知道我错过了什么。此外,“/themes/my-theme/css/style.css”下的样式将被完全忽略,如果两者都包含的话。
在 SilverStripe 版本 4 中,您希望浏览器能够请求的所有资源文件都必须在 public
文件夹中可用。
您不需要手动将文件从您的应用程序主题文件夹复制到 public 文件夹,您可以做的是定义要在 composer.json
文件中显示的文件。
// composer.json
...
"extra": {
...
"expose": [
"themes/my-theme/css",
"themes/my-theme/js",
// Any other files or folders you want to expose
]
},
然后当您在终端中 运行 composer vendor-expose
命令时,它会将列出的文件公开到 public 文件夹。
默认情况下,expose 命令会在 public 和项目文件夹之间创建一个符号链接,因此您的所有更改也会反映在那里,这样您就不需要 运行每次更改后公开命令,仅当您添加新文件时公开。
也可以通过页面控制器导入资源文件,像这样:
// A page controller, e.g. "PageController.php"
protected function init()
{
parent::init();
self::myImports();
}
private static function myImports() {
// Files must be available in the public folder:
// - "/public/_resources/themes/my-theme/css/app.css"
// - "/public/_resources/themes/my-theme/js/app.js"
Requirements::css('./themes/my-theme/css/app.css');
Requirements::javascript('./themes/my-theme/js/app.js');
}
我已经全新安装了 Silverstripe 并创建了一个新主题。 现在我想在 Page.ss 中包含一个 CSS,但我收到一条错误消息,指出找不到该文件。 我想将主题文件夹中的文件包含在“my-site/themes/my-theme/css/style.css”下。但是,使用“themedCSS('style')”的集成仅在文件已在“my-site/public/_resources/themes/my-theme/css/style.css”下再次集成时才有效。我已经尝试过所有变体,但只有当 CSS 文件同时存在于两个地方时它才有效。
因为我无法想象这是最佳实践,所以我想知道我错过了什么。此外,“/themes/my-theme/css/style.css”下的样式将被完全忽略,如果两者都包含的话。
在 SilverStripe 版本 4 中,您希望浏览器能够请求的所有资源文件都必须在 public
文件夹中可用。
您不需要手动将文件从您的应用程序主题文件夹复制到 public 文件夹,您可以做的是定义要在 composer.json
文件中显示的文件。
// composer.json
...
"extra": {
...
"expose": [
"themes/my-theme/css",
"themes/my-theme/js",
// Any other files or folders you want to expose
]
},
然后当您在终端中 运行 composer vendor-expose
命令时,它会将列出的文件公开到 public 文件夹。
默认情况下,expose 命令会在 public 和项目文件夹之间创建一个符号链接,因此您的所有更改也会反映在那里,这样您就不需要 运行每次更改后公开命令,仅当您添加新文件时公开。
也可以通过页面控制器导入资源文件,像这样:
// A page controller, e.g. "PageController.php"
protected function init()
{
parent::init();
self::myImports();
}
private static function myImports() {
// Files must be available in the public folder:
// - "/public/_resources/themes/my-theme/css/app.css"
// - "/public/_resources/themes/my-theme/js/app.js"
Requirements::css('./themes/my-theme/css/app.css');
Requirements::javascript('./themes/my-theme/js/app.js');
}