Різні перегляди магазинів або веб-сайти в підпапках


29

Клієнт хоче, щоб його багатоповерховий магазин був налаштований так:

Це приклад, але може бути набагато більше різних підпапок. Який найкращий підхід для обробки різних підпапок для різних представлень магазинів / веб-сайтів?

Я знаю , що одне рішення для створення вкладених папок називається de, і enт.д. , і скопіювати index.php і .htaccess в відповідні папки.

Також можуть бути деякі шляхові вирішення (посилання на конфігурацію index.php, vHost замість використання .htaccess), щоб мінімізувати дублювання файлів, але я хотів би знайти рішення, де мені не потрібно робити жодних змін у файловій системі, а просто обробляти все за конфігурацією.


ОНОВЛЕННЯ

Ми підтримали підтримку Enterprise, що найкращий спосіб зробити це - створивши підпапки.

Ми закінчили це так:

  • Створіть каталог "мовних папок"
  • Створено копію index.php всередині каталогу разом із скоригованим .htaccess і посиланням на папки Magento (додаток /, помилки /, ...)
  • Створені символьні посилання "de", "en" і т. Д. Всередині кореневого каталогу Magento, що вказує на каталог "languagefolders"

Таким чином ми можемо додати нову мову, створивши нове символьне посилання (наприклад, "fr").


Ми зробили це лише для того, щоб виявити, що веб-сайт не може знайти жодного товару чи категорії (Magento 404 / немає маршруту на сторінку). Чи стикалися ви і з цим?
snh_nl

Не наскільки я пам’ятаю, вибачте. Ви створили всі індекси?
Маттіас Зейс

Ми використовуємо nginx, і для оновлення потрібне оновлення для конф. Я
оновлю

Ще 2 дивні речі. 1) / checkout повертає 404 та 2) вибір вибору мови: якщо я натискаю англійську, потім знову клацніть англійською, ми бачимо, що урі продовжує додавати / en / en / en / тощо .... що ви вибрали як базовий URL? domain.com/en або didi ви зберігаєте це як domain.com
snh_nl

Ми вибрали domain.com/en/.
Маттіас Зейс

Відповіді:


18

Обслуговувати кілька доменів / шляхів на основі URL-адрес дуже просто. Як уже згадувалося, найпростіша настройка (лише для конфігурації) можлива, коли унікальні core/storeкоди можуть бути використані на шляху як підпапки . Для цього потрібно одне з наступних:

  1. Відвідувачі спочатку пов'язані з правильним шляхом до папки
  2. Відвідувачам подається цільова сторінка, з якої вони вибирають свій магазин і отримують печиво
  3. Деякий механізм використовується для встановлення типу запуску та коду запуску перед тим, як PHP обробляє відповідь

Щодо №3: починаючи з Magento 1.4, це дозволило дозволити веб-серверу визначати робочий контекст ( веб-сайт чи магазин ), а також конкретний код, який слід використовувати. Від 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);

Тоді як змінні середовища використовуються для ініціалізації програми, можна впливати на систему до того, як PHP навіть розкручується. Завдяки Apache mod_rewriteце можна зробити для папок з невеликою хитрістю:

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

Про те, що це чудова відповідь SO , продемонстрував Apache, що змінює змінні середовища та папки . Початкові два рядки призводять до $_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch';того, що два останні рядки забезпечують необхідне $_SERVER["MAGE_RUN_CODE"] = 'deutsch';. Існують численні інші хитрощі, але вище сказане мене вкусило раніше.

Кінцевою метою має бути початкове виявлення настільки, наскільки це розумно (геоіп + багатомовні проблеми), отримуючи при цьому користувач встановлювати файл cookie магазину, який може використовуватися для обходу / переходу через логіку в наступних запитах.


1
Спасибі, Бен. Роблячи це таким чином, я можу ініціалізувати перегляд магазинів, але я завжди отримую сторінку Magento 404 ("На жаль, наші погані"). Я встановлюю базову URL-адресу на domain1.org/en , domain.org/de тощо. URL-адреса шкіри, URL-адреса медіа тощо встановлюються на domain.org/ (скін | медіа | ...) Будь ласка, зауважте, що правильні сторінки повертаються, якщо я використовую звичайний підхід "копіювати index.php та .htaccess".
Маттіас Зейс

Я прийняв цю відповідь, оскільки вона наближається до того, що ми намагалися досягти (навіть коли ми вирішили її дещо інакше для наших спеціальних вимог).
Маттіас Зейс

Дуже здивований, що налаштування "Додати коду магазину до URL-адреси" не працює.
орієнтири

Коди магазинів повинні бути унікальними. Як слід працювати з кількома переглядами магазину, які закінчуються на de /, fr / або en /?
Маттіас Зейс

Я думаю, що я пропустив повторені коди магазину, хоча, думаю, я припускав деякий перезапис на основі веб-сервера (наприклад mode_rewrite) на основі HTTP_HOST+ рівня підпапок 1.
орієнтири

9

Якщо відрізні URL-адреси (підпапки) можуть мати те саме ім’я, як коди магазину (чому б і ні?), Ви можете його просто ввімкнути Configuration > Web > Url options > Add Store Code to Urls.


Правильно, тоді вам навіть не потрібні будуть папки. доки ввімкнено перезапис URL-адрес, Magento буде знати, що "en" - код перегляду магазину, і не шукатиме підпапки.
Павло Григорута

8
Проблема цього рішення полягає в тому, що Magento допускає лише один код магазину "de" в установці Magento. Отже, якщо у вас є кілька веб-сайтів з однаковими мовами, ви повинні використовувати різні коди магазинів, наприклад, de_de, de_en, ...
therouv

2
Ровен отримав це. Проблема полягає в тому, що ви не можете мати кілька магазинів з одним і тим же кодом магазину.
Anna Völkl

Так, проблема полягає в тому, що - як сказав Рувен - ви не можете мати два представлення магазину, використовуючи один і той же код магазину.
Маттіас Зейс

Я підтверджую, що Рувен це правильно зрозумів. Повідомлено про помилку в Magento. Тому що в цих сучасних середовищах з більшою кількістю багатоповерхівок це повинно працювати. Однак, на вашу думку, можна було б зробити налаштування Add store codes to urlперегляду магазину? magento.stackexchange.com/questions/60686/… = припустимо, є 1 багатоповерхівка з доменами sep, інші користування / en та / fr
snh_nl

3

ми в кінцевому підсумку робили саме це

Ми підтримали підтримку Enterprise, що найкращий спосіб зробити це - створивши підпапки.

Ми закінчили це так:

  • Створіть каталог "мовних папок"
  • Створено копію index.php всередині каталогу разом із скоригованим .htaccess і посиланням на папки Magento (додаток /, помилки /, ...)
  • Створені символьні посилання "de", "en" і т. Д. Всередині кореневого каталогу Magento, що вказує на каталог "languagefolders"

Таким чином ми можемо додати нову мову, створивши нове символьне посилання (наприклад, "fr").

У бекенда ми встановлюємо магазин base urlвdomain.com/en

Якщо ви використовуєте nginx, для його обробки потрібне оновлення, щоб обробити index.php також у новій підпапці. Це потрібно зробити для кожної нової папки перекладу


snh_nl Чи є шанс пояснити, що означають ваші останні 2 рядки? У мене є та сама проблема, про яку ви говорили раніше, але я не можу зрозуміти: Якщо ви використовуєте nginx, для обробки index.php також потрібно оновити обробку свого місця в новій підпапці. Це потрібно зробити для кожної нової папки перекладу. Я використовую nginx і намагаюся зробити те саме. Дякую
vbak

location @rewrite { rewrite /(../)? /$1index.php; }
snh_nl

2

В офіційній базі знань Magento є запис, який описує саме це.

Якщо ви працюєте з Apache, переконайтеся, що всі записи віртуального хоста (для кожного домену) вказують на той самий корінь документа, де лежить ваша установка Magento. Це для кількох доменів.

Наступна (і остання) річ - .htaccess у тій же папці установки Magento. .htaccess - це потужний файл конфігурації на рівні каталогів, де ви можете встановити правила-дії для кожного запиту сервера. Таким чином, вам потрібно буде обробляти всі різні дії (суб) доменів / папок там і встановлювати правильні змінні сервера, які Magento використовує на етапі ініціалізації.

Після завершення налаштування сервера вам доведеться встановити різні базові шляхи для кожного магазину в адміністраторі Magento (система - конфігурація - загальне - веб).

Тому переконайтесь, що ви дотримуєтесь офіційного керівництва (що також є бажаним способом), і все має працювати безперебійно.


1
Питання стосувалося не кількох доменів.
Фабіан Шменглер

Питання стосувалося налаштування багатоповерхових ЗОЛОГИХ ДОМЕЙ (.org та .ch - різні домени). Це не важливо, тому що надана відповідь описує рішення для налаштування багатоповерхових програм незалежно від того, чи є у вас кілька доменів, субдоменів або просто різні підпапки для кожного з ваших магазинів.
Jernej Golja

1
Але увага зосереджувалася на шляхах перегляду магазинів, але це не звучало як проблема з доменами. У будь-якому випадку, після Вашої редакції я змінив свій голос.
Фабіан Шменглер

1
Саме проблема полягає не в тому, що потрібно використовувати кілька доменів, а в тому, що декілька магазинів мають спільний шлях / "папку", що неможливо, додавши коди магазину до URL-адреси.
Маттіас Зейс

-2

Спочатку потрібно виконати деяку конфігурацію на панелі адміністратора Magento, потім створити підкаталог та перемістити index.php та .htaccess у підкаталог та внести деякі незначні зміни до index.php.

Ось повний приклад того, як це зробити.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.