زمانی که شما هسته سیستم مدیریت محتوای جوملایی حود را به نسخه های ۳٫۷ و ۳٫۸ و بالاتر به روزرسانی میکنید اگر در سایت خود افزونه هایی داشته باشید که بر اساس ساختار جوملاهای قدیمی توسعه داده شده باشند با خطای رایج constant DS روبرو خواهید شد.
علت اصلی بروز این خطا به این خاطر است که در نسخه های پایین تر از جوملای ۳٫۷ ساختار معرفی و شناسایی فایل helper یا سایر فایل ها با نسخه های جدیدتر متفاوت است و به همین دلیل اگر شما افزونه ی قدیمی ای داشته باشید که نوع کدنویسی آن هماهنگ با ساختار کدنویسی مناسب بر اساس استانداردهای جوملای ۳٫۷ و یا بالاتر نباشد با خطایی مشابه خطای ذیل مواجه خواهید شد.
متن خطا:
1 2 3 4 |
Warning: Use of undefined constant DS - assumed 'DS' (this will throw an Error in a future version of PHP) in /home/XXX/domains/XXX.com/public_html/administrator/components/com_virtuemart/virtuemart.php on line 20 Warning: require_once(/home/XXX/domains/XXX.com/public_html/components/com_virtuemart/vmhelp.php): failed to open stream: No such file or directory in /home/XXX/domains/XXX.com/public_html/administrator/components/com_virtuemart/virtuemart.php on line 20 Fatal error: require_once(): Failed opening required '/home/XXX/domains/XXX.com/public_html/components/com_virtuemart/vmhelp.php' (include_path='.:/usr/local/php-7.2/lib/php') in /home/XXX/domains/XXX.com/public_html/administrator/components/com_virtuemart/virtuemart.php on line 20 |
[quote]پیشنهاد میکنیم: ایران تیکت ؛ سامانه ررزرواسیون کنسرت، سینما، تئاتر و همایش [/quote]
راه حل اول:
به مسیری که در ارور مشخص شده رفته و فایل مورد نظر را باز میکنیم. بطور مثال میبایست کد زیر را :
1 2 |
defined('_JEXEC') or die('Restricted access'); require_once (dirname(__FILE__).DS.'helper.php'); |
بصورت کدهای مشروحه در کادر زیر تبدیل کنیم:
1 2 3 4 5 |
defined('_JEXEC') or die('Restricted access'); if(!defined('DS')){ define('DS',DIRECTORY_SEPARATOR); } require_once (dirname(__FILE__).DS.'helper.php'); |
و یا به عبارت ساده تر و راحت تر میتواتیم با یک مثال شفاف تر برای عزیزانی که آشنایی زیادی با کدنویسی ندارند تشریح کنیم.
راه حل دوم:
فرض میکنیم کدهای زیر بخشی از فایلی ست که سیستم در ارور به آن اشاره میکند:
1 2 3 4 5 6 7 |
// require helper files include JPATH_ADMINISTRATOR.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_virtuemart'.DIRECTORY_SEPARATOR.'helpers'.DIRECTORY_SEPARATOR.'helper.php'; include JPATH_SITE.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_virtuemart'.DIRECTORY_SEPARATOR.'helpers'.DIRECTORY_SEPARATOR.'library'.DIRECTORY_SEPARATOR.'loader'.DIRECTORY_SEPARATOR.'autoload.php'; require_once( JPATH_ROOT . DS . 'components' . DS . 'com_virtuemart'. DS. 'vmhelp' . DS .'formevirt.php'); if (!VersionListener::isSupported()) { die('This Joomla version is not supported!'); } |
برای اصلاح این فایل صرفاً کافی است که به جای عبارت DS عبارت DIRECTORY_SEPARATOR را جایگزین کنیم. یعنی کدهای ما به شکل زیر خواهد شد:
1 2 3 4 5 6 7 |
// require helper files include JPATH_ADMINISTRATOR.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_virtuemart'.DIRECTORY_SEPARATOR.'helpers'.DIRECTORY_SEPARATOR.'helper.php'; include JPATH_SITE.DIRECTORY_SEPARATOR.'components'.DIRECTORY_SEPARATOR.'com_virtuemart'.DIRECTORY_SEPARATOR.'helpers'.DIRECTORY_SEPARATOR.'library'.DIRECTORY_SEPARATOR.'loader'.DIRECTORY_SEPARATOR.'autoload.php'; require_once( JPATH_ROOT .DIRECTORY_SEPARATOR. 'components' .DIRECTORY_SEPARATOR. 'com_virtuemart'.DIRECTORY_SEPARATOR. 'vmhelp' .DIRECTORY_SEPARATOR.'formevirt.php'); if (!VersionListener::isSupported()) { die('This Joomla version is not supported!'); } |
همچنین برای مطالعه بیشتر پیرامون این موضوع میتوانید مستندات منتشر شده توسط جوملای جهانی را مطالعه کنید:
Potential backward compatibility issues in Joomla 3 and Joomla Platform 12.2
امیدواریم که این آموزش کوتاه توانسته باشد کمکی به شما کرده باشد.