Многоуровневый продукт Magento просмотреть категорию переписать URL

Разработчик новичка Magento здесь, но я постараюсь сохранить его структурированным.

Архитектура сайта:

  • Magento 1.8
  • Мульти-магазин (1 магазин на 1 язык)
  • Слегка модифицированный последним разработчиком (я думаю, что большинство, если не все файлы ядра находятся в первозданном, нетронутом состоянии).
  • DressCode Magento Шаблон
  • Сохранить код в URL -> true
  • SEO дружественный URL -> правда

Проблема:

В одном представлении товара (т.е. store.com/en/shoes/guess-green-shoes.html) переключатель магазина в заголовке не генерирует правильный URL-адрес. IE. если я щелкнул по немецкому переключателю, то адрес будет "store.com/de/shoes/guess-grone-schuhe.html", но это должен быть "store.com/de/schuhe/guess-grone-schuhe". HTML".

косвенно это означает, что слаг категории не переводится, и я не знаю, как мне действовать. Какой-нибудь совет от более опытных игроков?

Что я пробовал:

Проверено управление перезаписью URL, где ситуация такова

Путь запроса Целевой путь
правильная_ссылка X
correct_en_link X
correct_it_link X

Корректная ссылка означает, что ссылка в порядке с переведенной категорией и названием продукта. Таким образом, я думаю, что это правильно.

Я также решил, что я бы изменил основные классы Mage_Core_Controller_Request_Http->setPathInfo(); или Mage_Core_Model_Store->getCurrentUrl(); Но я думаю, что это излишне и только замаскирует проблему.

Что я буду делать, если не получу ответ:

Я проанализирую строку категории с помощью функции php explode(), а затем переведу ее между магазинами по имени и идентификатору магазина. Затем я добавлю его в магазинный переключатель вручную.

1 ответ

Привет, ребята

Поэтому я углубился в проблему и обнаружил, что она вызвана функцией _rewriteDb в классе Mage_Core_Model_Url_Rewrite_Request.

А именно, переменная get __from_store была "en", "lv".. для разных хранилищ, и ядро ​​Magento пыталось использовать эту переменную для доступа к массиву хранилищ, но вместо этого ему требовался идентификатор хранилища, связанный с кодом хранилища. Поэтому я добавил строку (между " - REWRITE HACK"), чтобы исправить проблему, и теперь все работает как положено.

$fromStore = $this->_request->getQuery('___from_store');
        if (!$this->_rewrite->getId() && $fromStore) {
            $stores = $this->_app->getStores();
            // START - REWRITE HACK
            $fromStore = Mage::app()->getStore( $fromStore )->getId();
            // END - REWRITE HACK

            if (!empty($stores[$fromStore])) {
                /** @var $store Mage_Core_Model_Store */
                $store = $stores[$fromStore];
                $fromStoreId = $store->getId();
            } else {
                return false;
            }
Другие вопросы по тегам