Переключатель языка Magento: названия категорий не переводятся в url

У меня есть магазин с двумя видами на два языка, итальянский и английский.

Для некоторых категорий у меня есть разные названия для итальянского и английского, например Apparel for EN и Abbig охраной для ИТ.

Проблема в том, что, когда я нахожусь в mystore.com/it/abbig Parliamento, если я переключаю язык на английский, переключатель языка переводит меня на mystore.com/en/abbigmentaryo вместо mystore.com/en/apparel и выдает ошибку 404 .

переключатель языка изменяет идентификатор магазина, но не переводит название категории

спасибо, Пьетро.


person pietrosld    schedule 20.02.2012    source источник
comment
только что обнаружил проблему с Magento для этой проблемы magentocommerce.com/bug-tracking/ issue /? issue = 12829   -  person pietrosld    schedule 22.02.2012
comment
Ссылки теперь мертвы :-( Но я отправил ответ \ o /   -  person Alex    schedule 24.03.2016


Ответы (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, '', '&') : '');
}

}
person Alex    schedule 24.03.2016

В админке Magento в

Catalog->Manage categories

Выберите категорию и выберите предпочтительный вид магазина. Здесь вы должны отредактировать и сохранить параметр «URL-ключ».

Если он по-прежнему показывает старый URL - очистите кеш и сделайте переиндексирование URL-адреса.

person Jevgeni Smirnov    schedule 21.02.2012
comment
уже сделано, URL-адрес работает нормально. Проблема в том, что переключатель языка поместил неправильный ключ URL-адреса категории в URL-адрес переключателя. Функция, которая дает мне изношенные URL-адреса, имеет вид $ _lang- ›getCurrentUrl (false) в add / design / frontend / base / default /template/page/switch/languages.phtml все равно спасибо :) - person pietrosld; 21.02.2012