Różne widoki sklepów lub strony internetowe w podfolderach

29

Klient chce, aby jego sklep z wieloma sklepami był skonfigurowany w następujący sposób:

To jest przykład, ale może być o wiele więcej różnych podfolderów. Jakie jest najlepsze podejście do obsługi różnych podfolderów dla różnych widoków / witryn sklepów?

Wiem, że jednym z rozwiązań jest stworzenie podfoldery o nazwie de, enitd. I skopiuj index.php i .htaccess do odpowiednich podfolderów.

Mogą też występować pewne obejścia (dowiązania symboliczne do index.php, konfiguracja vHost zamiast .htaccess) w celu zminimalizowania duplikacji plików, ale chciałbym znaleźć rozwiązanie, w którym nie muszę wprowadzać żadnych zmian w systemie plików, ale po prostu obsłużyć wszystko przez konfigurację.


AKTUALIZACJA

W ramach wsparcia dla przedsiębiorstw zweryfikowaliśmy, że najlepszym sposobem na to jest utworzenie podfolderów.

Skończyło się to tak:

  • Utwórz katalog „folderów językowych”
  • Utworzono kopię pliku index.php w katalogu wraz z dostosowanym plikiem .htaccess i dowiązaniami symbolicznymi do folderów Magento (app /, error /, ...)
  • Utworzono dowiązania symboliczne „de”, „en” itp. W katalogu głównym Magento, wskazując katalog „folderów językowych”

W ten sposób możemy dodać nowy język, tworząc nowe dowiązanie symboliczne (np. „Fr”).

Matthias Zeis
źródło
Zrobiliśmy to tylko po to, aby stwierdzić, że strona internetowa nie może znaleźć żadnego produktu ani kategorii (Magento 404 / brak trasy do strony). Czy też to spotkałeś?
snh_nl
Przykro mi, nie tak daleko jak pamiętam. Czy ponownie utworzyłeś wszystkie indeksy?
Matthias Zeis
Używamy nginx i konieczna jest aktualizacja konf, aby działała. Zaktualizuję mój komentarz
snh_nl
2 kolejne dziwne rzeczy. 1) / checkout zwraca 404 i 2) selektor języka: jeśli kliknę angielski, a następnie ponownie angielski, widzimy, że uri ciągle dodaje / en / en / en / etc .... co wybrałeś jako podstawowy adres URL? domain.com/en lub didi trzymasz go jako domain.com
snh_nl 30.04.15
Wybraliśmy domain.com/en/.
Matthias Zeis

Odpowiedzi:

18

Obsługiwanie wielu domen / ścieżek na podstawie adresów URL jest bardzo łatwe. Jak wspomniano, najłatwiejsza konfiguracja (tylko konfiguracja) jest możliwa, gdy unikalne core/storekody mogą być użyte w ścieżce jako podfoldery . Wymaga to jednej z następujących czynności:

  1. Odwiedzający są początkowo połączeni z prawidłową ścieżką do podfolderu
  2. Odwiedzającym wyświetlana jest strona docelowa, z której wybierają sklep i otrzymują ciasteczko
  3. Niektóre mechanizmy są używane do ustawiania typu uruchomienia i kodu uruchamiania przed obsługą PHP przez odpowiedź

Odnośnie # 3: od wersji 1.4 Magento umożliwiło serwerowi sieciowemu określenie działającego kontekstu ( strony internetowej lub sklepu ), a także konkretnego kodu, który powinien zostać użyty. From index.php :

/* Store or website code */
$mageRunCode = isset($_SERVER['MAGE_RUN_CODE']) ? $_SERVER['MAGE_RUN_CODE'] : '';

/* Run store or run website */
$mageRunType = isset($_SERVER['MAGE_RUN_TYPE']) ? $_SERVER['MAGE_RUN_TYPE'] : 'store';

Mage::run($mageRunCode, $mageRunType);

Podczas gdy zmienne środowiskowe są używane do inicjalizacji aplikacji, istnieje możliwość wpływania na system jeszcze przed uruchomieniem PHP. Z Apache i mod_rewritemożna to zrobić dla podfolderów z odrobiną oszustwa:

RewriteCond %{REQUEST_URI} ^/de/$
RewriteRule .* - [E=MAGE_RUN_CODE:deutsch]
RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+)
RewriteRule .* - [E=MAGE_RUN_CODE:%1]

Apache jest niepewny ze zmiennymi środowiskowymi i podfolderami, o czym świadczy ta doskonała odpowiedź SO . Pierwsze dwa wiersze dają wynik, $_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch';podczas gdy dwa ostatnie wiersze zapewniają potrzebne $_SERVER["MAGE_RUN_CODE"] = 'deutsch';. Istnieje wiele innych sztuczek, ale powyższe wcześniej mnie ugryzły.

Ostatecznym celem powinno być wstępne wykrycie, o ile jest to uzasadnione (geoip + obawy dotyczące wielu języków), jednocześnie zachęcając użytkownika do ustawienia pliku cookie sklepu, którego można użyć do obejścia / przejścia przez logikę w kolejnych żądaniach.

zalety
źródło
1
Dzięki, Ben. Robiąc to w ten sposób, mogę zainicjować widoki sklepu, ale zawsze dostaję stronę Magento 404 („Ups, nasze złe”). Ustawiam podstawowy adres URL na domain1.org/en , domain.org/de i tak dalej. URL skóry, URL mediów itp. Są ustawione na domain.org/ (skin | media | ...) Uwaga: zwracane są prawidłowe strony, jeśli używam normalnego podejścia „kopiuj index.php i .htaccess”.
Matthias Zeis
Zaakceptowałem tę odpowiedź, ponieważ zbliża się ona do tego, co próbowaliśmy osiągnąć (nawet jeśli rozwiązaliśmy ją nieco inaczej w przypadku naszych specjalnych wymagań).
Matthias Zeis
Naprawdę zaskoczyło mnie, że ustawienie „Dodaj kod sklepu do adresu URL” nie działa.
benmarks
Kody sklepu muszą być unikalne. Jak powinien działać z kilkoma widokami sklepów, które kończą się na de /, fr / lub en /?
Matthias Zeis,
mode_rewriteHTTP_HOST
Wydaje
9

Jeśli wcięte adresy URL (podfoldery) mogą mieć takie same nazwy jak kody sklepów (dlaczego nie?), Możesz je po prostu włączyć Configuration > Web > Url options > Add Store Code to Urls.

Alex
źródło
Prawidłowo, nie będziesz nawet potrzebował podfolderów. tak długo, jak włączone jest przepisywanie adresów URL, Magento będzie wiedział, że „en” jest kodem widoku sklepu i nie będzie szukał podfolderu.
Paul Grigoruta
8
Problem z tym rozwiązaniem polega na tym, że Magento zezwala tylko na jeden kod sklepu „de” w instalacji Magento. Więc jeśli masz kilka stron internetowych w tych samych językach, musisz użyć różnych kodów sklepu, np. De_de, de_en, ...
therouv
2
Rouven to zrozumiał. Problem polega na tym, że nie można mieć wielu sklepów z tym samym kodem sklepu.
Anna Völkl
Tak, problem polega na tym, że - jak powiedział Rouven - nie można mieć dwóch widoków sklepu korzystających z tego samego kodu sklepu.
Matthias Zeis
Potwierdzam, że Rouven miał rację. Błąd został zgłoszony do Magento. Ponieważ w tych nowoczesnych środowiskach z większą liczbą sklepów wielopoziomowych powinno to działać. Czy jednak uważasz, że byłoby możliwe ustawienie tego ustawienia Add store codes to urlw widoku sklepu? magento.stackexchange.com/questions/60686/... = załóżmy, że jest tam 1 sklep wielostanowiskowy z domenami sep, inne zastosowania / en i / fr
snh_nl
3

tak się skończyło

W ramach wsparcia dla przedsiębiorstw zweryfikowaliśmy, że najlepszym sposobem na to jest utworzenie podfolderów.

Skończyło się to tak:

  • Utwórz katalog „folderów językowych”
  • Utworzono kopię pliku index.php w katalogu wraz z dostosowanym plikiem .htaccess i dowiązaniami symbolicznymi do folderów Magento (app /, error /, ...)
  • Utworzono dowiązania symboliczne „de”, „en” itp. W katalogu głównym Magento, wskazując katalog „folderów językowych”

W ten sposób możemy dodać nowy język, tworząc nowe dowiązanie symboliczne (np. „Fr”).

W backendie ustawiliśmy sklep base urlnadomain.com/en

Jeśli używasz nginx, konieczna jest aktualizacja przetwarzania lokalizacji w celu przetworzenia pliku index.php również w nowym podfolderze. Należy to zrobić dla każdego nowego folderu tłumaczenia

snh_nl
źródło
snh_nl Czy jest szansa, że ​​wyjaśnisz, co oznaczają twoje ostatnie 2 linie? Mam ten sam problem, o którym mówiłeś wcześniej, ale nie rozumiem: jeśli używasz nginx, konieczna jest aktualizacja przetwarzania lokalizacji, aby przetworzyć plik index.php również w nowym podfolderze. Należy to zrobić dla każdego nowego folderu tłumaczenia. Używam nginx i próbuję zrobić to samo. Dzięki
vbak
location @rewrite { rewrite /(../)? /$1index.php; }
snh_nl
2

W oficjalnej bazie wiedzy Magento znajduje się wpis, który dokładnie to opisuje.

Jeśli pracujesz z Apache, upewnij się, że wszystkie wpisy hosta wirtualnego (dla każdej domeny) wskazują ten sam katalog główny dokumentu, w którym znajduje się instalacja Magento. To dotyczy wielu domen.

Następną (i ostatnią) rzeczą jest .htaccess w tym samym folderze instalacyjnym Magento. .htaccess to potężny plik konfiguracyjny na poziomie katalogu, w którym można ustawić działania reguł dla każdego żądania serwera. Musisz więc obsłużyć wszystkie różne działania (pod) domen / folderów i ustawić prawidłowe zmienne serwera, których Magento używa na etapie inicjalizacji.

Po zakończeniu konfiguracji serwera będziesz musiał ustawić różne ścieżki podstawowe dla każdego sklepu w Magento admin (system - konfiguracja - ogólnie - sieć).

Upewnij się więc, że postępujesz zgodnie z oficjalnym przewodnikiem (który jest również preferowanym sposobem), a wszystko powinno działać płynnie.

Jernej Golja
źródło
1
Pytanie nie dotyczyło wielu domen.
Fabian Schmengler,
Pytanie dotyczyło konfiguracji wielu sklepów z wieloma domenami (.org i .ch to różne domeny). Nie ma to jednak znaczenia, ponieważ podana odpowiedź opisuje rozwiązanie konfiguracji wielu sklepów, niezależnie od tego, czy masz wiele domen, subdomen, czy po prostu różne podfoldery dla każdego ze swoich sklepów.
Jernej Golja
1
Ale skupiono się na ścieżkach widoków sklepu, nie brzmiało to tak, jakby domeny były problemem. W każdym razie po waszej edycji zmieniłem swój głos.
Fabian Schmengler
1
Dokładnie problem nie polega na tym, że trzeba użyć wielu domen, ale że kilka sklepów musi mieć tę samą ścieżkę / „podfolder”, co nie jest możliwe poprzez dodanie kodów sklepów do adresu URL.
Matthias Zeis
-2

Najpierw musisz wykonać konfigurację w panelu administracyjnym Magento, następnie utworzyć podkatalog, przenieść katalog index.php i .htaccess do podkatalogu i wprowadzić niewielkie zmiany w pliku index.php.

Oto kompletny przykład tego, jak to zrobić.

manewrowy
źródło