2011-09-23 5 views
3

Ceci est un magasin Magento basé sur le thème Acumen de Themeforest.conflits jquery/prototype dans Magento

apparemment hors du bleu, des trucs jquery est maintenant ne fonctionne pas. Acumen a jquery chargement à travers un bloc statique magento et rien de tout cela n'a été touché.

Hier, je travaillais sur l'ajout du plug-in jquery.clearfield.js d'ajouter cette fonctionnalité à nos formes. Je ne modifiais pas les fichiers de base. J'ai chargé le plugin clearfield à travers un autre bloc statique et ajouté ce bloc statique à notre page CMS de contact.

je connecté au moment et devenais ouvert la session en valeurs pour le nom/email peuplant automatiquement, et à un moment je me suis connecté comme un client pour tester les valeurs de champ sans être connecté.

I était incapable de se connecter à cause des conflits jquery. J'ai parcouru le code, je n'arrive pas à trouver quelque chose qui a causé cela, et je n'ai modifié aucun fichier de base ou de thème.

Si vous affichez l'élément source/inspection sur l'une des pages, vous verrez les messages d'erreur prototype et jquery.

Toute idée/idée serait utile.

Merci.

+0

Édité pour supprimer l'ancien site URL de développement (plus, je ne travaille plus là, donc un peu ringard pour avoir encore ici) – pspahn

Répondre

10

Si vous souhaitez inclure le jquery et aucun code de conflit dans votre local.xml puis utilisez:

<default> 
    <reference name="head"> 
        <block type="core/text" name="google.cdn.jquery"> 
            <action method="setText"> 
                <text><![CDATA[<script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.4.2/jquery.min.js"></script><script type="text/javascript">jQuery.noConflict();</script>]]> 
                </text> 
            </action> 
        </block> 
    </reference> 
</default> 

Vive !!


Révision 2: Vous voudrez probablement modifier le page.xml et insérez les jquery.js et noConflict là-dedans, comme page.xml est chargé avant local.xml. Vous pouvez également utiliser local.xml pour supprimer tous les appels Prototype js précédents, puis les ajouter à nouveau. J'ai trouvé l'édition de page.xml pour être plus facile.

De plus, j'avais du mal à faire fonctionner Action setText pour le "var jQuery = jQuery.noConflict();", j'ai donc créé un fichier js distinct avec cette ligne. Pas génial, mais il est chargé juste après que le fichier js jQuery principal est chargé (et avant Prototype)

+0

VOUS ROCK! – kbariotis

1

Lors de l'exécution jQuery et Prototype ensemble, vous devez exécuter le mode « sans conflit ». Cela re-mappe le crochet de jQuery de "$" à "jQuery", permettant à Prototype de continuer à utiliser "$".

Si le plug-in nous utilisant « $ », il va être en utilisant la fonction de Prototype et va probablement planter. Vous devrez peut-être modifier manuellement le plugin et remplacer "$" par "jQuery".

+0

noConflict est déjà appelé. Ce qui est bizarre, c'est que je n'ai rien touché de tout ça, ça a commencé à apparaître et sur des pages qui n'ont aucune idée du plugin Clearfield. Je suis même retourné et défait les changements que j'ai faits et les erreurs montrent toujours. Par exemple, voir la page http://dev.thehipster.com.au/wink-nyc/april-blouse. Il montre jquery comme non défini. – pspahn

+0

Je ne pense pas que vous avez mis en place noconflict correctement. Il y a encore $ code que jQuery utilise. Vire source sur cette URL et vous le verrez au bas de la page: $ (document) .ready (function() { \t \t \t $ ('. Button_sizechart, # close-size-chart'). function (e) { –

+0

Je me sens comme cela explique le jQuery/$ mieux et le problème qui se passe réellement, donc je vous ai donné un –

4

Mise à jour: Ne pas utiliser ce plus, reportez-vous à la réponse par @MagePsycho ci-dessus.


Ce n'est pas une question de jQuery et Prototype en conflit, mais plutôt de ne pas avoir fait jQuery encore chargé lorsque vous appelez jQuery.noConflict().

Dans votre source, l'appel "jQuery.noConflict()" est juste dans la tête, mais jQuery lui-même est chargé à la toute fin de la page (sous le pied de page) via l'API Google.

Ma suggestion serait d'abandonner le google api, charger jQuery localement via XML par

<action method="addItem"><type>skin_js</type><name>js/jquery-1.x.x.min.js</name></action> 

et incorporer un appel jQuery.noConflict() juste avant la fin de jquery-1.xxmin.js lui-même .

+0

Ok, cela a aidé certains .J'ai oublié que ce thème utilise une charge jquery ainsi que un script d'exécution jquery, tous les deux configurés en blocs statiques J'ai placé les deux scripts dans page.xml de notre thème et les choses semblent fonctionner: page de produit JS fonctionne correctement, mais le bouton de la page de connexion n'est toujours pas fonctionnel J'ai mes soupçons quant à pourquoi: – pspahn