2012-11-28 43 views
11

正如你可能知道,如果你有一個共享URL重點產品,該URL關鍵還得附加了一個數字:Magento的 - 在URL關鍵字/產品網址中刪除編號

http://www.site.com/main-category/sub-category/product-name- .html

如何找到該6260(這是我的網址附加的#之一)的?我試過產品ID,SKU,我找不到它的來源。我問的原因是因爲如果我能找到它,我可以創建一個字符串替換函數,以在我在某些產品列表頁面上回應它們之前將其從網址中清除。

謝謝。

+0

你在管理區重寫了URL嗎?從[這](http://stackoverflow.com/questions/5019584/magento-puts-1-in-my-urls-can-i-remove-programatically)張貼在SO,並從我看到我自己,這是與URL重寫和索引問題有關 – CCBlackburn

+0

我的問題是我正在控制一個擁有數千*個可配置產品的網站(這是導致url密鑰重複的原因),之前沒有人關注過這個問題。我不確定管理員中是否有一個部分能夠一舉解決此問題。我擔心的是,不像你指的那篇文章,我的網址和數字是動態的,沒有我能找到的真實模式。這就是爲什麼我想知道是否有動態的方法來找出動態附加數字的來源。這是我的擔憂。 顯然有一個控制它的功能... 謝謝。 – Joel

+0

剛想過,是不同於簡單產品的可配置產品的URL密鑰?如果沒有,這也會造成問題 – CCBlackburn

回答

21

在我們到達代碼的位置之前,請注意您正在進入一個痛苦的世界。

  1. 有沒有簡單規則爲如何生成這些數字。有些情況下,它是商店ID,有些情況下它是簡單的產品ID。還有就是它的情況下,既不

  2. 即使有,是很常見的不來自從頭Magento的網站包含最終改變了這一

  3. ,因爲Magento的人類可讀/ SEO友好的URL位於自定義功能在core_url_rewrite表,有可能爲人們提供了插入任意文本末日

警告放在一邊,你要尋找的模式是Mage::getSingleton('catalog/url')。這包含了生成Magento Catalog和產品重寫的大部分邏輯。所有這些方法都通過將請求路徑傳遞給getUnusedPath方法結束。

#File: app/code/core/Mage/Catalog/Model/Url.php 
public function getUnusedPath($storeId, $requestPath, $idPath) 
{ 
    //... 
} 

此方法包含在URL末尾創建唯一編號的邏輯。追蹤這完全超出了堆棧溢出帖子的範圍,但這條線特別是啓發/令人沮喪。

$lastRequestPath = $this->getResource() 
    ->getLastUsedRewriteRequestIncrement($match[1], $match[4], $storeId); 
if ($lastRequestPath) { 
    $match[3] = $lastRequestPath; 
} 
return $match[1] 
    . (isset($match[3]) ? ($match[3]+1) : '1') 
    . $match[4]; 

特別是,這兩條線

$match[3] = $lastRequestPath; 
//... 
. (isset($match[3]) ? ($match[3]+1) : '1') 
//... 

在情況不是很明顯,存在這樣的情況的Magento將自動追加1到URL,然後繼續遞增它。這使得這些URL在生成時依賴於系統狀態的生成 - 沒有簡單的規則。

在此文件中的其他線

if (strpos($idPath, 'product') !== false) { 
    $suffix = $this->getProductUrlSuffix($storeId); 
} else { 
    $suffix = $this->getCategoryUrlSuffix($storeId); 
}  

$suffix將在URL的末尾使用一樣,所以這些方法都值得研究。

如果您只想從網址中刪除數字,則最好使用正則表達式或一些字符串跳動。

+1

值得注意的是,在1.7版本中似乎存在一個bug,導致Magento roll會爲任何具有重複名稱的產品生成新值。無論自上次重新索引運行以來是否發生了任何變化。 –

+0

@Cags誰有什麼bug如何? –

+0

對不起,偶然發帖。在巴士上時很難打電話。更新更多細節。 –

2

我幾乎不知道爲什麼這個工程,但這對我工作。很可能是因爲它使得網址不唯一。 Magento ver。 1.7.0.2突然開始將數字作爲後綴添加到我的新產品名稱中,即使它們的url鍵和名稱與舊產品不同。在預感上,我去了System -> Configuration -> Catalog -> Search Engine Optimizations -> Product URL Suffix,並將默認.html更改爲-prod.html。我想你可以把它改成你想要的任何後綴。然後我重新編制了我的網站索引,刷新了緩存,然後重播!所有的數字都從產品網站上消失了。產品網址現在都有格式custom-product-name-prod.html。規範標籤也顯示custom-product-name-prod.html,所以我很高興。

不知道它是否適用於其他人,但我希望它可以。請注意,我確實使用了帶有重複URL的新舊產品,並且在執行此過程之前我已經禁用了舊產品。所以,如果你有兩個產品具有相同的URL密鑰,並且都被啓用,那麼這可能對你無效。