Magento 具有用于创建自定义 SEO 友好 URL 键的产品和类别字段。但是当您有多个商店时,通常不能为不同的商店使用不同的 URL 键,因为 url_key 字段默认为“GLOBAL”。对于产品,您可以从属性管理将 url_key 属性的 is_default 字段更新为“商店视图”。但是对于类别的 url_key 字段,Magento 中没有该选项。但是数据库中确实存在该字段,属性代码相同,但 backend_model 不同,因此您需要直接进入数据库并将“is_global”字段 1 更改为 0。
参考: http: //www.devraju.com/magento/differ-category-url-keys-for-different-store-views-in-magento/ 查看页面底部的评论。
同样的问题: Magento 多语言 - 404 语言结果的双重变化(或如何在商店而不是视图中更改语言)
这种策略似乎在旧版本中有效,但在 7.1 中我遇到了麻烦。当我转到目录 >> 属性 >> 管理属性时, url_key 属性已经设置为存储视图。见下图。
此外,属性表看起来配置正确。请参阅下面的 SQL。
切换代码如下所示:
<?php if(count($this->getStores())>1): ?>
<div class="form-language">
<label for="select-language"><?php echo $this->__('Your Language:') ?></label>
<select id="select-language" title="<?php echo $this->__('Your Language') ?>" onchange="window.location.href=this.value">
<?php foreach ($this->getStores() as $_lang): ?>
<?php $_selected = ($_lang->getId() == $this->getCurrentStoreId()) ? ' selected="selected"' : '' ?>
<option value="<?php echo $_lang->getCurrentUrl() ?>"<?php echo $_selected ?>><?php echo $this->htmlEscape($_lang->getName()) ?></option>
<?php endforeach; ?>
</select>
</div>
<?php endif; ?>
SQL 语句
SELECT * FROM eav_attribute WHERE attribute_code LIKE '%url_key%';
attribute_id Attribute Id entity_type_id Entity Type Id attribute_code Attribute
Edit Delete 43 3 url_key catalog/category_attribute_backend_urlkey
Edit Delete 97 4 url_key catalog/product_attribute_backend_urlkey
SELECT attribute_id, is_global FROM catalog_eav_attribute WHERE attribute_id=43;
SELECT attribute_id, is_global FROM catalog_eav_attribute WHERE attribute_id=97;
Full Texts attribute_id Attribute ID is_global Is Global
Edit Delete 43 0
Full Texts attribute_id Attribute ID is_global Is Global
Edit Delete 97 0
我也尝试使用重写规则来解决它,但是重写规则似乎没有涵盖语言切换。参考: http: //www.magentocommerce.com/wiki/modules_reference/english/mage_adminhtml/urlrewrite/index
我正在寻找具有适当代码修改的解决方案。