Javascript conflict در جوملا   

از دانشنامه جوملا فارسی - مامبو فارسی
پرش به: ناوبری، جستجو

این یک حقیقت است که جوملا فرآیند راه اندازی یک وب سایت را تسهیل کرده و به همان اندازه که اجرای یک پروژه وب سایت توسط جوملا لذت بخش است بروز یک اختلال در کتابخانه‌ها JavaScript می‌تواند کارکرد وب سایت را مختل کند و لذت پیاده سازی یک پروژه وب سایت را به کام شما تلخ کند (توجه داشته باشید که این موضوع برای تمام سیستم‌های مدیریت محتوا ممکن است پیش بیاید و هیچ ارتباطی به جوملا ندارد).

یکی دیگر از قابلیت‌هایی که جوملا در اخیتار ما قرار می‌دهد امکان نصب و استفاده از افزونه‌های متعدد است که این افزونه‌ها ممکن است از کتابخانه‌های JavaScript مختلف مانند Jquery , Mootools و ... استفاده کنند این کتابخانه‌ها توسط توسعه دهندگان مختلف با سلایق مختلف ایجاد شده و ممکن است از هر کدام از کتابخانه‌هایی که به آن اشاره کردیم به اشکال گوناگون و در نسخه‌های متفاوت استفاده شوند لذا بروز پدیده JavaScript Conflict بسیار بدیهی به نظر می‌رسد اما در این مقاله سعی داریم تاحد ممکن از بروز JavaScript Conflict در سایت‌های جوملایی جلوگیری کنیم.


Joomla-tutorials.png


[ویرایش]

استفاده از نسخه‌های متفاوت کتابخانه Mootools و کتابخانه Jquery در یک وب سایت می‌تواند اختلالات زیادی ایجاد کند. حتی زمانیکه شما از چند کتابخانه هم نوع با یک نسخه مشترک که توسط توسعه دهندگان متفاوتی ایجاد شده‌اند در یک وب سایت استفاده می‌کنید امکان بروز JavaScript Conflict وجود خواهد داشت.


Javascript-conflict.png


هنگامیکه وب سایت شما آنطور که انتظار دارید کار نمی‌کند، یعنی یک اختلال در یک جا بروز کرده (دلیل هر اختلال لزوما JavaScript Conflict نیست. ما در این مقاله فقط JavaScript Conflict بررسی می‌کنیم.)

حال چگونه باید بررسی کنیم که این اختلال JavaScript Conflict است و اینکه در کجای برنامه این مشکل پدید آمده است. افزونه FireBug این مشکل را حل کرده است در رابطه با FireBug باید خدمتتان عرض کنم که نسخه مربوط اکثر مرورگرهای firebug در دسترس است. از طریق قسمت console در فایرباگ میتوانیم مشکل JavaScript Conflict را بررسی کنیم.

اگر وب سایت شما دارای خطای JavaScript‌ای باشد این ابزار ضمن ارائه برخی جزئیات دقیقا آن خطا را به شما نمایش می‌دهد بوسیله این ابزار می‌توان نام فایل و حتی شماره خطی که باعث بروز JavaScript Conflict شده است را پیدا کنیم.


Js-conflict.png


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

  • پس از رویت پیغام خطا باید قالب فعال سایت تان به قالب پیش فرض جوملا تنظیم کنید. سپس بررسی کنید بازهم پیغام خطا پابرجاست یا خیر؟
  • اگر خطا همچنان وجود داشت باید کلیه افزونه‌هایی که خودتان در سایت نصب کردید را غیرفعال کنید تک تک اقدام به فعال کردن آن کنید و در هر مرحله چک کنید پیغام خطا وجود دارد یا خیر.

از آنجایی که علل بروز خطاهای جاوا اسکریپت می‌تواند مختلف باشد هیچ راه حل مشخصی برای حل یکباره کلیه پیغام‌های خطا نمی‌توان ارائه کرد اما برای مشکل 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 قالب تان استفاده نمایید.



جمع آوری و ترجمه توسط :شهاب مطاع پور

Indent support.png
هر گونه سوال و یا مشکلی در این رابطه دارید، می‌توانید در انجمن تخصصی تیم جوملا فارسی جستجو کرده و در صورت عدم دریافت نتیجه مورد نظر، سوال جدیدی را مطرح کنید.
8.pngاستفاده از مطالب دانشنامه جوملا فارسی - مامبو فارسی با ذکر منبع ( دانشنامه جوملا فارسی ) و لینک مستقیم به http://docs.joomlafarsi.com بلامانع است.