最新消息:Excel无乱码转CSV,由于工作原因很少更新博客和回复大家的评论,非常抱歉。

Magento 让产品的URL支持大小写

这近发现,有些站长的口味不一样,能让产品的URL能支持大小写访问。

如:
默认地址是:http://www.hicoogle.com/abc.html
现在要求:http://www.hicoogle.com/ABC.html,也能访问。

在这种情况下Magento默认是不支持的。那怎么办?

首先找到:app/code/core/Mage/Core/Model/Resource/Url/Rewrite.php,这个文件的public function loadByRequestPath(Mage_Core_Model_Url_Rewrite $object, $path)方法,大概在134行。
修改这个方法里面的一行代码就可以了。

在158行的样子,找到:if (!array_key_exists($item[‘request_path’], $mapPenalty))改成

if (!array_key_exists(strtolower($item[‘request_path’]), array_change_key_case($mapPenalty)))就可以了。

完整代码:

public function loadByRequestPath(Mage_Core_Model_Url_Rewrite $object, $path)
    {
        if (!is_array($path)) {
            $path = array($path);
        }

        $pathBind = array();
        foreach ($path as $key => $url) {
            $pathBind['path' . $key] = $url;
        }
        // Form select http://www.hicoogle.com
        $adapter = $this->_getReadAdapter();
        $select  = $adapter->select()
            ->from($this->getMainTable())
            ->where('request_path IN (:' . implode(', :', array_flip($pathBind)) . ')')
            ->where('store_id IN(?)', array(Mage_Core_Model_App::ADMIN_STORE_ID, (int)$object->getStoreId()));

        $items = $adapter->fetchAll($select, $pathBind);

        // Go through all found records and choose one with lowest penalty - earlier path in array, concrete store
        $mapPenalty = array_flip(array_values($path)); // we got mapping array(path => index), lower index - better
        $currentPenalty = null;
        $foundItem = null;
        foreach ($items as $item) {
            if (!array_key_exists(strtolower($item['request_path']), array_change_key_case($mapPenalty))) { //修改这里就可以了。
                continue;
            }
            $penalty = $mapPenalty[$item['request_path']] << 1 + ($item['store_id'] ? 0 : 1);
            if (!$foundItem || $currentPenalty > $penalty) {
                $foundItem = $item;
                $currentPenalty = $penalty;
                if (!$currentPenalty) {
                    break; // Found best matching item with zero penalty, no reason to continue
                }
            }
        }

        // Set data and finish loading http://www.hicoogle.com/magento-rang-chan-pin-di-url-zhi-chi-da-xiao-xie.html
        if ($foundItem) {
            $object->setData($foundItem);
        }

        // Finish
        $this->unserializeFields($object);
        $this->_afterLoad($object);

        return $this;
    }

建议:
为了以后升级不受影响,建议把这个文件重写一下。把这个文件放到:app/code/local/Mage/Core/Model/Resource/Url/Rewrite.php,效果是一样的。这样防止升级核文件被替换,导致以前修改的功能不能使用。

转载请注明:嗨酷哥,有你更酷! » Magento 让产品的URL支持大小写

与本文相关文章

发表我的评论

取消评论
表情 插代码

Hi,您需要填写昵称和邮箱!

  • 必填项
  • 必填项

网友评论3条  本站回复1

  1. 不错,谢谢分享。:P

    跨境电商平台2016-08-24 16:17 回复
  2. 因为贵站长时间无更新文章,本站已取消与贵站链接,如有得罪之处,请多多包涵。

    空城旧梦2013-10-11 01:51 回复
  3. 挺实在的内容,不错,学习一下

    emehost2013-09-18 12:48 回复