переключить хранилище без параметра GET в Magento

#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), потому что полный веб-сайт должен выглядеть как уникальное хранилище, оно должно быть прозрачным для пользователя, хотя это была хорошая идея