การเขียน URL ใหม่ใน Magento

เผยแพร่แล้ว: 2014-09-11

เป็นสิ่งสำคัญอย่างยิ่งที่เว็บไซต์ทั้งหมดจะต้องมี URL ที่เป็นมิตรต่อวัตถุประสงค์ SEO อย่างไรก็ตาม มันไม่ง่ายเสมอไปที่เราจะสร้างสิ่งเหล่านั้นใน Magento โดยเฉพาะอย่างยิ่งเมื่อคุณติดตั้งโมดูล เราจะแก้ไขปัญหานี้ในฐานะผู้ใช้ที่ไม่ใช่ด้านเทคนิคได้อย่างไร เรามีวิธีแก้ปัญหาที่เป็นไปได้ 2 วิธีสำหรับ การเขียน URL ใหม่ใน Magento และสร้าง URL ที่เหมาะสมตามที่คุณต้องการ คุณจะเห็นว่ามันจะไม่เป็นปัญหาใหญ่อีกต่อไป

ร้อน!! เวอร์ชัน 2.0 ของ Claue ได้รับการเผยแพร่แล้ว

claue2_edited (1)

ดูการสาธิต

Claue – ธีม Magento 2&1 ที่สะอาดและเรียบง่ายเป็นเทมเพลตที่ยอดเยี่ยมสำหรับร้านอีคอมเมิร์ซที่ทันสมัยและสะอาดตา พร้อมด้วยเลย์เอาต์ของหน้าแรกมากกว่า 40 แบบและตัวเลือกมากมายสำหรับร้านค้า บล็อก พอร์ตโฟลิโอ เลย์เอาต์ตัวระบุตำแหน่งร้าน และหน้าที่มีประโยชน์อื่นๆ Claue เวอร์ชัน 2. 0 มาพร้อมกับคุณสมบัติพิเศษมากมาย ได้แก่ :

  • อิงจากธีม Luma
  • ตรงตามมาตรฐานทั้งหมดของ Magento Theme
  • การปรับปรุงประสิทธิภาพที่สำคัญ
  • เข้ากันได้กับส่วนขยายของบุคคลที่สามส่วนใหญ่
  • เข้ากันได้อย่างสมบูรณ์กับ Magento 2.4.x

รุ่นขั้นสูงที่สองนี้แตกต่างอย่างสิ้นเชิงจากรุ่นก่อน ดังนั้น หากคุณใช้ Claue เวอร์ชัน 1 และต้องการอัปเดตเป็น Claue เวอร์ชัน 2 คุณสามารถสร้างเว็บไซต์ใหม่ได้เท่านั้น แทนที่จะอัปเดตจากเวอร์ชันเก่า เอาล่ะ กลับมาที่หัวข้อหลัก

ก่อนที่เราจะเข้าใกล้วิธีแก้ปัญหาทั้ง 2 นี้ เรากำลังแสดงตัวอย่างเพื่ออธิบายว่า URL เริ่มต้นถูกสร้างขึ้นอย่างไรและความรู้ที่จำเป็นเบื้องต้นเพื่อซ่อมแซมบางอย่าง เช่น. เราได้สร้างโมดูลสำหรับ Blog ชื่อ Blog และเนมสเปซของมันคือ MGS โดยมีฟิลด์อย่างง่ายเช่น

id ชื่อ คำอธิบาย

ในส่วนแบ็คเอนด์ เมื่อเราสร้างโพสต์ เราจำเป็นต้องแทรกสองฟิลด์ กล่าวคือ ชื่อเรื่องและคำอธิบาย ID ของโพสต์จะถูกสร้างขึ้นโดยอัตโนมัติ เพื่อแสดงรายละเอียดการโพสต์ของ Blog เราอาศัยเราเตอร์ (ประกาศในไฟล์ config.xml เราประกาศบล็อก) ตัวควบคุม (เราตั้งชื่อว่า index ดังนั้นมันจะเป็นไฟล์ IndexControler.php ในโฟลเดอร์ควบคุม) การกระทำ (เราเรียกว่ามุมมอง , ฟังก์ชั่น viewAction ในไฟล์ IndexControler.php) และ id ของโพสต์

ดังนั้น URL เริ่มต้นของโพสต์ที่ส่วนหน้าจะมีลักษณะดังนี้:

http://domain.com/blog/index/view/id/1 (1 คือ ID ของโพสต์)

เท่าที่เราเห็น URL นี้ไม่ดีสำหรับ SEO โดยสิ้นเชิง ควรเขียนใหม่เพื่อให้กลายเป็น URL ที่เป็นมิตร กลับไปที่วัตถุประสงค์หลัก เราเสนอ 2 วิธีในการสร้าง URL ที่เป็นมิตร และไม่ว่าจะด้วยวิธีใด คุณจะต้องกำหนด URL ที่คุณต้องการ หรือคุณจะต้องปฏิบัติตามกฎทั่วไปเพื่อสร้าง URL (โดยปกติ เราจะใช้ชื่อบทความ แปลงอักขระทั้งหมดเป็นแบบปกติ แทนที่พื้นที่ว่างด้วย - เช่น ชื่อเรื่อง “ วิธีเขียน URL ใหม่ใน Magento ” จะกลายเป็น “ how-to-re-rewrite-url-in-magento

ในบทความนี้ เราจะใช้วิธีการกำหนด URL ดังนั้น เราจะเพิ่มอีกหนึ่งฟิลด์ในฐานข้อมูลด้านบนเพื่อบันทึก URL

id ชื่อ คำอธิบาย url

ดังนั้น URL ของโพสต์จะถูกกรอก

เทคนิคแรกในการเขียน URL ใหม่

ใช้ฟังก์ชันเขียน URL ใหม่ของ Magento คุณสามารถดูรายละเอียดเพิ่มเติมได้ที่ Catalog-> URL Rewrite Management

ภาพที่1

คุณจะพบว่า Magento สร้างโมดูลเพื่อบันทึกการเขียน URL ใหม่สำหรับหมวดหมู่และผลิตภัณฑ์ Magento ยังให้คุณเพิ่มการเขียน URL ใหม่ได้ด้วยการคลิก “Add Url Rewrite” เพื่อเพิ่มการเขียน URL แบบกำหนดเองด้วย:

เส้นทางเป้าหมาย: เป็น URL ของโพสต์ เช่น บล็อก/ดัชนี/ดู/id/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/etc)

ภายในแท็กส่วนกลาง:

<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 นั้นสอดคล้องกับเราเตอร์: บล็อก, ตัวควบคุม: ดัชนี, การดำเนินการ: ดู และ id เป็นรหัสของบันทึกที่มี URL เหมือนกับเส้นทางในเบราว์เซอร์

เช่น. บันทึกที่มี URL how-to-rewrite-url-in-magento.html และ id 1 จากนั้น:

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

สอดคล้องกับ

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

นี่คือสองวิธีแก้ไขปัญหาที่เราแนะนำในการแก้ปัญหาที่เป็นมิตรกับ URL ใน Magento เราหวังว่าคุณจะพบว่ามีประโยชน์ เราขอขอบคุณสำหรับความคิดเห็นของคุณและการสนับสนุนเพิ่มเติมในบทความ

ขอบคุณมากสำหรับเวลาของคุณ!

ทีม สนับสนุนมาเกโซลูชั่น !