有没有办法为用户创建一个字段来填写 CMS 管理面板中的属性值,并让它更改可公开查看的文档?
例如,设置调色板的颜色值。 我研究了所见即所得样式,但据我了解,它们是用于更改管理面板本身的样式?而不是允许从管理面板修改样式?
我尝试创建 Varchar 字段来保存此值,但我似乎无法让 Silverstripe 填充它。
'PrimaryColour' => 'Varchar',
'AccentColour1' => 'Varchar',
'AccentColour2' => 'Varchar',
$fields->addFieldsToTab('Root.Colours', array (
TextField::create('PrimaryColour','Primary Colour'),
TextField::create('AccentColour1','Accent Colour 1'),
TextField::create('AccentColour2','Accent Colour 2'),
));
我假设 Silverstripe 不会尝试在 CSS 文件中填充 PHP 值,因此我尝试在 .SS 文件中创建样式标记,并在那里引用它们
<style>
body {
--primary: $PrimaryColour;
--accent1: $AccentColour1;
--accent2: $AccentColour2;
}
</style>
我在这里设置 CSS 变量,以便我可以在 CSS 中的其他地方引用它
您提供的代码在全新安装的
silverstripe/installer
中对我来说工作得很好 - 以防万一有什么东西出现在错误的地方,我已在此处复制了完整的代码以在上下文中显示它。
<?php
// app/src/Page.php
namespace {
use SilverStripe\CMS\Model\SiteTree;
use SilverStripe\Forms\TextField;
class Page extends SiteTree
{
private static $db = [
'PrimaryColour' => 'Varchar',
'AccentColour1' => 'Varchar',
'AccentColour2' => 'Varchar',
];
public function getCMSFields()
{
$fields = parent::getCMSFields();
$fields->addFieldsToTab('Root.Colours', [
TextField::create('PrimaryColour','Primary Colour'),
TextField::create('AccentColour1','Accent Colour 1'),
TextField::create('AccentColour2','Accent Colour 2'),
]);
return $fields;
}
}
}
<!-- themes/my-theme/templates/Page.ss -->
<html>
<head>
<!-- ... -->
<style>
body {
--primary: $PrimaryColour;
--accent1: $AccentColour1;
--accent2: $AccentColour2;
}
</style>
</head>
<!-- ... -->
</html>
在全新安装中尝试此操作,如果它有效,那么很明显您的项目中要么出现了一些非常简单的错误(例如,将样式标签放入错误的模板中),要么某些自定义妨碍了(例如 CSP 阻止内联样式标签)
tractorcow/silverstripe-colorpicker
,而不是常规文本字段