Secara default URL Key
pada halaman produk Global scoped.
EDIT: Seperti yang disarankan oleh FlorinelChis, ruang lingkupnya bisa berupa perubahan dalam Mengelola atribut. Namun ini merusak perilaku pengalih tampilan toko.
Ini telah diuji pada 1.7.0.2 dengan data sampel dan "Tambahkan kode toko ke URL" diaktifkan :
- mengedit produk dan mengatur url yang berbeda untuk tampilan toko tertentu (Perancis)
- Indeks ulang
- Buka halaman produk di situs pada tampilan toko bahasa inggris
- Beralih ke bahasa Prancis: Anda harus membuat URL halaman
/French/
Beralih kembali ke bahasa Inggris -> 404 halaman kesalahan (url ketinggalan kode toko
/default/
bagaimana membuatnya bekerja dengan benar dengan saklar tampilan toko / bahasa?
Detail:
- URL untuk bahasa Inggris:
/default/sony-vaio-vgn-txn27n-b-11-1-notebook-pc.html
- URL untuk bahasa Prancis:
/french/sony-vaio-vgn-txn27n-b-11-1-notebook-pc-french.html
Jika saya di situs bahasa Inggris di halaman ini -> /default/sony-vaio-vgn-txn27n-b-11-1-notebook-pc.html
Lalu saya beralih ke bahasa Prancis:
Saya mendapatkan URL ini ( kode toko tidak terjawab ):
MAGEDOMAIN/sony-vaio-vgn-txn27n-b-11-1-notebook-pc-french.html
Jadi magento menulis ulang url dengan benar tetapi ketinggalan kode toko karena suatu alasan
Referensi:
Pasti ini terkait dengan /core/model/store.php
dan /core/model/url/rewrite.php
, dan khususnya untuk metode-metode tersebut:
Mage_Core_Model_Url_Rewrite::rewrite
Mage_Core_Model_Store::getCurrentUrl
MEMPERBARUI
Jika Anda menggunakan perbaikan 1.9.1 @Vinai tidak akan berfungsi, periksa jawaban baru yang saya tambahkan
Jawaban:
Masalahnya adalah bug dalam model
Mage_Core_Model_Url_Rewrite_Request
(Magento 1.8) danMage_Core_Model_Url_Rewrite
(versi sebelumnya).Bagian dari kode inti di 1.8 terlihat seperti ini:
Bug: nilai parameter kueri adalah kode toko, (dalam kasus saya
de
,en
ataufr
). Kunci-kunci array yang dikembalikan olehapp->getStores()
adalah ID toko numerik . Karena ituif (!empty($stores[$fromStore])) {
selalu gagal.Setelah bug itu diperbaiki, bug lain menjadi jelas kemudian dengan metode yang sama (saya pikir hanya dalam 1.8):
Url basis objek permintaan selalu adalah base_url Magento, tanpa kode toko. Menggunakan
$currentStore->getBaseUrl()
sebaliknya ada perbaikan bug itu juga.Setelah kedua masalah tersebut diperbaiki, pengalih bahasa berfungsi dengan baik. Berikut ini adalah ekstensi yang tepat untuk Magento 1.8 (CE): https://github.com/Vinai/VinaiKopp_StoreUrlRewrites
Dalam Magento 1.7 masalahnya mungkin sesuatu yang berbeda. Saya masih berpikir saya akan menambahkan jawaban ini, kalau-kalau google membawa orang lain di sini yang menjalankan 1,8 atau lebih baru.
sumber
Sebenarnya saya menemukan solusi untuk masalah ini di Magento 1.7.0.2 jika Anda menjalankan Magento 1.8 melihat penjelasan rinci Vinai:
Tampaknya bagian dari masalah terkait dengan pengontrol permintaan
Mage_Core_Controller_Request_Http
.Jika Anda melihat baris 161 ada kondisi ini:
Mengomentariya memperbaiki kesalahan 404 ketika saya beralih ke Toko yang berbeda di kategori / halaman produk.
Namun untuk beberapa alasan yang tidak diketahui beberapa saat kode toko tidak terjawab dalam Url respons tetapi ini tidak menyebabkan masalah lagi karena kedua url berfungsi sekarang:
Masih belum jelas bagi saya jika komentar tentang kondisi ini dapat menyebabkan masalah lain
sumber
Mage_Core_Controller_Request_Http
tidak dapat ditulis ulang dalam modul.Beberapa info terbaru untuk Magento 1.9.1
Bug @Vinai menunjukkan penampilan yang dipecahkan dalam versi ini karena alasan lain fungsionalitasnya masih rusak (untuk produk yang dapat dikonfigurasi)
Masalah masalah sebenarnya mungkin ada di sini
Mage_Catalog_Model_Resource_Url
namun saya tidak punya waktu dan saya tidak ingin menyentuh bagian inti yang begitu halus.Penjelasan untuk solusinya:
Titik masuk selalu kelas ini
Mage_Core_Model_Url_Rewrite_Request
dan khususnya metode ini_rewriteDb()
Bagaimana cara
_rewriteDb()
kerjanya:(139):
$this->_rewrite->loadByRequestPath($requestCases);
___from_store
parameter(142):
if (!$this->_rewrite->getId() && $fromStore) {
___from_store
:(152):
$this->_rewrite->setStoreId($fromStoreId)->loadByRequestPath($requestCases);
id_path
untuk memuat satu untuk toko saat ini:(159):
$this->_rewrite->setStoreId($currentStore->getId())->loadByIdPath($this->_rewrite->getIdPath());
Semuanya terlihat baik tetapi ada masalah dalam data url_rewrite dan dengan fungsi indeks (setidaknya untuk produk yang dapat dikonfigurasi):
Masalahnya adalah bahwa penulisan ulang ini menunjuk ke yang salah
id_path
(alih-alih menunjuk ke id produk yang dapat dikonfigurasi, melainkan menunjuk ke salah satu id produknya yang sederhana)Sekarang solusinya adalah menghapus
!$this->_rewrite->getId()
kondisi dan magento mencoba mencari pengalihan selalu ketika ada$fromstore
parametercatalog_url
indeks dan menghapus penulisan ulang yang salah.Di sini kode untuk solusi cepat (Anda perlu membuat modul dan menulis ulang
Mage_Core_Model_Url_Rewrite_Request
kelas sendiri):sumber
Kunci URL adalah atribut. Anda dapat mengeditnya dari: Katalog -> Atribut -> Kelola Atribut . Cari url_key dan klik.
Ubah Lingkup dan Simpan.
Sekarang Anda dapat memiliki kunci URL yang berbeda untuk produk di setiap tampilan toko.
sumber
Jadi, Anda ingin mengubah URL untuk setiap tampilan toko?
Saat ini, Anda memodifikasi URL produk pada lingkup skor untuk toko Prancis Anda agar berbeda dengan toko Inggris Anda? Dan ketika Anda beralih di antara keduanya, Anda mendapatkan 404. Ini adalah perilaku yang diharapkan.
Magento tidak akan menyimpan penulisan ulang URL yang berbeda untuk tampilan toko lainnya. Jadi ketika Anda menekan
/french/product1
di toko Prancis, URL akan cocok di tabel dan itu akan dimuat. Tetapi ketika Anda menekannya di toko Inggris, tidak akan ada kecocokan dan dengan demikian akan 404.Kedengarannya seperti yang Anda butuhkan adalah dengan hanya "Tambahkan kode toko ke URL" - yang akan membiarkan kunci URL Anda sendiri, tetapi awali semua URL masing-masing dengan kode toko Anda. Ini kemudian akan memungkinkan switcher toko Anda berfungsi.
sumber