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

时间:2015-01-02 14:20:36

标签: silverstripe

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

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

1 个答案:

答案 0 :(得分:0)

以下内容适用于SilverStripe 3.1。

此示例将JavaScript文件上载添加到每个页面。在Controller的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());
        }
    }
}