سید منصور فیروزه

پروژه رفع مشکل Conflict افزونه های JQuery دار با یکدیگر ...

8 پست در این موضوع

با سلام خدمت دوستان عزیز

راستش خیلی وقته که من شخصا با پرسش این قضیه و شنیدن پاسخ هایی که برابر با خط کشیدن روی صورت مساله هست مواجه میشم.

جوملا یا هر سیستم مدیریت محتوی تا زمانی قدرت خود را حفظ میکنه که دست طراح را توی هر مساله ای باز قرار بده .

برای مثال شاید افزونه ای مد نظر شما باید که شاید هیچگونه مدل مشابه ای را نداشته باشد یا اصلا شما بخواین فقط و فقط از همون افزونه استفاده کنین.

دلیلی نمیشه که بخاطر اینکه کانفلیکت رخ میده اون افزونه را ببوسیم بذاریم کنار .

خب از مقدمه بگذریم .

اصلی ترین چیزی که باید مورد بحث قرار بگیره دلیل و چیزیه که دامن به این مشکل میزنه :

افزونه هایی که از کتابخانه های Jquery و ... استفاده میکنن یا کتابخانه هارا بصورت آنلاین فراخوانی میکنن یا بصورت لوکال (در کنار افزونه) قرار میدن.

حالا بر فرض وقتی یک افزونه اسلایدر تصویر با یک افزونه دیگه که کتابخانه های مربوط به خود را فراخوانی میکنن و همزمان با هم Load میشن این برخورد پیش

میاد و موجب عدم کار یک یا هر دو افزونه (یا بیشتر) میشود .

راه حل های موجود :

1) استفاده از افزونه های JQuery++ Integrator یا JQuery Easy و یا SCJQuery که با نصب این پلاگین ها میتونین Jquery را یکباره در سایت خود از منابع آنلاین

یا لوکال فراخوانی کنین. بهتره بگم بنده شخصا با برخورد به این مشکلات و استفاده از این افزونه ها ، هیچ یک از مشکلاتم حل نشد !

2) روش دوم که فقط و فقط نظر شخصی بنده هست و سعی میشه روی اون کار بکنیم و از متخصصین در امر JQuery درخواست دارم تا این موضوع را پیگیری کنند

اینه که :

الف ) انجام عملی برای عدم لود شدن چندباره کتابخانه ها ، دستورات موجود در فایل اصلی هر افزونه که اتصال به کتابخانه را مشخص میکنند ( که افزونه های معرفی شده

در بالا تقریبا چنین کاری میکنن ، البته چون داینامیک هستن نمی تونن تمام نیازهارا برطرف کنن) .

ب) آموزش دادن روشی برای خصوصی سازی این مشکل در افزونه های موجود خودمان . در واقع روشی مطرح بشه که هر شخص حداقل قادر باشه افزونه های خودشو از این بابت

مدیریت کنه .

فک میکنم یکی از دستاوردهای نو جوملای ایران قرار بگیره این کار چون واقعا جای خالیش احساس میشه .

منتظر نظرات و پیشنهادات توسعه دهندگان هستیم ...

موفق و پایدار باشید.

Share this post


Link to post
Share on other sites
آموزش ووکامرس قالب جوملا قالب وردپرس قالب رایگان وردپرس قالب رایگان جوملا هاست نامحدود هاست جوملا هاست لاراول هاست وردپرس هاست ارزان هاست ربات تلگرام خرید دامنه آموزش ساخت ربات تلگرام با php آموزش لاراول آموزش cPanel آموزش php آموزش فرم ساز RSform آموزش ساخت ربات جذب ممبر آموزش ساخت ربات دوستیابی آموزش ساخت ربات فروشگاهی برای ووکامرس آموزش طراحی سایت داینامیک با php آموزش بخش پشتیبانی با rsticket

برای جلوگیری از عدم تداخل چند افزونه که از jQuery استفاده میکنند باید طراحی افزونه از تابع noConflict استفاده کنه تا مشکلی با سایر افزونه نداشته باشه

jQuery.noConflict();

Share this post


Link to post
Share on other sites

آقای طالبی خب اون افزونه ها هم دقیقا همین کد را اضافه میکنند که مشکل حل نمیشود

این ویجت کیت یکی از بزرگ ترین مثال هایش هست

یک کمکی بکنین

Share this post


Link to post
Share on other sites

تابعی که ابوالفضل جان گفتند یک تابع هست که میشه به شکل های دیگه استفاده کرد باهاش ... ببینید دلیل اصلی conflict در جی کوئری المان $ هست که باعث میشه به علت مشابه بودن در کدهای نوشته شده ، تداخل ایجاد میشه ... با این تابع و کمی تغییر آن شما میتونید این المان را به دلخواه تغییر نام بدید تا دیگه تداخل نداشته باشه ...

به این شکل :

این کد اصلی شماست :

$("div p").hide();


باید به این تبدیل کنید :

var j = jQuery.noConflict();

j("div p").hide();

حالا به جای j هرچی خواستی بذار . مهم نیست ...

Share this post


Link to post
Share on other sites

توجه : اگر شما 3 script نوشتید ( مثلا ... نه حتما 3 ... از یک بیشتر ، تداخل ایجاد میشه ) ، باید برای هر اسکریپت یک تابع جدا تعریف کنید تا دوباره تداخل نده .

Share this post


Link to post
Share on other sites

با سلام و درود بی کران خدمت دوستان و ممنون از توجه به این موضوع .

تابع noConflict را یکی دوتا از افزونه های مشکل دار من دارن ولی هیچ عملی نمیکنن ...

- آقای حبیب خدا این کد داخل فایل js اون افزونه یا توی index.php اش باید اضافه بشه ؟

سپاس ...

Share this post


Link to post
Share on other sites

جایی که اسکریپت js رو نوشتید .. اگر اسکریپت در head نوشته شده ، در اولین خط اسکریپت و اگر در فایلی جدا نوشته شده در اول فایل... این یک variable هست و حتما باید در بالاترین قسمت کد قرار بگیره تا تمام کدهای بعد رو شامل بشه . دقت کن که باید تمام $ ها رو به اون عبارتی که تعریف میکنی توی تابع ، تغییر بدی

Share this post


Link to post
Share on other sites

با سلام مجدد .

در حال حاضر من یک ماژول که توی Advanced Option هاش گزینه noConflict mode را داره را باز کردم . داحل تمامی فایل هاش هرچی کلمه noConflict ، Conflict را جستجو کردم

چیزی پیدا نشد .

1) آیا از توابع مشابه دیگری استفاده کرده ؟

2) در این کد شما

j("div p").hide();

Div p کدوم مکان میشه ؟ منظور div هست که ماژول توش قرار داره ؟

اگه میشه یه کم مشخص تر و باز تر یا بر فرض با یک مثال توضیح بدین .

من الان یک فایل دیگه هم باز کردم اصلا این چیزا داخلش نبود . فقط یه فایل mootools.js بود که ابتداش با این کد

if ($$.shared) {}

شروع میشه.

آیا همینه ؟

Share this post


Link to post
Share on other sites

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری