2012-04-27 170 views
2

我正在使用Magento具有多個商店和商店的意見(1個網站,4個商店,每個商店查看)。我激活了「添加商店代碼到網址」選項,並可以通過http://example.com/storecode/訪問我的不同商店,這很好。不過,我有一個商店代碼,應該用兩個詞來命名爲SEO目的。不幸的是Magento的只允許使用下劃線(_)而不是一個破折號( - )作爲存儲代碼:Magento:在商店代碼Dash

The store code may contain only letters (a-z), numbers (0-9) or underscore(_), the first character must be a letter. 

至於dashes are recommended分隔在URL中的話,我正在尋找一種方法來使用破折號商店碼。覆蓋Magento的驗證是沒有問題的,但我想知道是否有任何特殊原因破折號在這裏被禁用。有人有想法嗎?

感謝, 馬蒂亞斯

+0

解釋:代碼是一個標識符,通常代表一個單詞。因此它由字符類的字符組成。也不是以數字開頭聽起來像一個命名的標識符。所以你的雙字用例不適用於代碼,因爲它代表了一個單詞。因此不允許非單詞字符。已選擇小寫字母以進一步簡化代碼。所以你發現你可以在URI的路徑組件中使用單個單詞,並且你發現商店代碼不適合兩個單詞。一個URL重寫和輸出過濾器可以處理這個。 – hakre 2015-07-18 21:52:06

+0

嗨Mathias。我實際上面對相同的要求,並會根據您的經驗感興趣。你最終選擇了哪種解決方案? – DarkCowboy 2017-04-03 11:27:31

回答

3

你總是可以嘗試做的Mage_Core_Model_Mysql4_Store副本中app/code/local和修改正則表達式允許衝刺。可能的原因是Magento將_解釋爲分隔符或命名約定中的空格。

我會假設有一個原因,但具體是什麼,我不知道。如果您確實進行了更改,我建議您事先在代碼庫/ magento的副本上進行更改,以確定在生產站點上執行此操作之前是否存在任何影響。

protected function _beforeSave(Mage_Core_Model_Abstract $model) 
{ 
    if(!preg_match('/^[a-z]+[a-z0-9_\-]*$/',$model->getCode())) { 
     Mage::throwException(
      Mage::helper('core')->__('The store code may contain only letters (a-z), numbers (0-9) or underscore(_), the first character must be a letter')); 
    } 

    return $this; 
}