بررسی و آموزش رفع خطای 0 - invalid address در جوملا 3.5
یکی از خطاهایی که اخیرا بسیار رایج شده و در بسیاری از سایتهای جوملایی که با نسخه 3.5 جوملا کار میکنند مشاهده میشود خطای 0 - invalid address هست که این خطا به دلیل تغییراتی که در تابع ارسال ایمیل در جوملا 3.5 داده شده است رخ میدهد. متدی که باعث رخ دادن این خطا میشود متد addReplyTo هست که از متدهای ارسال ایمیل در جوملا میباشد که قبلا ورودی این متد به شکل آرایه ای بود و مقادیر ورودی خود را از یک آرایه دریافت میکرد که کد آن به شکل زیر بود:
$mail->addReplyTo(array($replyTo, $replyToName));
ولی با تغییراتی که در جوملا 3.5 داده شده است ورودی این تابع از حالت آرایه ای خارج شده و به شکل زیر تغییر کرده است:
if(version_compare(JVERSION, '3.0', 'ge')) { $mail->addReplyTo($replyTo, $replyToName); } else { $mail->addReplyTo(array($replyTo, $replyToName)); }
با توجه به توضیحاتی که داده شد برای رفع این مشکل که اکثرا در کامپوننتهای مخصوصا فروشگاهی و فرم سازها که نیاز به ارسال ایمیل دارن استفاده میشود به این ترتیب عمل میکنیم: ابتدا در افزونه ای که دچار این خطا هستیم به دنبال متد addReplyTo میگردیم برای جستجو میتوانید این متد را با Notpade++ در کل کامپوننت خود جستجو کرده و سریع پیدا کنید پس از پیدا کردن متد آن را از حالت:
$mail->addReplyTo(array($replyTo, $replyToName));
به حالت زیر تغییر میدهیم
if(version_compare(JVERSION, '3.0', 'ge')) { $mail->addReplyTo($replyTo, $replyToName); } else { $mail->addReplyTo(array($replyTo, $replyToName)); }
اگر احیانا باز خطا داشتید از try و catch به شکل زیر استفاده کنید
try { if(version_compare(JVERSION, '3.0', 'ge')) { $mail->addReplyTo( $replyTo, $replyToName); } else { $mail->addReplyTo(array($replyTo, $replyToName)); } } catch (Exception $e) { //// }
این تغییرات را تا به حال روی چند تا از کامپوننتهای مهم جوملا مثل Rsform و hikashop و virtuemart و غیره انجام دادیم که در همگی بخوبی کار کرده و مشکل رفع شده است. امیدواریم از این قسمت از آموزشهای وبسایت افزونه نویسی ارس جوملا استفاده لازم را برده باشید.