Tampilan toko atau situs web yang berbeda dalam subfolder

29

Klien ingin toko multistorenya diatur seperti ini:

Ini adalah contoh tetapi mungkin ada banyak subfolder yang berbeda. Apa pendekatan terbaik untuk menangani subfolder yang berbeda untuk tampilan toko / situs web yang berbeda?

Saya tahu bahwa salah satu solusinya adalah membuat subfolder yang disebut de, endll. Dan menyalin index.php dan .htaccess ke dalam subfolder yang sesuai.

Mungkin juga ada beberapa solusi (symlinks untuk index.php, konfigurasi vHost daripada menggunakan .htaccess) untuk meminimalkan duplikasi file tetapi saya ingin menemukan solusi di mana saya tidak perlu melakukan perubahan apa pun dalam sistem file tetapi hanya menangani semuanya dengan konfigurasi.


MEMPERBARUI

Kami memverifikasi dengan dukungan Perusahaan bahwa cara terbaik untuk melakukan ini adalah dengan membuat subfolder.

Kami akhirnya melakukannya seperti ini:

  • Buat direktori "folder bahasa"
  • Membuat salinan index.php di dalam direktori bersama dengan .htaccess dan symlink yang disesuaikan ke folder Magento (app /, errors /, ...)
  • Membuat symlink "de", "en" dll. Di dalam direktori root Magento yang menunjuk ke direktori "languagefolders"

Dengan cara ini kita dapat menambahkan bahasa baru dengan membuat symlink baru (mis. "Fr").

Matthias Zeis
sumber
Kami melakukan ini hanya untuk mengetahui bahwa situs web tidak dapat menemukan produk atau kategori apa pun (Magento 404 / tidak ada rute ke halaman). Apakah Anda menemukan ini juga?
snh_nl
Tidak sejauh yang saya ingat, maaf. Apakah Anda membuat kembali semua indeks?
Matthias Zeis
Kami menggunakan nginx dan pembaruan diperlukan untuk conf agar berfungsi. Saya akan memperbarui komentar saya
snh_nl
2 hal yang lebih aneh. 1) / checkout mengembalikan 404 dan 2) pemilih bahasa: jika saya mengklik bahasa Inggris, lalu klik bahasa Inggris lagi kita melihat bahwa uri terus menambahkan / en / en / en / etc .... apa yang Anda pilih sebagai url dasar? domain.com/en atau didi Anda menyimpannya sebagai domain.com
snh_nl
Kami memilih domain.com/en/.
Matthias Zeis

Jawaban:

18

Sangat mudah untuk melayani banyak domain / jalur berdasarkan URL. Seperti disebutkan, pengaturan termudah (hanya konfigurasi) dimungkinkan ketika core/storekode unik dapat digunakan di jalur sebagai subfolder . Ini membutuhkan salah satu dari yang berikut:

  1. Pengunjung ditautkan ke jalur subfolder yang benar pada awalnya
  2. Pengunjung dilayani halaman arahan dari mana mereka memilih toko mereka dan menerima cookie
  3. Beberapa mekanisme digunakan untuk mengatur run type dan run code sebelum PHP menangani respons

Mengenai # 3: sejak 1.4 Magento, memungkinkan server Web untuk menentukan konteks yang berjalan ( situs web atau toko ) serta kode tertentu yang harus digunakan. Dari 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);

Sedangkan variabel lingkungan digunakan untuk menginisialisasi aplikasi, dimungkinkan untuk mempengaruhi sistem bahkan sebelum PHP berputar. Dengan Apache dan mod_rewriteini bisa dilakukan untuk subfolder dengan sedikit tipu daya:

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

Apache gugup dengan variabel lingkungan dan subfolder, seperti yang ditunjukkan oleh jawaban SO yang luar biasa ini . Dua baris awal menghasilkan $_SERVER["REDIRECT_MAGE_RUN_CODE"] = 'deutsch';sedangkan dua baris terakhir menyediakan yang dibutuhkan $_SERVER["MAGE_RUN_CODE"] = 'deutsch';. Ada banyak trik lain, tetapi hal di atas telah menggigit saya sebelumnya.

Sasaran akhir haruslah deteksi awal sebanyak yang wajar (geoip + multi-bahasa) sambil membuat pengguna mengatur cookie toko yang dapat digunakan untuk mem-bypass / melangkah melalui logika dalam permintaan berikutnya.

tanda batas
sumber
1
Terima kasih, Ben. Melakukannya dengan cara ini, saya dapat menginisialisasi tampilan toko tetapi saya selalu mendapatkan halaman Magento 404 ("Aduh, yang buruk"). Saya mengatur URL dasar ke domain1.org/en , domain.org/de dan sebagainya. URL Skin, URL Media, dll. Diatur ke domain.org/ (skin | media | ...) Harap dicatat bahwa halaman yang benar dikembalikan jika saya menggunakan pendekatan normal "salin index.php dan .htaccess".
Matthias Zeis
Saya menerima jawaban ini karena mendapatkan yang paling dekat dengan apa yang kami coba capai (bahkan ketika kami menyelesaikannya sedikit berbeda untuk persyaratan khusus kami).
Matthias Zeis
Sangat terkejut bahwa pengaturan "Tambahkan Kode Toko ke URL" tidak berfungsi.
patokan
Kode toko harus unik. Bagaimana cara kerjanya dengan beberapa tampilan toko yang semuanya diakhiri dengan de /, fr / atau en /?
Matthias Zeis
Saya pikir saya melewatkan kode toko yang direplikasi, meskipun saya pikir saya mengasumsikan penulisan ulang berbasis server Web (mis. mode_rewrite) Berdasarkan HTTP_HOST+ subfolder level 1.
tanda
9

Jika URL lekukan (subfolder) dapat memiliki nama yang sama seperti kode toko (mengapa tidak?), Anda dapat dengan mudah mengaktifkannya Configuration > Web > Url options > Add Store Code to Urls.

Alex
sumber
Benar, maka Anda bahkan tidak perlu subfolder. selama penulisan ulang url diaktifkan, Magento akan tahu bahwa "en" adalah kode tampilan toko dan tidak mencari subfolder.
Paul Grigoruta
8
Masalah dengan solusi ini adalah, Magento hanya memperbolehkan satu kode toko "de" di instalasi Magento. Jadi, jika Anda memiliki beberapa situs web dengan bahasa yang sama Anda harus menggunakan kode penyimpanan yang berbeda, misalnya de_de, de_en, ...
therouv
2
Rouven mengerti. Masalahnya adalah Anda tidak dapat memiliki beberapa toko dengan kode toko yang sama.
Anna Völkl
Ya, masalahnya adalah - seperti yang dikatakan Rouven - Anda tidak dapat memiliki dua tampilan toko menggunakan kode toko yang sama.
Matthias Zeis
Saya mengkonfirmasi bahwa Rouven benar. Bug dilaporkan ke Magento. Karena dalam lingkungan modern ini dengan lebih banyak multistores, ini seharusnya berfungsi. Namun, menurut Anda apakah mungkin untuk menjadikan pengaturan Add store codes to urlsebagai pengaturan tampilan toko? magento.stackexchange.com/questions/60686/… = misalkan ada 1 multistore dengan sep domain, yang lain menggunakan / en dan / fr
snh_nl
3

kami akhirnya melakukan hal itu

Kami memverifikasi dengan dukungan Perusahaan bahwa cara terbaik untuk melakukan ini adalah dengan membuat subfolder.

Kami akhirnya melakukannya seperti ini:

  • Buat direktori "folder bahasa"
  • Membuat salinan index.php di dalam direktori bersama dengan .htaccess dan symlink yang disesuaikan ke folder Magento (app /, errors /, ...)
  • Membuat symlink "de", "en" dll. Di dalam direktori root Magento yang menunjuk ke direktori "languagefolders"

Dengan cara ini kita dapat menambahkan bahasa baru dengan membuat symlink baru (mis. "Fr").

Di backend kita atur toko base urlkedomain.com/en

Jika Anda menggunakan nginx, pembaruan diperlukan untuk pemrosesan lokasi Anda untuk memproses index.php juga di sub folder baru. Ini perlu dilakukan untuk setiap folder terjemahan baru

snh_nl
sumber
snh_nl Apakah ada kemungkinan Anda menjelaskan apa arti 2 baris terakhir Anda? Saya memiliki masalah yang sama seperti yang Anda katakan sebelumnya tetapi saya tidak bisa mengerti: Jika Anda menggunakan nginx, pembaruan diperlukan untuk pemrosesan lokasi Anda untuk memproses index.php juga di folder baru. Ini perlu dilakukan untuk setiap folder terjemahan baru. Saya menggunakan nginx dan saya mencoba melakukan hal yang sama. Terima kasih
vbak
location @rewrite { rewrite /(../)? /$1index.php; }
snh_nl
2

Ada entri di basis pengetahuan resmi Magento yang menjelaskan hal itu.

Jika Anda bekerja dengan Apache, pastikan semua entri Virtual Host (untuk setiap domain) mengarah ke root dokumen yang sama di mana instalasi Magento Anda berada. Itu untuk banyak domain.

Hal berikutnya (dan yang terakhir) adalah .htaccess di folder instalasi Magento yang sama. .htaccess adalah file konfigurasi tingkat direktori yang kuat di mana Anda dapat menetapkan aturan-tindakan per setiap permintaan server. Jadi, Anda perlu menangani semua tindakan (sub) domain / folder yang berbeda di sana dan mengatur variabel server yang benar yang digunakan Magento pada tahap inisialisasi.

Setelah selesai dengan konfigurasi server, Anda harus menetapkan jalur dasar yang berbeda untuk setiap toko di admin Magento (sistem - konfigurasi - umum - web).

Jadi pastikan Anda mengikuti panduan resmi (yang juga merupakan cara yang disukai) dan semuanya akan berjalan lancar.

Jernej Golja
sumber
1
Pertanyaannya bukan tentang banyak domain.
Fabian Schmengler
Pertanyaannya adalah tentang pengaturan multistore DENGAN DOMAIN BERGANDA (.org dan .ch adalah domain yang berbeda). Tapi itu tidak penting, karena jawaban yang diberikan menjelaskan solusi untuk pengaturan multistore terlepas apakah Anda memiliki beberapa domain, subdomain atau hanya subfolder yang berbeda untuk setiap toko Anda.
Jernej Golja
1
Tetapi fokusnya adalah pada jalur untuk tampilan toko, itu tidak terdengar seperti domain adalah masalah. Bagaimanapun, setelah edit Anda, saya mengubah suara saya.
Fabian Schmengler
1
Persisnya, masalahnya bukan bahwa banyak domain harus digunakan tetapi beberapa toko harus berbagi jalur / "subfolder" yang sama yang tidak mungkin dengan menambahkan kode toko ke URL.
Matthias Zeis
-2

Pertama, Anda harus melakukan beberapa konfigurasi di panel admin Magento, lalu buat subdirektori, dan pindahkan index.php dan .htaccess ke subdirektori, dan buat beberapa perubahan kecil pada index.php.

Ini adalah contoh lengkap bagaimana melakukan ini.

pengusaha licik
sumber