在 Silverstripe 5 中更改/设置 CMS 值的 CSS

问题描述 投票:0回答:1

有没有办法为用户创建一个字段来填写 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 中的其他地方引用它

php css silverstripe
1个回答
0
投票

您提供的代码在全新安装的

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

,而不是常规文本字段
© www.soinside.com 2019 - 2024. All rights reserved.