您的位置:首页 > 其它

Magento 如何去掉分类URL中的父目录

2012-06-01 13:39 267 查看
问题:

目前使用的是Magento1.4.2,现希望把Magento中所有产品分类的父类URL去掉。

如该分类名:http://www.abc.com/style/aaa.html 需要修改成 http://www.abc.com/aaa.html
解决方法:

为了不破坏源码,需要在Local中写一个小小的插件

1.在Local目录下创建Mage/Catalog/Model的目录结构

2.将app/code/core/Mage/Catalog/Model/URL.php 复制到Local/Mage/Catalog/Model/中,并做如下处理即可。

public function generatePath($type = 'target', $product = null, $category = null, $parentPath = null)
{
if (!$product && !$category) {
Mage::throwException(Mage::helper('core')->__('Please specify either a category or a product, or both.'));
}

// generate id_path
if ('id' === $type) {
if (!$product) {
return 'category/' . $category->getId();
}
if ($category && $category->getLevel() > 1) {
return 'product/' . $product->getId() . '/' . $category->getId();
}
return 'product/' . $product->getId();
}

// generate request_path
if ('request' === $type) {
// for category
if (!$product) {
if ($category->getUrlKey() == '') {
$urlKey = $this->getCategoryModel()->formatUrlKey($category->getName());
}
else {
$urlKey = $this->getCategoryModel()->formatUrlKey($category->getUrlKey());
}

$categoryUrlSuffix = $this->getCategoryUrlSuffix($category->getStoreId());
//              注释以下语句
//                 if (null === $parentPath) {
//                     $parentPath = $this->getResource()->getCategoryParentPath($category);
//                 }
//                 elseif ($parentPath == '/') {
//                     $parentPath = '';
//                 }
$parentPath = '';  //新增加语句;
$parentPath = Mage::helper('catalog/category')->getCategoryUrlPath($parentPath, true, $category->getStoreId());

return $this->getUnusedPath($category->getStoreId(), $parentPath . $urlKey . $categoryUrlSuffix,
$this->generatePath('id', null, $category)
);
}

// for product & category
if (!$category) {
Mage::throwException(Mage::helper('core')->__('A category object is required for determining the product request path.')); // why?
}

if ($product->getUrlKey() == '') {
$urlKey = $this->getProductModel()->formatUrlKey($product->getName());
}
else {
$urlKey = $this->getProductModel()->formatUrlKey($product->getUrlKey());
}
$productUrlSuffix  = $this->getProductUrlSuffix($category->getStoreId());
if ($category->getLevel() > 1) {
$this->_addCategoryUrlPath($category); // To ensure, that category has url path either from attribute or generated now
$categoryUrl = Mage::helper('catalog/category')->getCategoryUrlPath($category->getUrlPath(), false, $category->getStoreId());
return $this->getUnusedPath($category->getStoreId(), $categoryUrl . '/' . $urlKey . $productUrlSuffix,
$this->generatePath('id', $product, $category)
);
}

// for product only
return $this->getUnusedPath($category->getStoreId(), $urlKey . $productUrlSuffix,
$this->generatePath('id', $product)
);
}

// generate target_path
if (!$product) {
return 'catalog/category/view/id/' . $category->getId();
}
if ($category && $category->getLevel() > 1) {
return 'catalog/product/view/id/' . $product->getId() . '/category/' . $category->getId();
}
return 'catalog/product/view/id/' . $product->getId();
}


3.重新生成一下目录URL的索引
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: