2012-04-27 76 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; 
}