Shani1351,我遇到了和你一样的问题。我做了同样的操作: - 将“使用产品 URL 的类别路径”设置为“否”。- 清除缓存。- 截断“core_url_rewrite”。- 清除缓存。- 然后检查我的 url 重写数据(来自后端)。我看到了每个产品的很多网址(每个相关链接类别都有一个网址)。
但是,如果您检查您的首页,您会发现产品只使用了一个 URL,正如预期的那样。
我认为 Magento 需要生成“整个包”网址,但不要在前端使用它们。
编辑(3年后):
我最初的回答是错误的。产品 url 与类别路径一起返回。
为了帮助 magento 在没有类别路径的情况下获得重写的产品 url,我建议您重写以下方法(这是一个 POC,仅用于演示。不要修改核心文件,永远不要!):
Mage_Catalog_Model_Product_Url::getUrl()
public function getUrl(Mage_Catalog_Model_Product $product, $params = array())
{
$routePath = '';
$routeParams = $params;
$storeId = $product->getStoreId();
if (isset($params['_ignore_category'])) {
unset($params['_ignore_category']);
$categoryId = null;
} else {
$categoryId = $product->getCategoryId() && !$product->getDoNotUseCategoryId()
? $product->getCategoryId() : null;
}
if ($product->hasUrlDataObject()) {
$requestPath = $product->getUrlDataObject()->getUrlRewrite();
$routeParams['_store'] = $product->getUrlDataObject()->getStoreId();
} else {
$requestPath = $product->getRequestPath();
if (empty($requestPath) && $requestPath !== false) {
$idPath = sprintf('product/%d', $product->getEntityId());
if ($categoryId) {
// $idPath = sprintf('%s/%d', $idPath, $categoryId);
}
查看注释行(我的 CE 1.7.0.2 上的 194)。这是罪魁祸首!
只需在覆盖模块中删除此行:
$idPath = sprintf('%s/%d', $idPath, $categoryId);
希望它可以帮助某人。