Réorganiser Magento JavaScript Comprend (addJs)
Je vais garder ça simple.... sur mes pages produits j'ai besoin d'enlever la prototype.js fichier et le remplacer par la dernière version de prototype. La mesure à l'aide de local.xml j'ai remplacé avec succès à l'aide de ceci:
<action method="removeItem"><type>js</type><name>prototype/prototype.js</name></action>
<action method="addJs"><script>prototype/prototype-new.js</script></action>
Le problème est que maintenant prototype est chargé en dessous de tout autre comprend ce qui l'empêche de travailler.
Est-il un moyen de réglage de la commande de l'inclure l'utilisation de JavaScript local.xml sans avoir à supprimer et ajouter tous les fichiers de nouveau?
OriginalL'auteur Adam Moss | 2011-09-06
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser les paramètres de l'élément, avec des "data-groupe" attribut HTML, Magento va mettre des articles avec "params" set après les éléments sans "params" ensemble. Vous pouvez utiliser local.xml dans votre thème s'assurer que l'ordre de ces éléments (je vous conseille de laisser Magento ajouter ses fichiers standard en premier):
L'ordre dans lequel les éléments avec "params" set sont rendus dans seulement déterminé par l'ordre dans lequel les actions sont exécutées. Les éléments sont rendus regroupés par la valeur de "params", donc une fois que le groupe "js001" est défini par la première action (javascript2.js), actions successives avec le même nom de groupe s'ajoute à ce groupe, etc.
Dans l'exemple ci-dessus, l'ordre de rendu sera:
Éléments ajoutés à l'aide de addItem addJs, addCss, etc, sont taraudés de la même manière, mais ils diffèrent (et super-regroupés en conséquence) par type (voir ci-dessous), chaque groupe de super-groupes à l'interne commandé comme expliqué ci-dessus:
Bonne solution, mais ne fonctionne qu'à l'intérieur de la même zone, si vous voulez forcer un include en haut ou en bas de chacun d'eux, vous ne pouvez pas. Au moins, sauf si vous placez un
krsort($items)
en &_prepareStaticAndSkinElements de mage/page/bloc/html/headest-ce possible avec la méthode addItem? J'ai js dans ma peau de dossier. Je ne peux pas obtenir le droit de syntaxe si c'est possible - des idées?
Je ne crois pas que cela ait un quelconque effet. @L-barker a fait remarquer, il ajoute le paramètre de la balise de script, mais il ne permet pas de trier à l'aide de ce paramètre. Je traversai le code et il n'y a pas de tri qui se passe. Je pense que vous avez eu de la chance dans vos fichiers qui est arrivé à être inclus dans l'ordre que vous voulez, mais il n'y a aucune garantie de ce que les. Je ne sais pas pourquoi ils ne prennent pas en charge "après="" et "avant="" paramètres comme avec les mises en page. Je vais continuer à chercher une solution.
il a d'effet (voir le code de Mage_Page_Block_Html_Head::getCssJsHtml() la méthode), mais j'ai peur de ne pas exactement comme je l'ai initialement expliqué. PHP garde tableau associatif éléments dans le même ordre que ajoutée (à moins que le tri est effectué), mais le code getCssJsHtml groupes d'articles par la valeur <paramètres>. Veuillez voir la nouvelle explication, qui doit être plus précise et complète. Et merci pour vous commentaires!
OriginalL'auteur Dmitri Sologoubenko
Mage_Page_Block_Html_Head $_data; détient le tableau de ces éléments, donc je suppose que vous pouvez le filtrer pour votre propre bien. Méthodes par défaut ne permet pas de définir l'ordre des éléments ajoutés.
OriginalL'auteur Anton S
Je me rends compte que ce post est assez vieux, mais je suis tombé sur elle alors que des recherches sur ce problème, alors je me suis dit pourquoi pas.
Ne sais pas si c'est la solution la plus élégante, mais son travail suffisamment bien pour nous.
En gros, j'ai créé un nouveau bloc dans ma
local.xml
comme ceci:<block type="core/template" name="prehead" template="page/html/prehead/main.phtml" />
Puis juste modifié mon principal des mises en page (1column.phtml et amis) pour contenir ceci:
<head>
<?php echo $this->getBlockHtml('prehead') ?>
<?php echo $this->getChildHtml('head') ?>
</head>
Dans
main.phtml
- je ajouter mon JS que je veux charger première<script type='text/javascript' src='<?php echo $this->getSkinUrl('js/require.js', array('_secure'=>true)); ?>'></script>
<script type='text/javascript' src='<?php echo $this->getSkinUrl('js/main.js', array('_secure'=>true)); ?>'></script>
C'est pratique pour nous car elle nous permet encore de changer le main.js selon sur quelle page on est sur de faire quelque chose comme cela dans
local.xml
:<checkout_onestep_index translate="label">
<label>One Step Checkout</label>
<block type="core/template" name="prehead" template="page/html/prehead/checkout.phtml" />
</checkout_onestep_index>
Espère que cela aide quelqu'un qui arrive de tomber sur ce.
-Ken
OriginalL'auteur Ken Koch
Depuis local.xml est chargé en dernier lieu par le système magento, de sorte que le xml mentionné il y a fusionné à la dernière. Que la raison peut être que votre nouveau prototype est chargée ci-dessous d'autres scripts.
Alternativement, vous pouvez remplacer la Mage_Page_Block_Html_Head::getCssJsHtml() méthode et de jouer avec elle.
Grâce
OriginalL'auteur
Ok, voici ma solution.
La première copie app\code\core\Mage\Page\Block\Html\head.php pour app\code\local\Mage\Page\Block\Html\head.php
Puis ajouter cette fonction dans le fichier :
Maintenant dans votre .XML fichier de mise en page comprennent une ligne comme ceci :
Les paramètres sont exactement comme pour removeItem MAIS maintenant, le remplacer le fichier sera injecté dans la liste dans le même endroit que le fichier d'origine. Il hérite également de la même param, si et cond valeurs. Veuillez utiliser ce code avec soin car j'ai seulement écrit et fait des tests de base sur elle!
OriginalL'auteur Barny Shergold
Je pense que Barny Shergold solution est la plus correcte, mais le commentaire d'éviter de modification de fichiers de base est correcte. Pour avoir le meilleur des deux mondes, vous pouvez mettre en œuvre Barny de la solution dans un module qui s'étend de la Mage_Page_Block_Html_Head classe comme ceci:
Yourcompany/Layouthelper/etc/config.xml
Yourcompany/Layouthelper/Block/Html/Head.php
OriginalL'auteur Eric Seastrand
jquery conflit avec Prototype dans magento:
Solution la plus simple est d'ajouter à la fin de votre principal le fichier jquery.
Ou créer votre propre fichier js et ajoutez cette ligne et également inclure ce fichier après le principal js.
OriginalL'auteur Hassan Ali Shahzad