Javascript 创建一个js文件,其中包含dataobject-Sivlerstripe 3.1的变量
我已经编写了一个ModelAdmin来管理我网站的Imageslider。 ModelAdmin管理的一个数据对象是“SliderSettings”。在那里可以设置滑块行为 此处设置的变量应保存到js文件中,并包含在模板中。 我知道如果你使用控制器,你可以用你的变量创建一个内嵌的js。但是这不能用于Dataobjects并创建内联js,有没有一种方法可以用于我的Dataobject并创建一个文件而不是内联js 这是我的密码Javascript 创建一个js文件,其中包含dataobject-Sivlerstripe 3.1的变量,javascript,silverstripe,Javascript,Silverstripe,我已经编写了一个ModelAdmin来管理我网站的Imageslider。 ModelAdmin管理的一个数据对象是“SliderSettings”。在那里可以设置滑块行为 此处设置的变量应保存到js文件中,并包含在模板中。 我知道如果你使用控制器,你可以用你的变量创建一个内嵌的js。但是这不能用于Dataobjects并创建内联js,有没有一种方法可以用于我的Dataobject并创建一个文件而不是内联js 这是我的密码 提前谢谢你你能用那样的东西吗 public function init(
提前谢谢你你能用那样的东西吗
public function init()
{
parent::init();
$sliderSettings = DataObject::get_by_id('SliderSettings ', $this->ID);
if ( $sliderSettings )
{
$sliderSettings = Convert::raw2json( $sliderSettings->toMap() );
Requirements::customScript(<<<JS
var sliderSettings = $sliderSettings;
JS
);
}
}
这将使模板中的
$SliderSettings
变量可用,您可以在任何地方使用。例如,在头中包含JSON(可能不是最好的…),或者在任何其他脚本之前,比如sovar sliderSetting=$SliderSettings代码>你能用这样的东西吗
public function init()
{
parent::init();
$sliderSettings = DataObject::get_by_id('SliderSettings ', $this->ID);
if ( $sliderSettings )
{
$sliderSettings = Convert::raw2json( $sliderSettings->toMap() );
Requirements::customScript(<<<JS
var sliderSettings = $sliderSettings;
JS
);
}
}
这将使模板中的$SliderSettings
变量可用,您可以在任何地方使用。例如,在头中包含JSON(可能不是最好的…),或者在任何其他脚本之前,比如sovar sliderSetting=$SliderSettings代码>我强烈建议不要编写文件,相反,我建议使用Requirements::customScript()
是的,如果你把它放在一个不会被调用的地方(在DataObject中),那就没用了
因此,让我们把它放在一个有意义的地方,例如页面_Controller->init(),
当然,然后我们需要获取SliderSettings对象,这可以通过SliderSettings::get()->First()完成,这将为您提供数据库中的第一个SliderSettings对象,如果您想要获取一个特定的对象,您还可以通过ID:SliderSettings::get()->byID(42)获取它
类页面\u控制器扩展ContentController{
公共函数init(){
父::init();
$sliderSettings=sliderSettings::get()->First();
如果($sliderSettings){
$sliderSettings=Convert::array2json(数组(
“SliderEffect”=>$sliderSettings->SliderEffect,
“SliderCaptions”=>$sliderSettings->SliderCaptions,
“SliderAndom”=>$sliderSettings->SliderAndom,
“SliderTicker”=>$sliderSettings->SliderTicker,
“SliderPage”=>$sliderSettings->SliderPage,
“SliderControl”=>$sliderSettings->SliderControl,
“SliderStart”=>$sliderSettings->SliderStart,
“SliderAdaptive”=>$sliderSettings->SliderAdaptive,
“SliderSpeed”=>$sliderSettings->SliderSpeed,
“SliderPause”=>$sliderSettings->SliderPause,
));
要求::自定义脚本(“var sliderSettings=$sliderSettings;”;
//Requirements::customScript将把它放在HTML的底部,如果您需要它放在其他JS文件的上面,您可以通过以下解决方法/破解将它放在标题中:(如果您使用此方法,请删除Requirements::customScript行)
//要求:插入标题标签(“var sliderSettings=$sliderSettings;”;
}
}
}
就是这样,现在您应该有一个名为sliderSettings
的变量在javascript中可用。
此变量是一个对象,因此您可以按如下方式访问它:sliderSettings.SliderEffect
或sliderSettings['SliderEffect']
注意:变量将位于JS文件之后,因此它不会直接在代码中使用,但您可以在$(文档)中访问它。ready(function(){})
我强烈建议不要编写文件,相反,我建议使用Requirements::customScript()
是的,如果你把它放在一个不会被调用的地方(在DataObject中),那就没用了
因此,让我们把它放在一个有意义的地方,例如页面_Controller->init(),
当然,然后我们需要获取SliderSettings对象,这可以通过SliderSettings::get()->First()完成,这将为您提供数据库中的第一个SliderSettings对象,如果您想要获取一个特定的对象,您还可以通过ID:SliderSettings::get()->byID(42)获取它
类页面\u控制器扩展ContentController{
公共函数init(){
父::init();
$sliderSettings=sliderSettings::get()->First();
如果($sliderSettings){
$sliderSettings=Convert::array2json(数组(
“SliderEffect”=>$sliderSettings->SliderEffect,
“SliderCaptions”=>$sliderSettings->SliderCaptions,
“SliderAndom”=>$sliderSettings->SliderAndom,
“SliderTicker”=>$sliderSettings->SliderTicker,
“SliderPage”=>$sliderSettings->SliderPage,
“SliderControl”=>$sliderSettings->SliderControl,
“SliderStart”=>$sliderSettings->SliderStart,
“SliderAdaptive”=>$sliderSettings->SliderAdaptive,
“SliderSpeed”=>$sliderSettings->SliderSpeed,
“SliderPause”=>$sliderSettings->SliderPause,
));
要求::自定义脚本(“var sliderSettings=$sliderSettings;”;
//Requirements::customScript将把它放在HTML的底部,如果您需要它放在其他JS文件的上面,您可以通过以下解决方法/破解将它放在标题中:(如果您使用此方法,请删除Requirements::customScript行)
//要求:插入标题标签(“var sliderSettings=$sliderSettings;”;
}
}
}
就是这样,现在您应该有一个名为sliderSettings
的变量在javascript中可用。
此变量是一个对象,因此您可以按如下方式访问它:sliderSettings.SliderEffect
或sliderSettings['SliderEffect']
注意:变量将为AFT
class Page_Controller extends ContentController {
public function init() {
parent::init();
$sliderSettings = SliderSettings::get()->First();
if ($sliderSettings) {
$sliderSettings = Convert::array2json(array(
'SliderEffect' => $sliderSettings->SliderEffect,
'SliderCaptions' => $sliderSettings->SliderCaptions,
'SliderRandom' => $sliderSettings->SliderRandom,
'SliderTicker' => $sliderSettings->SliderTicker,
'SliderPager' => $sliderSettings->SliderPager,
'SliderControls' => $sliderSettings->SliderControls,
'SliderStart' => $sliderSettings->SliderStart,
'SliderAdaptive' => $sliderSettings->SliderAdaptive,
'SliderSpeed' => $sliderSettings->SliderSpeed,
'SliderPause' => $sliderSettings->SliderPause,
));
Requirements::customScript("var sliderSettings = $sliderSettings;");
// Requirements::customScript will put it at the bottom of the HTML, if you need it above the other JS files, you can put it into the header with the following workaround/hack: (if you use this, remove the Requirements::customScript line)
// Requirements::insertHeadTags("<script type='text/javascript'>var sliderSettings = $sliderSettings;</script>");
}
}
}