Magento语言切换器:未在URL中翻译的类别名称

时间:2012-02-20 22:59:35

标签: magento categories language-switching

我有一个商店,有两种语言的商店浏览,意大利语和英语。

对于某些类别,我有不同的意大利语和英语名称,例如EN的服饰和IT的Abbigliamento。

问题是,当我在mystore.com/it/abbigliamento中,如果我将语言切换为英语,语言切换器会将我带到mystore.com/en/abbigliamento而不是mystore.com/en/apparel,并给我404错误。

语言切换器会更改商店ID,但不会翻译类别名称

谢谢,Pietro。

2 个答案:

答案 0 :(得分:2)

您可以使用Mage_Core_Model_Store重写,如下所示

class Example_StoreUrls_Model_Core_Store extends Mage_Core_Model_Store {


/**
 * Looks up a given request path in the current store (app) and translates it to the
 * value in $this store using the rewrite index
 *
 * You might want to throw exceptions in case of just returning the input URLs during errors.
 *
 * @param $requestPath
 */
public function lookupLocalizedPath($requestPath) {
    $urlRewriteCollectionSource = Mage::getModel('core/url_rewrite')->getCollection();
    $urlRewriteCollectionSource
        ->addFieldToFilter('request_path', $requestPath)
        ->addStoreFilter(Mage::app()->getStore());
    if(count($urlRewriteCollectionSource) == 0) {
        return $requestPath;
    }

    $idPath = $urlRewriteCollectionSource->getFirstItem()->getIdPath();

    $urlRewriteCollectionTarget = Mage::getModel('core/url_rewrite')->getCollection();
    $urlRewriteCollectionTarget
        ->addFieldToFilter('id_path', $idPath)
        ->addStoreFilter($this);

    if(count($urlRewriteCollectionTarget) == 0) {
        return $requestPath;
    }

    return $urlRewriteCollectionTarget->getFirstItem()->getRequestPath();
}

/**
 * Copied from parent + change:
 * Watch out for the inserted line

 * @param bool $fromStore
 * @return string
 */
public function getCurrentUrl($fromStore = true)
{
    $sidQueryParam = $this->_getSession()->getSessionIdQueryParam();
    $requestString = Mage::getSingleton('core/url')->escape(
        ltrim(Mage::app()->getRequest()->getRequestString(), '/'));

    $storeUrl = Mage::app()->getStore()->isCurrentlySecure()
        ? $this->getUrl('', array('_secure' => true))
        : $this->getUrl('');
    $storeParsedUrl = parse_url($storeUrl);

    $storeParsedQuery = array();
    if (isset($storeParsedUrl['query'])) {
        parse_str($storeParsedUrl['query'], $storeParsedQuery);
    }

    $currQuery = Mage::app()->getRequest()->getQuery();
    if (isset($currQuery[$sidQueryParam]) && !empty($currQuery[$sidQueryParam])
        && $this->_getSession()->getSessionIdForHost($storeUrl) != $currQuery[$sidQueryParam]
    ) {
        unset($currQuery[$sidQueryParam]);
    }

    foreach ($currQuery as $k => $v) {
        $storeParsedQuery[$k] = $v;
    }

    // inserted the following line - rest is from core
    $requestString = $this->lookupLocalizedPath($requestString);

    if (!Mage::getStoreConfigFlag(Mage_Core_Model_Store::XML_PATH_STORE_IN_URL, $this->getCode())) {
        $storeParsedQuery['___store'] = $this->getCode();
    }
    if ($fromStore !== false) {
        $storeParsedQuery['___from_store'] = $fromStore === true ? Mage::app()->getStore()->getCode() : $fromStore;
    }

    return $storeParsedUrl['scheme'] . '://' . $storeParsedUrl['host']
    . (isset($storeParsedUrl['port']) ? ':' . $storeParsedUrl['port'] : '')
    . $storeParsedUrl['path'] . $requestString
    . ($storeParsedQuery ? '?'.http_build_query($storeParsedQuery, '', '&') : '');
}

}

答案 1 :(得分:-1)

在magento admin in

Catalog->Manage categories

选择类别并选择优先存储视图。在那里你应该编辑并保存“URL key”参数。

如果它仍然显示旧的URL - 清理缓存并使url重写reindex。