ECShopとjQueryの間の競合を解決します

ecshopはAJAXイベントとJSON解析モジュールをcommon / transport.jsに配置します。これには、実際には正常な独自のツールセットもあると言えます。

 
しかし正確には、jQueryと競合するJSONのさまざまなメソッドをカプセル化しながら、オブジェクトモデルが書き直されます。ご存知のとおり、jQueryはさまざまなJavaScriptオブジェクトを拡張します。
 
これらはすべて実際には非常に理解しやすく、それぞれに独自の理由があります。それは非常に自然なことですが、私たちのユーザーにとっては頭痛と無力感になります。 ECShopフォーラム 、多くの友人が、もともとこの質問を提起し、様々な方法を提案した。私はいくつかを試してみましたが、私はそれを自分自身をしなければならなかったので、それは、良いかさえ役に立ちませんでした。
 
ソリューションは、他の関数を使用する代わりに、おそらくecshoptoJSONString拡張メソッドをシールドし ました
 
おかずのお手入れは、詳細を書き留めてください。
 
 
1つは、デフォルトのjsファイルを変更する
 
 
1.最初にtransport.jsのコピーをコピーし、バックエンドで使用するために名前をtransport.org.jsに変更します
 
 
2. transport.jsのtoJSON関数行の数は、おそらく497〜737行です。
if(!Object.prototype.toJSONString){で始まるコード。
 
352の動作を変更します。
 
 legalParams =“ JSON =” + $ .toJSON(params);
 
408の動作を変更します。
 
結果= $ .evalJSON(result);
 
global.jsで次のコードをブロックします(10〜13行目)。
 
Object.prototype.extend = function(object)
{{
  Object.extend.apply(this、[this、object]);を返します。
}
3.index.jsファイルの44行目を次のように変更します。
 
var res = $ .evalJSON(結果);
 
 
4.common.jsファイルを変更します
34行目を次のように変更します。
 
Ajax.call( 'flow.php?step = add_to_cart'、 'goods =' + $ .toJSON(goods)、addToCartResponse、 'POST'、 'JSON');
 
行850を次のように変更します。
 
Ajax.call( 'flow.php?step = add_package_to_cart'、 'package_info =' + $ .toJSON(package_info)、addPackageToCartResponse、 'POST'、 'JSON');
 
行1056を次のように変更します。
 
Ajax.call( 'flow.php?step = add_to_cart'、 'goods =' + $ .toJSON(goods)、addToCartResponse、 'POST'、 'JSON');
 
5.compare.jsファイルを変更します
49行目を次のように変更します。
 
 this.data = $ .evalJSON(cookieValue);
 
67行目を次のように変更します。
 
 var obj = $ .evalJSON(cookieValue);
 
133行目を次のように変更します。
 
 document.setCookie(“ compareItems”、$ .toJSON(this.data));
 
6.global.jsファイルを変更します
16行目の関数名を変更します。function$ e()
114行目と126行目は両方とも次のように変更されています。varelement= $ e(element);
 
 
次に、バックグラウンドコール部分を変更します
 
 
 
7、
バックグラウンドヘッダーを変更して、transport.jsパスadmin / templates / pageheader.htmを導入します。9行目は次のように変更されます:{insert_scripts files =” ../ js / transport.org.js、common.js”}
 
admin / templates / menu.htm
151行目を{insert_scriptsfiles = "../ js / global.js、.. / js / utils.js、.. / js /transport.org.js"}に変更します。
 
 
 
  第三に、フロントエンドテンプレート部分を変更します
 
 
8. themes / default / library / page_header.lbiファイルを変更し、{insert_scripts files = 'transport.js、utils.js'}の上に次のコードを追加します。
{insert_scripts files = 'jquery.js、jquery.json.js'}
 
 
9、
library / comment_list.lbi
188行目:
 
 Ajax.call( 'comment.php'、 'cmt =' + $ .toJSON(cmt)、commentResponse、 'POST'、 'JSON');
 
 
10、compare.dwt
20行目:
 
var obj = $ .evalJSON(document.getCookie( "compareItems"));
 
24行目:
 
document.setCookie(“ compareItems”、$ .toJSON(obj));
 
 
11、flow.dwt
138行目:
 
Ajax.call( 'flow.php?step = add_to_cart'、 'goods =' + $ .toJSON(goods)、collect_to_flow_response、 'POST'、 'JSON');
 
199行目:
 
 Ajax.call( 'flow.php?step = add_to_cart'、 'goods =' + $ .toJSON(goods)、fittings_to_flow_response、 'POST'、 'JSON');
 
 
12、
 
brand.dwt
brand_list.dwt
category.dwt
exchange_list.dwt
search.dwt
 
といった:
{*スクリプトファイルを含む*}
{insert_scripts files = 'jquery.js、jquery.json.js'}
{insert_scripts files = 'common.js、global.js、compare.js'}



最近、ecshopモールシステムのテンプレートを入手しました。ホームページにjqueryのスライドと呼ばれていましたが、表示できませんでした。インターネットで検索したところ、jqueryとecshopのjson定義が矛盾していることがわかりました。これも難しいので、ECShopとjQueryの間の競合を解決する方法はどうですか?

jqueryプラグインを部分的に呼び出す

ホームページにjQueryを追加するだけの場合は、次の方法を使用することをお勧めします。ホームページテンプレートindex.dwtの下部にある本文の前にjqueryファイルと次のコードを導入します。

<script type = "text / javascript"> 
$(function(){ 
    window .__ Object_toJSONString = Object.prototype.toJSONString; 
    delete Object.prototype.toJSONString; 
}); 
</ script>

サイト全体のjQuery互換の変更

1.ファイルを変更します:/js/transport.js

ファイルの最後にコードを追加します。

if(Object.prototype.toJSONString){ 
    var oldToJSONString = Object.toJSONString; 
    Object.prototype.toJSONString = function(){ 
        if(arguments.length&amp; gt; 0){ 
            return false; 
        } else { 
            return oldToJSONString.apply(this、arguments); 
        } 
    } 
}

2.ファイルを変更します:/js/compare.js

this.timer = window.setInterval(this.relocation.bind(this)、50);

着替える:

this.timer = window.setInterval(this.bind(this.relocation、this)、50);

コードを見つける:

lastScrollY:0

コードの上の行にコードを追加します。

bind:function(obj1、obj2){ 
    return function(){ 
        obj1.apply(obj2、arguments); 
    } 
}

3.次のテンプレートファイルで、global.jsファイルを埋め込むコードを見つけ、埋め込まれているglobal.jsを削除します。

brand.dwt
brand_list.dwt
category.dwt
exchange_list.dwt
search.dwt

4.最新バージョンのjqueryライブラリファイルをテンプレートディレクトリにダウンロードします

/themes/temlatename/images/js/jquery.1.5.2.js

テンプレートに対応するディレクトリがない場合は、新しいディレクトリを作成してjqueryファイルにコピーするだけです。

5.ファイルを変更します。

/themes/temlatename/library/page_header.lbi

上部にコードを追加します。

<script src = "images / js / jquery.1.5.2.min.js" type = "text / javascript"> </ script> 
<script type = "text / javascript"> 
    var $$ = jQuery.noConflict() ; 
</ script>

将来、JQUERYオブジェクトを呼び出すには2つのドル記号$$を使用する必要があることに注意してください。$は同じ名前のECSHOPの元の関数との互換性の問題があるため、$は使用しないでください。

おすすめ

転載: blog.csdn.net/jjiale/article/details/45893901