Ich habe eine bestimmte Fancybox.js-Datei, die ich am Ende aller in meiner local.xml enthaltenen JS-Dateien laden möchte
Wenn die Ladereihenfolge geändert werden kann, wie kann dann am Ende eine JS-Datei geladen (enthalten) werden?
Vielen Dank.
Ich habe eine bestimmte Fancybox.js-Datei, die ich am Ende aller in meiner local.xml enthaltenen JS-Dateien laden möchte
Wenn die Ladereihenfolge geändert werden kann, wie kann dann am Ende eine JS-Datei geladen (enthalten) werden?
Vielen Dank.
Antworten:
Sie können die Reihenfolge skin
oder js
Dateien in layout.xml sortieren, indem Sie das params-Element mit einem Namensattribut verwenden, wie in dieser Antwort erläutert: -
<action method="addJs"><!-- this will be shown second -->
<script>prototype/javascript1.js</script>
<params><![CDATA[name="js002_second"]]></params>
</action>
<action method="addJs"><!-- this will be shown first -->
<script>prototype/javascript2.js</script>
<params><![CDATA[name="js001_first"]]></params>
</action>
<params><![CDATA[name="zjs_last"]]></params>
sehen, was passiert (ich bin nicht 100% sicher). Melden Sie sich zurück, wenn dies nicht nach allen anderen geladen wird.
Ich denke nicht, dass Sie eine Sortierreihenfolge für die von Ihnen hinzugefügten js-Dateien angeben können (anscheinend können Sie die Antwort von @zigojacko sehen), aber ich denke, Sie können es ein bisschen anders machen, indem Sie dem head
Block einen untergeordneten Block hinzufügen .
Alle head
untergeordneten Elemente des Blocks werden nach den Elementen js und css gerendert.
Hier ist was Sie brauchen.
Fügen Sie dies einer Ihrer Layoutdateien hinzu.
<reference name="head">
<block type="core/template" name="fancy" as="fancy" template="fancybox/fancybox.phtml" />
</reference>
Erstellen Sie dann die Datei app/design/frontend/{package}/{theme}/template/fancybox/fancybox.phtml
mit dem folgenden Inhalt.
<script type="text/javascript" src="<?php echo Mage::getBaseUrl('js').'/fancybox.js'?>"></script>
Ich weiß, dass diese Frage alt ist, aber hier ist eine einfache Möglichkeit, Ihre Assets-Dateien mit einem einfachen benutzerdefinierten Modul (getestet) zu bestellen:
erstellen
app/etc/modules/Company_ReorderAssets.xml
und einfügen:
<?xml version="1.0"?>
<config>
<modules>
<Company_ReorderAssets>
<active>true</active>
<codePool>local</codePool>
</Company_ReorderAssets>
</modules>
</config>
erstellen app/code/local/Company/ReorderAssets/etc/config.xml
und einfügen:
<?xml version="1.0"?>
<config>
<modules>
<Company_ReorderAssets>
<version>1.0.0</version>
</Company_ReorderAssets>
</modules>
<global>
<blocks>
<class>Company_ReorderAssets_Block</class>
<page>
<rewrite>
<html_head>Company_ReorderAssets_Block_Page_Html_Head</html_head>
</rewrite>
</page>
</blocks>
</global>
</config>
erstellen ReorderAssets/Block/Page/Html/Head.php
und einfügen:
<?php
class Company_ReorderAssets_Block_Page_Html_Head extends Mage_Page_Block_Html_Head {
public function addItemFirst($type, $name, $params = null, $if = null, $cond = null) {
if ($type === 'skin_css' && empty($params)) {
$params = 'media="all"';
}
$firstElement = array();
$firstElement[$type . '/' . $name] = array(
'type' => $type,
'name' => $name,
'params' => $params,
'if' => $if,
'cond' => $cond,
);
$this->_data['items'] = array_merge($firstElement, $this->_data['items']);
return $this;
}
public function addItemAfter($after, $type, $name, $params = null, $if = null, $cond = null) {
if ($type === 'skin_css' && empty($params)) {
$params = 'media="all"';
}
$firstElement = array();
$firstElement[$type . '/' . $name] = array(
'type' => $type,
'name' => $name,
'params' => $params,
'if' => $if,
'cond' => $cond,
);
if (array_key_exists($after, $this->_data['items'])){
$pos = 1;
foreach ($this->_data['items'] as $key => $options){
if ($key == $after) :
break;
endif;
$pos +=1;
}
array_splice($this->_data['items'], $pos, 0, $firstElement);
}
return $this;
}
}
Hier erstellen wir unsere Funktionen addItemFirst
und addItemAfter
diese können so verwendet werden (in jeder layout.xml).
Beispiel für layout.xml:
<?xml version="1.0"?>
<layout version="0.1.0">
<default>
<reference name="head">
<action method="addItemFirst"><type>skin_js</type><script>js/jquery.js</script></action>
<action method="addItemAfter">
<after>skin_js/js/jquery.js</after>
<type>skin_js</type>
<script>custom_folder/javascript.js</script>
</action>
<action method="addItemAfter">
<after>skin_js/js/jquery.js</after>
<type>skin_js</type>
<script>custom_folder/another_javascript.js</script>
</action>
</reference>
</default>
</layout>
Bitte beachten Sie die skin_js in Ihrem Pfad.
Besonderer Dank geht an Koncz Szabolcs.