إعادة كتابة URL في Magento

نشرت: 2014-09-11

من المهم للغاية أن يكون لجميع مواقع الويب عناوين URL صديقة لخدمة غرض تحسين محركات البحث. ومع ذلك ، ليس من السهل دائمًا إنشاء تلك الموجودة في Magento خاصة عند تثبيت وحدة نمطية. كيف يمكننا معالجة هذه المشكلة كمستخدم غير تقني؟ نحن نقدم حلين عمليين لإعادة كتابة عناوين URL في Magento وإنشاء عناوين URL مناسبة كما تريد. ترى أنها لن تكون مشكلة كبيرة بعد الآن.

الحار!! تم إطلاق الإصدار 2.0 من Claue

claue2_edited (1)

مشاهدة العرض التوضيحي

يعد Claue - Clean، Minimal Magento 2 & 1 Theme نموذجًا ممتازًا لمتجر تجارة إلكترونية حديث ونظيف يحتوي على أكثر من 40 تخطيطًا للصفحة الرئيسية والعديد من الخيارات للتسوق ، والمدونة ، والمحفظة ، وتخطيطات محدد مواقع المتاجر ، وصفحات مفيدة أخرى. يأتي إصدار Claue 2. 0 مع مجموعة من الميزات الحصرية بما في ذلك:

  • أن تكون مبنية على موضوع Luma.
  • تلبية جميع معايير موضوع Magento
  • تحسن كبير في الأداء
  • متوافق مع معظم ملحقات الطرف الثالث.
  • متوافق تمامًا مع Magento 2.4.x

هذه النسخة المتقدمة الثانية تختلف تمامًا عن سابقتها. وبالتالي ، إذا كنت تستخدم الإصدار 1 من Claue وترغب في التحديث إلى الإصدار 2 من Claue ، فيمكنك فقط إعادة إنشاء موقع ويب جديد بدلاً من التحديث من الإصدار القديم. الآن ، دعنا نعود إلى الموضوع الرئيسي

قبل أن نتعامل مع الحلين ، نعرض مثالاً لوصف كيفية إنشاء عنوان URL افتراضي والمعرفة المطلوبة مسبقًا لتفريخ بعض الإصلاحات. على سبيل المثال. لقد أنشأنا وحدة نمطية للمدونة باسم Blog ومساحة الاسم الخاصة بها هي MGS مع حقول بسيطة مثل

بطاقة تعريف لقب وصف

في النهاية الخلفية ، عندما ننشئ منشورًا ، نحتاج إلى إدخال حقلين ، أي. العنوان والوصف. سيتم إنشاء معرف المنشور تلقائيًا. من أجل عرض تفاصيل منشور المدونة ، نعتمد على جهاز التوجيه (تم الإعلان عنه في ملف config.xml ، أعلنا عن مدونة) ، وحدة التحكم (أطلقنا عليها اسم index ، لذلك سيكون ملف IndexControler.php في وحدات تحكم المجلد) ، الإجراء (أطلقنا عليه اسم العرض ، وظيفة viewAction في ملف IndexControler.php) ومعرف المنشور.

لذلك ، سيبدو عنوان URL الافتراضي للنشر في الواجهة الأمامية كما يلي:

http://domain.com/blog/index/view/id/1 (رقم واحد هو معرف المشاركة)

بقدر ما يمكننا أن نرى أن عنوان URL هذا ليس جيدًا تمامًا لتحسين محركات البحث ، يجب إعادة كتابته ليتحول إلى عنوان URL سهل الاستخدام. بالعودة إلى الهدف الرئيسي ، اقترحنا طريقتين لإنشاء عنوان URL سهل الاستخدام. وبأي من الطريقتين ، ستحتاج إلى تحديد عنوان URL الذي تريده أو ستتبع قاعدة عامة لإنشاء عنوان URL (عادةً ما نستخدم عنوان المنشور ، ونحول جميع الأحرف إلى نمط عادي ، واستبدل المساحة الفارغة بـ - ، على سبيل المثال. العنوان سيصبح " How-to-Rewrite-url-in-magento " كيفية إعادة كتابة عنوان url في Magento .

في هذه المقالة ، سنستخدم نهج تعريف عنوان URL ، لذلك ، سنضيف حقلًا آخر إلى قاعدة البيانات أعلاه لحفظ عنوان URL.

بطاقة تعريف لقب وصف عنوان url

لذلك ، سيتم ملء عنوان URL للمنشور.

أول تقنية لإعادة كتابة URL

استخدم وظيفة إعادة كتابة عنوان URL في Magento ، يمكنك الحصول على مزيد من التفاصيل في Catalog-> URL Rewrite Management.

الصورة 1

هناك سوف تكتشف أن Magento ينشئ وحدة لحفظ إعادة كتابة عنوان URL للفئة والمنتج. يتيح لك Magento أيضًا إضافة إعادة كتابة عنوان URL بالنقر فوق "إضافة إعادة كتابة عنوان URL" لإضافة إعادة كتابة عنوان URL مخصص مع:

المسار الهدف: يكون عنوان URL للنشر ، على سبيل المثال. مدونة / فهرس / عرض / معرف / 1

مسار الطلب : إعادة كتابة عنوان URL الذي ستقوم بإدخاله ، على سبيل المثال. how-to-Rewrite-url-in-magento.html

من الواضح أننا لن نضيف هذه المعلومات يدويًا لحفظ إعادة كتابة عنوان URL. بدلاً من ذلك ، سنستخدم نموذج url_rewrite للوحدة الأساسية (Mage :: getModel ('core / url_rewrite')) لحفظ عنوان URL الخاص بالمدونة في جدول core_url_rewrite بعد حفظ بيانات المدونة.

بعد قيامك بحفظ منشور في مدونة ، يمكنك استخدام الكود التالي لحفظ إعادة كتابة عنوان URL:

Mage::getModel('core/url_rewrite')
    ->setIsSystem(true)
    ->setIdPath('blog/index/view/id/'.$blogId)
    ->setTargetPath('blog/index/view/id/'.$blogId)
    ->setRequestPath($url)
    ->save();

ملاحظة: $ blogId هو معرف المدونة بعد الحفظ و $ url هو URL الذي قمت بتعريفه.

إذا تم تذكيرك ، فسيتم تطبيق الأمر أعلاه على المنشور الجديد ، وإذا كنت تريد تحرير منشور موجود ، فأنت بحاجة إلى تحديث هذا السجل.

التقنية الثانية لإعادة كتابة URL

لا تزال تأخذ وحدة المدونة ونفس حقول البيانات كما هو مذكور أعلاه ، يمكنك إنشاء منشورات في النهاية الخلفية بما في ذلك بيانات كافية عن العنوان والوصف وعنوان url.

انتقل إلى config.xml (app / code / local / MGS / Blog / إلخ)

ضمن العلامة العامة:

<global>
…
</global>

أضف الكود التالي

<events>
    <controller_front_init_routers>
        <observers>
            <blog_custom_router>
                <class>MGS_Blog_Controller_Router</class>
                <method>initControllerRouters</method>
           </blog_custom_router>
        </observers>
    </controller_front_init_routers>
</events>

في المجلد الرئيسي للوحدة app / code / local / MGS / Blog ، ستنشئ مجلدًا آخر باسم Controller ، حيث ستنشئ بعد ذلك ملفًا باسم Router.php بالمحتوى أدناه:

<?php
class MGS_Blog_Controller_Router extends Mage_Core_Controller_Varien_Router_Abstract
{
 /**
 * Initialize Controller Router
 *
 * @param Varien_Event_Observer $observer
 */
 public function initControllerRouters($observer)
 {
     /* @var $front Mage_Core_Controller_Varien_Front */
     $front = $observer->getEvent()->getFront();
     $front->addRouter('blog', $this);
 }
/**
 * Validate and Match Cms Page and modify request
 *
 * @param Zend_Controller_Request_Http $request
 * @return bool
 */
 public function match(Zend_Controller_Request_Http $request)
 {
     if (!Mage::isInstalled()) {
         Mage::app()->getFrontController()->getResponse()
         ->setRedirect(Mage::getUrl('install'))
         ->sendResponse();
         exit;
     }
     $identifier = trim($request->getPathInfo(), '/');
     $condition = new Varien_Object(array(
         'identifier' => $identifier,
         'continue' => true
     ));
if ($condition->getRedirectUrl()) {
     Mage::app()->getFrontController()->getResponse()
     ->setRedirect($condition->getRedirectUrl())
     ->sendResponse();
     $request->setDispatched(true);
     return true;
 }
if (!$condition->getContinue()) {
    return false;
 }

 $collection = Mage::getModel('blog/blog')
 ->getCollection();

 if(count($collection)>0){
     foreach($collection as $post){
         if($identifier == $post->getUrl()){
             $request->setModuleName('blog');
             $request->setControllerName('index');
             $request->setActionName('view');
             $request->setParam('id', $post->getId());
             return true;
         }
      }
    }
  }
}

قطعة الكود أعلاه تعني:
على سبيل المثال ، عند كتابة مسار في المستعرض:
http://domain.com/how-to-rewrite-url-in-magento.

ستقارن الوظيفة المسار: how-to-Rewrite-url-in-magento.html مع عنوان url في جدول بيانات المدونة
إذا كان المسار مشابهًا لحقل URL لأي سجل في db ، فسيكون هناك 4 أسطر أوامر:

$request->setModuleName('blog');
$request->setControllerName('index');
$request->setActionName('view');
$request->setParam('id', $post->getId());

سيساعد النظام على فهم أن عنوان URL مطابق للموجه: blog ، controler: index ، action: view and id هو معرف السجل الذي يحتوي على عنوان URL مطابق للمسار في المتصفح.

على سبيل المثال. سجل وجود عنوان URL how-to-Rewrite-url-in-magento.html والمعرف 1 ، ثم:

http://domain.com/how-to-rewrite-url-in-magento.html

يتوافق مع

http://domain.com/blog/index/view/id/1

هذان هما الحلان اللذان نوصي بهما لحل مشكلة الودية لعناوين URL في Magento . نأمل أن تجد متعاونا. نحن نقدر تقديرا عاليا تعليقك ومساهمتك الإضافية في المقال.

شكرا جزيلا على وقتك!

فريق دعم Magesolution !