在 SilverStripe 中上传和使用自定义 JavaScript 文件

Upload and use custom JavaScript file in SilverStripe

我的项目有一个填字游戏。客户想要上传 JavaScript 个文件并更改模式。

如何制作上传文件并在网站前端包含JavaScript?该文件正在上传,但未显示在源代码中。

以下为 SilverStripe 3.1。

此示例将 JavaScript 文件上传添加到每个页面。在控制器的 init() 函数中,如果文件已上传,我们将其加载到页面中:

Page.php

class Page extends SiteTree {

    private static $has_one = array(
        'CustomJavascriptFile' => 'File'
    );

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

        $customJavascriptFile = UploadField::create('CustomJavascriptFile', 'Custom Javascript File');

        $customJavascriptFile->setFolderName('javascript');
        $customJavascriptFile->setAllowedExtensions(array('js'));

        $fields->addFieldToTab('Root.Javascript', $customJavascriptFile); 

        return $fields;
    }

}
class Page_Controller extends ContentController {

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

        if ($this->CustomJavascriptFileID) {
            Requirements::javascript($this->CustomJavascriptFile()->RelativeLink());
        }
    }
}

此方法为我们提供了每页一个自定义 JavaScript 文件。我们也可以将文件上传到配置设置,这样我们就可以上传一个文件,然后为整个站点加载。

首先我们需要扩展 SiteConfig。我们需要在 config.yml:

中声明扩展

mysite/_config/config.yml

---
Name: site
After: 'framework/*','cms/*'
---
SiteConfig:
  extensions:
     - CustomSiteConfig

CustomSiteConfig.php

class CustomSiteConfig extends DataExtension {

    private static $has_one = array(
        'CustomJavascriptFile' => 'File'
    );

    public function updateCMSFields(FieldList $fields) {

        $customJavascriptFile = UploadField::create('CustomJavascriptFile', 'Custom Javascript File');

        $customJavascriptFile->setFolderName('javascript');
        $customJavascriptFile->setAllowedExtensions(array('js'));

        $fields->addFieldToTab('Root.Javascript', $customJavascriptFile); 
    }
}

Page.php

class Page extends SiteTree {

}
class Page_Controller extends ContentController {

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

        $siteConfig = SiteConfig::current_site_config();

        if ($siteConfig->CustomJavascriptFileID) {
            Requirements::javascript($siteConfig->CustomJavascriptFile()->RelativeLink());
        }
    }
}