Przechowuj kod w adresie URL dla każdego widoku sklepu, z wyjątkiem domyślnego

10

Włączyłem System > Konfiguracja > Internet > Dodaj kod sklepu do adresów URL i skonfigurowałem nowy widok sklepu dla Kanady (/ ca /).

Chciałbym idealnie mieć example.com/ca/ załadować Canada Store View, ale nadal mieć example.com (bez defaultkodu sklepu) dla domyślnego sklepu.

Zauważyłem, że strona główna działa pod tym względem dobrze, ale kiedy wchodzę na stronę produktu, Magento automatycznie dołącza kod sklepu do adresu URL.

Głównym powodem, dla którego waham się zmienić nasze obecne adresy URL dla naszego domyślnego sklepu, jest to, że nie chciałbym widzieć, jak tracą sok z linków. Wiem, że teoretycznie dopóki skonfiguruję przekierowania 301, powinienem być w porządku, ale myślę, że gdzieś przeczytałem, że niewielka ilość soku wciąż jest tracona.

Myślę też, że jest to prawdopodobnie nieco lepsze z punktu widzenia użyteczności. Jeśli większość ruchu przypada na Twój domyślny sklep, a Twoi klienci są przyzwyczajeni do zwykłego adresu URL, po co zawracać im głowy dodatkowymi /default/( /us/lub jakikolwiek innymi) adresami URL.

Próbowałem wyłączyć opcję Dodaj kod sklepu do adresów URL i po prostu zmienić podstawowy adres URL mojego sklepu w Kanadzie na example.com/ca/, ale to nic nie zrobiło. Zakładam, że wymaga włączonego ustawienia, aby pobrać kod sklepu z adresu URL i zrobić z nim wszystko.

kalenjordan
źródło

Odpowiedzi:

9

Nie cieszyłem się, dodając kod sklepu do adresów URL . Głównym powodem było to, że nie mogliśmy mieć kilku widoków sklepu używających tego samego języka (patrz moje pytanie ). Poza tym nie podobało mi się, że muszę używać złego kodu widoku sklepu tylko z powodu adresu URL.

Zrobiłem mały test, używając często zalecanej wskazówki „utwórz podfolder i utwórz dowiązania symboliczne” i może to działać. Sprawdź, czy ci się podoba.

  • Utwórz podfolder / ca /
  • W podfolderze utwórz dowiązania symboliczne
    • ../app
    • ../errors
    • ../ zawiera
    • ../index.php
    • ../js
    • ../lib
    • ../głoska bezdźwięczna
    • ../skóra
    • ../var
    • (dodaj inne katalogi, jeśli chcesz / potrzebujesz)
  • edytuj konfigurację vHost dla / ca / ​​(lub skopiuj .htaccess do / ca / ​​i edytuj) do

    • Ustaw bazę przepisywania:

      RewriteBase /ca/

    • Zainicjuj poprawny widok sklepu na podstawie adresu URL. Można to zrobić na wiele sposobów, jednym z nich może być:

      RewriteCond %{REQUEST_URI} ^/ca/.* [NC,OR]
      RewriteCond %{REQUEST_URI} ^/ca$ [NC]
      RewriteRule .* - [E=MAGE_RUN_CODE:ca]
      RewriteCond %{ENV:REDIRECT_MAGE_RUN_CODE} (.+)
      RewriteRule .* - [E=MAGE_RUN_CODE:%1,E=MAGE_RUN_TYPE:store]`

To działało dla mnie:

Tworzenie folderów i dowiązań symbolicznych nie jest fajne, ale przynajmniej nie musisz edytować podstawowych plików.

Matthias Zeis
źródło
2
Musisz tylko utworzyć dowiązania symboliczne dla mediów, js i skórki, a następnie edytować ścieżkę klasy Mag do ../app/Mage.php. O ile wiem, to powinno wystarczyć
Sander Mangel
2
Tak, jeśli chcesz edytować podstawowe pliki.
Matthias Zeis,
@MatthiasZe przepraszam, że tak długo trwa akceptacja! Czasami gubię powiadomienia SE i trudno je oznaczyć jako nieprzeczytane. Zapraszam do pingowania mnie na Twitterze w przyszłości, jeśli wezmę wieczność, aby zaznaczyć odpowiedź jako zaakceptowaną! Przynajmniej za pomocą Twittera możesz ulubionego tweeta, aby pamiętać, aby do niego wrócić. Przepraszam i jeszcze raz dziękuję za pomoc tutaj! Świetna odpowiedź!
kalenjordan
Bez obaw! Cieszę się, że mogłem pomóc.
Matthias Zeis
2
Świetna rada! Dwa możliwe uproszczenia: 1) Od utworzyć oddzielne konfiguracje vhosta lub plików .htaccess do podkatalogu, można zainicjować sklepu widok prosty bez warunków: SetEnv MAGE_STORE_VIEW ca. RewriteBasez drugiej strony zwykle nie jest konieczne. 2) Wystarczy ustawić dowiązania symboliczne do index.php i aplikacji, jeśli ustawisz tylko podstawowy adres URL linku na / ca / ​​i pozostawisz domyślną konfigurację podstawowego adresu URL
Fabian Schmengler
1

Na podstawie odpowiedzi mzeis i komentarza fschmenglera , oto KISS sposób:

  1. Utwórz podkatalog ca:mkdir ca
  2. Utwórz dowiązanie symboliczne do appkatalogu:ln -s ../app/ ca/app
  3. Utwórz dowiązanie symboliczne do index.phppliku:ln -s ../index.php/ ca/index.php
  4. Utwórz .htaccessplik w cakatalogu: touch ca/.htaccesso następującej treści:

    SetEnv MAGE_RUN_CODE ca
    
    RewriteEngine On
    RewriteBase /en/
    
    # solves the issue that the environment variable MAGE_RUN_CODE is only available as REDIRECT_MAGE_RUN_CODE
    # see http://stackoverflow.com/a/10128290/719023 for details
    RewriteOptions inherit
  5. Pod System > Configuration > Web, ustawić Base Link URLsię {{unsecure_base_url}}ca/i {{secure_base_url}}ca/odpowiednio.

Jeśli z jakiegoś powodu RewriteOptions inheritczęść nie jest dla Ciebie możliwa, możesz po prostu skopiować domyślną mod_rewriteczęść do .htaccesspliku podkatalogu.

To rozwiązanie powinno działać tak dobrze, jak rozwiązanie Mzeis, ale jest o wiele mniejsze i łatwiejsze.

Szymon
źródło
0

inną opcją jest użycie poddomeny na sklep. Następnie wystarczy skonfigurować Apache, aby informował magento, której „strony / sklepu” użyć.

W ten sposób możesz mieć wiele „sklepów” i „widoków” pod stronami poddomeny, wszystkie w tej samej instalacji Magento.

  • ustawienia znajdują się w System> Konfiguracja> Ogólne / Internet
  • Niezabezpieczony. Podstawowy adres URL
  • Bezpieczne . Podstawowy adres URL
  • Ciastko . Domena

to jest konfiguracja Apache sklepu przyklad.com

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/

    DirectoryIndex index.php

    <Directory "/var/www/html/" >
        AllowOverride All
    </Directory>

    SetEnv MAGE_RUN_CODE "default"
    SetEnv MAGE_RUN_TYPE "Website"
</VirtualHost>

jest to dodatkowa konfiguracja Apache sklepu „ca”

<VirtualHost *:80>
    AllowEncodedSlashes On

    ServerName ca.example.com
    ServerAdmin [email protected]
    DocumentRoot /var/www/html/

    DirectoryIndex index.php

    <Directory "/var/www/html/" >
        AllowOverride All
    </Directory>

    SetEnv MAGE_RUN_CODE "ca"
    SetEnv MAGE_RUN_TYPE "Website"
</VirtualHost>
Artistan
źródło
0

Juste dodaj to do jednego z plików system.xml (w app / code / local module):

<sections>
    <web>
        <groups>
            <url>
                <fields>
                    <use_store>
                        <show_in_store>1</show_in_store>
                    </use_store>
                </fields>
            </url>
        </groups>
    </web>
</sections>

W ten sposób możesz wybrać opcję „Dodaj kod sklepu do adresów URL” dla widoku sklepu.

Nverhoye
źródło
Możesz to wybrać. Ale czy jesteś pewien, że to naprawdę działa?
Fabian Schmengler
Tak, testowane na magento 1.9.x i magento EE 1.13.x
nverhoye
Byłoby wspaniale, gdyby to faktycznie działało, ale nie byłem w stanie sprawić, by działało to w jednej witrynie i wielu widokach sklepu. Testowane na CE 1.9.2.3.
Aad Mathijssen
nie pracował dla mnie
Visakh B Sujathan