Javascript conflict در جوملا
این یک حقیقت است که جوملا فرآیند راه اندازی یک وب سایت را تسهیل کرده و به همان اندازه که اجرای یک پروژه وب سایت توسط جوملا لذت بخش است بروز یک اختلال در کتابخانه ها JavaScript میتواند کارکرد وب سایت را مختل کند و لذت پیاده سازی یک پروژه وب سایت را به کام شما تلخ کند (توجه داشته باشید که این موضوع برای تمام سیستم های مدیریت محتوا ممکن است پیش بیاید و هیچ ارتباطی به جوملا ندارد).
یکی دیگر از قابلیت هایی که جوملا در اخیتار ما قرار میدهد امکان نصب و استفاده از افزونه های متعدد است که این افزونه ها ممکن است از کتابخانه های JavaScript مختلف مانند Jquery , Mootools و ... استفاده کنند این کتابخانه ها توسط توسعه دهندگان مختلف با سلایق مختلف ایجاد شده و ممکن است از هرکدام از کتابخانه هایی که به آن اشاره کردیم به اشکال گوناگون و در نسخه های متفاوت استفاده شوند لذا بروز پدده JavaScript Conflict بسیار بدیهی به نظر می رسد اما در این مقاله سعی داریم تاحد ممکن از بروز JavaScript Conflict در سایت های جوملایی جلوگیری کنیم.
بررسی عوامل بروز JavaScript Conflict
استفاده از نسخه های متفاوت کتابخانه Mootools و کتابخانه Jquery در یک وب سایت میتواند اختلالات زیادی ایجاد کند. حتی زمانیکه شما از چند کتابخانه هم نوع با یک نسخه مشترک که توسط توسعه دهندگان متفاوتی ایجاد شده اند در یک وب سایت استفاده میکنید امکان بروز JavaScript Conflict وجود خواهد داشت.
نحوه تشخیص JavaScript Conflict
هنگامیکه وب سایت شما آنطور که انتظار دارید کار نمیکند, یعنی یک اختلال در یک جا بروز کرده (دلیل هر اختلال لزوما JavaScript Conflict نیست ما در این مقاله فقط JavaScript Conflict بررسی میکنیم.) حال چگونه باید بررسی کنیم که این اختلال JavaScript Conflict است و اینکه در کجای برنامه این مشکل پدید آمده است. افزونه FireBug این مشکل را حل کرده است در رابطه با FireBug باید خدمتتان عرض کنم که نسخه مربوط اکثر مرورگرهای firebug در دسترس است. از طریق قسمت console در فایرباگ میتوانیم مشکل JavaScript Conflict را بررسی کنیم.
اگر وب سایت شما دراری خطای JavaScript ای باشد این ابزار ضمن ارائه برخی جزییات دقیقا آن خطا را به شما نمایش میدهد بوسیله این ابزار میتوان نام فایل و حتی شماره خطی که باعث بروز JavaScript Conflict شده است را پیدا کنیم.
همانطور که در تصویر بالا مشخص شده شما میتوانید فایل مربوط به افزونه ای که باعث بروز اختلال در سایت تان شده است را تشخیص دهید. اگر استفاده از firebug و جزئیات ارائه توسط آن برای شما قابل استفاده نبود باید مراحل زیر را به ترتیب انجام دهید. این روشی است که قبل فراگیر شدن فایرباگ مرسوم بوده.
- پس از رویت پیغام خطا باید قالب فعال سایت تان به قالب پیش فرض جوملا تنظیم کنید. سپس بررسی کنید ببینید بازهم پیغام خطا پابرجاست یا خیر؟
- اگر خطا همچنان وجود داشت باید کلیه افزونه هایی که خودتان در سایت نصب کردید را غیرفعال کنید تک تک اقدام به فعال کردن آن کنید و در هر مرحله چک کنید ببینید پیغام خطا وجود دارد یا خیر.
چگونه JavaScript Conflict را برطرف کنیم ؟
از آنجایی علل بروز خطاهای جاوا اسکریپت می تواند مختلف باشد هیچ راه حل مشخصی برای حل یکباره کلیه پیغام های خطا نمی توان ارائه کرد اما برای مشکل JavaScript Conflict یک راه حل وجود دارد که به ما کمک میکند تا با انجام آن روند اجرای سایت را مجددا فعال کنیم و(اصطلاحا سایت بالا بیاوریم) تا مشکل را ریشه ای حل کنیم.
به این منظور باید از حالت JQuery noConflict استفاده کنیم.
تمام پلاگین ها و کتابخانه های موجود در Jquery از namespace جی کوئری (JQuery) استفاده میکنند و تمام آبجکت های global در JQuery namespace ذخیره می شوند و این موضوع باعث ایجاد اختلال بین کتابخانه JQuery و سایر کتابخانه ها مانند prototype.js و MooToolsو ... میشود یکی از راههای اجتناب از این اختلال استفاده از حالت JQueryNoConflict است به این شکل که در صفحه بلافاصله قبل از لود شدن سایر توابع و قبل از اینکه از JQuery در صفحه تان استفاده کنید باید این حالت را تعریف کنید.
<source lang="php" >
<script src="/prototype.js"></script>
<script src="/jquery.js"></script>
<script>
jQuery.noConflict();
jQuery( document ).ready(function( $ ) { // You can use the locally-scoped $ in here as an alias to jQuery. $( "div" ).hide(); });
// The $ variable in the global scope has the prototype.js meaning. window.onload = function(){ var mainDiv = $( "main" ); }
</script> </source> در حقیقت از JQuery و $ به صورت لوکال استفاده میکنید تا از بروز تداخل جلوگیری به عمل آورید. این کد را می توانید در افزونه ای که باعث ایجاد تداخل می شود استفاده کنید به نحویکه در ابتدا این فایل js اجرا شود . به عنوان مثال اگر قالبی که استفاده میکنید JavaScript Conflict دارد کد بالا را باید در تگ head فایل Index.php قالب تان استفاده نمایید.
جمع آوری و ترجمه توسط :شهاب مطاع پور
|
|


