我与Zend框架2工作。
在我的布局文件我注入一些像这样的JavaScript文件:
$this->InlineScript()
->appendFile($this->basePath() . '/js/myfile.js');
echo $this->InlineScript();
现在我想,使其追加到将InlineScript集结束时从视图中注入一些JavaScript。
所以我在我的动作视图写了这个:
<?php $this->InlineScript()->offsetSetFile(100,$this->basePath() . '/js/xyz.js'); ?>
但结果是XYZ文件首先加载在渲染视图。
我与Zend框架2.0.5工作
是否有人可以给我一个提醒如何管理呢?
只是为了配合这个老问题:
内视图:在页面顶部的附加文件 :
$this->headScript()->appendFile('/js/filename.js');
在顶部的页追加一个脚本
$this->headScript()->appendScript('alert(1)');
在页面的底部附加一个文件 :
$this->inlineScript()->appendFile('/js/filename.js');
在页面的底部附加一个脚本
$this->inlineScript()->appendScript('alert(1)');
内部控制器/行动
使用服务定位,其余是一样的抢用HeadScript
$this->getServiceLocator()
->get('viewhelpermanager')
->get('HeadScript')->appendScript('alert(1)'); //or ->appendFile('/js/filename.js');
如果你知道如何获得inlineScrip动作中,请告诉我们。
这似乎是通过使用引起appendFile
您的布局中。 您的视图脚本首先运行在其中添加脚本到堆栈中。 然后,运行您的布局时,你再追加,使得从布局的最后一个脚本。 尝试使用prependScript
在布局文件,使之从您的布局脚本不追加到已经添加脚本。
我知道这是一个老问题,但这个解释可能是真正有用的(我毁了我的头,这个问题有时候前..)
让我们先从一个案例:
你有4个脚本在页面中添加。
2在您在您的视图布局和2定义。
让我们为它们命名SCRIPT1,SCRIPT2,script3和script4(最后的命令应该尊重numerotation)。
布局:
<?php
$this->inlineScript()->prependFile('script2.js')
->prependFile('script1.js');
查看:
<?php
$this->inlineScript()->appendFile('script3.js')
->appendFile('script4.js');
结果:
<script type="text/javascript" src="/script1.js"></script>
<script type="text/javascript" src="/script2.js"></script>
<script type="text/javascript" src="/script3.js"></script>
<script type="text/javascript" src="/script4.js"></script>
发生了什么 ?
首先,该视图被处理,脚本(在视图中)的appened在堆栈中,因此我们有:
script3
附加:
[script3.js] <--
script4
附加:
[script2.js]
[script3.js] <--
然后,布局被处理,和脚本都加上以相反的顺序,以便:
script2
被前置:
[script2.js] <--
[script3.js]
[script4.js]
script1
被前置:
[script1.js] <--
[script2.js]
[script3.js]
[script4.js]
我工作围绕着一个问题:“ 如果你知道如何获得inlineScrip动作中,请让我们知道 ”,得到了一个漂亮的解决方案,并决定将它张贴在这里:
- 创建一个小班在其他地方调用组所有内嵌脚本,并设置其格式正确通过layout.phtml模板呈现
- 定义条件插入点在最后一页注入全脚本
(我取代2016年4月5日,因为原来的输入错误代码)
<?PHP //文件名:/module/MyTools/src/MyTools/Library/Js2ls.php 命名空间铭佑\图书馆; 抽象类Js2l { 受保护的静态$ inLineJs; 受保护的静态$ inLineVars; 公共静态功能addSetting($ settingkey,$ settingvalue) { 如果(!自:: isSettingThere($ settingkey)){ 自:: $ inLineVars [$ settingkey] = $ settingvalue; } } 公共静态功能addScript($脚本,$ scriptkey = NULL) { 如果(!$ scriptkey){ 如果(!自:: $ inLineJs){ 自:: $ inLineJs =阵列(); 自:: $ inLineJs [] = $脚本; } ELSEIF(!(in_array($脚本,自:: $ inLineJs))){ 自:: $ inLineJs [] = $脚本; } } ELSEIF(!isset(个体经营:: $ inLineJs [$ scriptkey])){ 自:: $ inLineJs [$ scriptkey] = $脚本; } } 受保护的静态函数appendItemToSetting($当前,$项目) { 如果($项目== $电流){$返回电流; } 如果(is_array($流)){ 如果(!in_array($项目,$流)){ $电流[] = $项; } 返回$电流; }其他{ 返回[$当前,$项目] } } 公共静态功能extendSetting($ settingkey,$ settingvalue) { $电流=自:: getSetting($ settingkey); 如果($电流){ $新=自:: appendItemToSetting($当前,$ settingvalue); 如果($新!== $电流){ 自:: $ inLineVars [$ settingkey] = $新; } }其他{ 自:: addSetting($ settingkey,$ settingvalue); } } 公共静态功能getSetting($ settingkey){ 如果(自:: $ inLineVars){ $销售= isset(个体经营:: $ inLineVars [$ settingkey])? 自:: $ inLineVars [$ settingkey]:NULL; 返回$销售; }其他{ 返回NULL; } } 公共静态功能getScripts(){ 返回self :: $ inLineJs; } 公共静态功能的getSettings(){ 返回self :: $ inLineVars; } 公共静态功能iskeyedArray($阵列) { 从$ = FALSE; $键= array_keys($阵列); 的foreach($键为$键){ 如果(!is_numeric($键)){ 从$ = TRUE; 打破; } } 返回$出; } 受保护的静态函数renderInLineJs() { 返回(个体经营:: $ inLineJs)? 爆( “\ n”,自:: $ inLineJs): ''; } 受保护的静态函数renderInLineVars($ JS) { 从$ = ''; 如果(is_array($ JS)){ $项= []; 的foreach($ JS作为$密钥=> $值){ $项[] = ' “'。$键。”:“.self :: renderJsItem($值); } $出=破灭( '',$项目)。 } 返回$出; } 受保护的静态函数renderJsItem($项目) { 如果(is_scalar($项目)){ 回报(is_numeric($项目))? '。$项目: “'$项目。 ''”; } ELSEIF(is_array($项目)){ 如果(自:: iskeyedArray($项目)){ 返回 '{'。 自:: renderInLineVars($项目) '}'。 }其他{ 收益率(计数($项目)> 0)? '[ “' .implode( ' ”“'。,$项目)” ']': '[]'; } }其他{ 返回 '[]'; } } 受保护的静态函数isSettingThere($ settingkey) { 回报(isset(个体经营:: $ inLineVars [$ settingkey]))? 真假; } 公共静态功能的ToString() { $前缀= “\ n” 个 'jQuery.extend(MyTools.settings,{'。 $后缀= '});' “\ n” 个。 $设置=自:: renderInLineVars(个体经营:: $ inLineVars); $ jsSettings =($设置)? $前缀$设置$后缀:。 ''; $ jsMethods =自:: renderInLineJs(); 回报($ jsMethods)? $ jsSettings “\ n” $ jsMethods:。$ jsSettings; } } ?> </代码> 白衣定义您可以添加,其他地方,全局变量通过脚本来使用的代码的全局变量这个类: <代码> <?PHP //你在别的地方在你的PHP代码。 写 使用铭佑\图书馆\ Js2l Js2l :: addSetting($ settingkey,$ settingvalue); // 要么 Js2l :: extendSetting($ VARIABLENAME,$值); // $ settingvalue和$值可以是标量ö数组值 Js2l :: addScript($ yourJavaScript,$ akeyToAvoidDuplicates); ?> </代码> 该类知道如何设置代码的格式,所以你可以把它在模板中被注入 <代码> <?PHP //文件名:/module/Application/view/application/layout/layout.phtml ?> <?PHP //这个地方调用脚本块之前 使用铭佑\图书馆\ Js2l $ mysript = Js2l ::的ToString(); 如果($ mysript){ 回声$这 - >将InlineScript() - > appendScript($ myscript)的; } </代码>
现在你有一个有用的插入您的需求,内嵌脚本。
文章来源: Append Javascript File to the end of the InlineScript Collection from child view