SilverStripe 3.3 - 将CMS字段添加为JavaScript变量

时间:2016-03-07 15:52:14

标签: javascript silverstripe

我正在为SilverStripe项目尝试不同的东西:我需要找到一种方法来获取CMS中的字段并将它们放入JavaScript变量中以便在JavaScript文件中使用。

对于初学者,我在Page.php中有一个标题CMS字段:

private static $db = array(
    'Header' => 'HTMLText'
);

public function getCMSFields() {
    $fields = parent::getCMSFields();

    $fields->addFieldToTab('Root.Main', new HTMLEditorField('Header', 'Header'));

    return $fields;
}

我想在JavaScript文件中引用该字段作为变量:

       {
            id: 'Text-Intro',
            type: 'text',
            rect: ['251px', '250px','641px','71px','auto', 'auto'],
            text: [Header variable needs to go here],
            align: "left",
            font: ['Arial, Helvetica, sans-serif', 25, "rgba(0,0,0,1.00)", "500", "none", "normal"]
        },

我尝试使用Requirements :: javascriptTemplate()函数,但该变量未在detail-page_edge.js文件中识别:

public function init() {
    parent::init();

    Requirements::javascriptTemplate('/themes/simple/javascript/detail-page_edge.js', array(
        'Header' => $this->Header
    ));
}

某些东西必须丢失,或者这可能已经过时了?我之前从未在SilverStripe中尝试过此操作。考虑到如何设置这个项目,我没有多少选择。

1 个答案:

答案 0 :(得分:4)

您可以使用SilverStripe模板语法进行简单的变量替换。所以你的JS文件应该是:

// ... plain JS code
text: '$Header',
// ... more JS code

请注意,您不能使用更复杂的模板语法,例如<% loop … %><% if … %>,因为javascriptTemplate只会进行变量替换。

如果您需要完整的模板功能,可以将.ss模板文件呈现为字符串并使用Requirements::customScript输出。我认为你不应该这样做...甚至通过javascriptTemplate处理JS文件似乎都没有。我宁愿在常规标记中使用HTML数据属性(例如。.ss模板),并以一种能够获取所需属性并以标记为基础构建JavaScript的方式编写JavaScript。

另外:确保您的文件路径正确无误。而不是写绝对路径:

'/themes/simple/javascript/detail-page_edge.js'

我建议您使用以下内容:

$this->ThemeDir() . '/javascript/detail-page_edge.js'