附加JavaScript文件到将InlineScript收集的从子视图结束(Append Javas

2019-08-16 20:08发布

我与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工作

是否有人可以给我一个提醒如何管理呢?

Answer 1:

只是为了配合这个老问题:

内视图:在页面顶部的附加文件

$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动作中,请告诉我们。



Answer 2:

这似乎是通过使用引起appendFile您的布局中。 您的视图脚本首先运行在其中添加脚本到堆栈中。 然后,运行您的布局时,你再追加,使得从布局的最后一个脚本。 尝试使用prependScript在布局文件,使之从您的布局脚本不追加到已经添加脚本。



Answer 3:

我知道这是一个老问题,但这个解释可能是真正有用的(我毁了我的头,这个问题有时候前..)

让我们先从一个案例:

你有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]


Answer 4:

我工作围绕着一个问题:“ 如果你知道如何获得inlineScrip动作中,请让我们知道 ”,得到了一个漂亮的解决方案,并决定将它张贴在这里:

  1. 创建一个小班在其他地方调用组所有内嵌脚本,并设置其格式正确通过layout.phtml模板呈现
  2. 定义条件插入点在最后一页注入全脚本

(我取代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