我的项目有一个填字游戏。客户端希望上传JavaScript文件并更改模式。
如何制作上传文件并将JavaScript包含在网站的前端?该文件已上传,但未显示在源代码中。
答案 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());
}
}
}