#php #magento #redirect
#php #magento #перенаправление
Вопрос:
Я хотел бы сделать невидимое перенаправление из хранилища в другое (я настроил multistore) в своем модуле, пока я использую этот фрагмент, но он показывает параметр GET:
echo '<p><a href="' . Mage::getUrl() . '?___store=' . $store . '">pick up this restaurant</a></p>'
Как я могу этого добиться?
Спасибо
Ответ №1:
Вы должны установить COOKIE
для хранилища
Например :
Mage::app()->setCurrentStore($storeViewId);
Mage::app()->getCookie()->set(Mage_Core_Model_Store::COOKIE_NAME, 'de', TRUE);
de = Store code.
Комментарии:
1. Это помогло мне. Напомним, что для переключения хранилищ вам нужно всего две строки кода:
Mage::app()->setCurrentStore($storeViewId); Mage::app()->getCookie()->set(Mage_Core_Model_Store::COOKIE_NAME, $storeViewCode, TRUE);
2. Кроме того, что касается комментария OP, в котором говорится, что он «собирается попробовать более серверное решение», я почти уверен, что это файлы cookie на стороне сервера.
Ответ №2:
Возможно, вы могли бы использовать формы (метод post) и в соответствии с обработанными данными установить хранилище: Mage::app()->setCurrentStore(store_id)
Комментарии:
1. Это то, что я имел в виду, отправьте форму с идентификатором store_id в качестве значения POST, измените хранилище с помощью функции magento setCurrentStore и перенаправьте на домашнюю страницу, но я пока не могу заставить это работать, я собираюсь попробовать еще раз и вернусь сюда, спасибо за предложение.
Ответ №3:
Использование формы POST означает, что при использовании кнопки «Назад» клиенты могут столкнуться с раздражающим сообщением «Эту страницу необходимо обновить» в своем браузере. Другим способом было бы перенаправить с www.example.com/?___store=1
на www.example.com
во время некоторого раннего события, скажем, во время предварительной отправки контроллера. Перенаправлять только при наличии ___store
параметра.
Лучшим способом было бы иметь разные домены для каждого хранилища. Это позволяет полностью исключить ___store
параметр и дает клиенту четкую обратную связь о том, что он находится на правильном сайте.
Комментарии:
1. Это правда, что сообщение «необходимо обновить» может раздражать, я собираюсь попробовать ваше решение, вы знаете, в каком файле находится предварительная отправка контроллера? Что касается многопользовательского решения, у меня есть только одно доменное имя, но я, возможно, изменю свою конфигурацию с multistore на multiwebsite, может ли это переключение конфигурации повлиять на мою текущую проблему здесь?
2. Существует множество контроллеров, вы не можете изменить их все, поэтому прослушайте событие
controller_action_predispatch
, которое происходит для всех контроллеров на всех страницах. Для этого вам нужно будет написать observer .3. Вы можете добавлять разные домены — или просто поддомены — в мультистории, не меняя настройки мультисайта. Все они настроены одинаково.
4. Я принимаю ваш ответ, даже если я переключусь на другой проект прямо сейчас, но он вернется!
Ответ №4:
Вы можете поместить код хранилища в файл cookie и иметь свой index.php проверьте, существует ли файл cookie или нет, если он существует, то он загружает хранилище своим кодом, если нет, показывает хранилище по умолчанию.
Ответ №5:
Добавить код хранилища к URL-адресам вы можете включить это на странице администратора
Комментарии:
1. Я не хочу отображать хранилище кода в URL (даже если это не параметр GET), потому что полный веб-сайт должен выглядеть как уникальное хранилище, оно должно быть прозрачным для пользователя, хотя это была хорошая идея