Magento 中的 URL 重寫
已發表: 2014-09-11對於所有網站來說,擁有友好的 URL 以服務於 SEO 目的至關重要。 然而,我們在 Magento 中創建它們並不總是那麼容易,尤其是在您安裝模塊時。 作為非技術用戶,我們如何解決這個問題? 我們為Magento 中的 URL 重寫提供 2 個可行的解決方案,並根據需要創建適當的 URL。 你看這將不再是一個大問題。
熱的!! Claue 2.0 版本已經發布
查看演示
Claue – Clean, Minimal Magento 2&1 Theme是現代和乾淨的電子商務商店的絕佳模板,具有 40 多種主頁佈局和大量商店、博客、投資組合、商店定位器佈局和其他有用頁面的選項。 Claue 版本 2. 0 帶有一系列獨家功能,包括:
- 基於 Luma 主題。
- 滿足 Magento 主題的所有標準
- 顯著的性能提升
- 與大多數第三方擴展兼容。
- 與 Magento 2.4.x 完全兼容
第二個高級版本與之前的版本完全不同。 因此,如果您使用的是 Claue 版本 1 並想更新到 Claue 版本 2,則只能重建新網站,而不是從舊版本更新。 現在,讓我們回到主題
在我們討論這兩種解決方案之前,我們將展示一個示例來描述如何創建默認 URL 以及進行一些修復的先決條件知識。 例如。 我們為 Blog 創建了一個名為 Blog 的模塊,它的命名空間是 MGS,具有簡單的字段為
ID | 標題 | 描述 |
在後端,當我們創建一個帖子時,我們需要插入兩個字段,即。 標題和說明。 帖子的 ID 將自動生成。 為了顯示博客的詳細信息,我們依賴路由器(在文件 config.xml 中聲明,我們聲明了 blog)、控制器(我們命名為 index,因此它將是文件夾控制器中的文件 IndexControler.php)、動作(我們稱為視圖,文件 IndexControler.php 中的 viewAction 函數)和帖子的 id。
因此,前端帖子的默認 URL 將如下所示:
http://domain.com/blog/index/view/id/1 (1 是帖子的 ID)
就我們所見,這個 URL 完全不利於 SEO,應該將其重寫為對 URL 友好。 回到主要目標,我們提出了 2 種創建 URL 友好的方法。 無論哪種方式,您都需要定義所需的 URL,或者您將遵循通用規則來創建 URL(通常我們將使用帖子的標題,將所有字符轉換為正常樣式,用 - 替換空格,例如標題“如何在 Magento 中重寫 url ”將變為“ how-to-rewrite-url-in-magento。
在本文中,我們將使用 URL 定義方法,因此,我們將在上述數據庫中添加一個字段來保存 URL。
ID | 標題 | 描述 | 網址 |
因此,帖子的 URL 將被填寫。
重寫 URL 的第一種技術
使用 Magento 的 URL 重寫功能,您可以在目錄-> URL 重寫管理中獲得更多詳細信息。
在那裡你會發現 Magento 創建了一個模塊來保存類別和產品的 URL 重寫。 Magento 還允許您通過單擊“添加 URL 重寫”來添加 URL 重寫以添加自定義 URL 重寫:
目標路徑:是帖子的 URL,例如。 博客/索引/視圖/id/1
請求路徑:是您將插入的 URL 重寫,例如。 如何重寫 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 是保存後的博客 id,$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 字段,則 4 個命令行:
$request->setModuleName('blog'); $request->setControllerName('index'); $request->setActionName('view'); $request->setParam('id', $post->getId());
將幫助系統理解 URL 對應於 router: blog, controler: index, action: view 和 id 是 URL 與瀏覽器中的路徑相同的記錄的 id。
例如。 記錄具有 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
這是我們推薦的兩種解決方案,用於解決Magento 中的 URL 友好問題。 我們希望它們對您有所幫助。 我們非常感謝您的評論和對文章的進一步貢獻。
非常感謝您的時間!
Magesolution支持團隊!