Многоуровневый продукт 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;
}