Magento 1.9.1 için bazı güncellenmiş bilgiler
@Vinai'nin işaret ettiği hata, bu sürümde yine de işlevselliğin hala kırılmış olması nedeniyle çözülmüş görünüyor (yapılandırılabilir ürünler için)
Sorun gerçek sorun muhtemelen burada Mage_Catalog_Model_Resource_Url
ama zamanım yok ve çekirdeğin böyle hassas bir kısmına dokunmak istemiyorum.
Geçici çözümün açıklaması:
Giriş noktası her zaman bu sınıf Mage_Core_Model_Url_Rewrite_Request
ve özellikle yöntemdir_rewriteDb()
Nasıl _rewriteDb()
çalışır:
- İlk önce mevcut mağaza için istek yüklemeye çalışın
(139): $this->_rewrite->loadByRequestPath($requestCases);
- o zaman bulamazsam (kimlik yok) ve bir
___from_store
parametresi varsa
(142): if (!$this->_rewrite->getId() && $fromStore) {
- aşağıdakiler için bir yeniden yazma işlemi yüklemeyi deneyin
___from_store
:
(152): $this->_rewrite->setStoreId($fromStoreId)->loadByRequestPath($requestCases);
- bulursa
id_path
, geçerli mağaza için birini yüklemek için kullanın :
(159): $this->_rewrite->setStoreId($currentStore->getId())->loadByIdPath($this->_rewrite->getIdPath());
Her şey iyi görünüyor, ancak url_rewrite verilerinde bir sorun var ve dizin işleviyle ilgili (en azından yapılandırılabilir ürünler için):
- Mağazayı değiştiriyor olsak ve yeni mağazanın farklı url'si olsa bile, 139 satırında bir yeniden yazma yüklenir.
Sorun şu ki, bu yeniden yazma yanlış id_path
işaret ediyor (yapılandırılabilir ürün kimliğine değil, basit ürün kimliğinden birine işaret ediyor)
Şimdi bir çözüm, !$this->_rewrite->getId()
koşulu kaldırmaktır ve böylece bir $fromstore
parametre olduğunda her zaman bir yönlendirme bulmaya çalışır.
- En iyisi,
catalog_url
dizini düzeltmek ve oluşturduğu yanlış yeniden yazmayı kaldırmaktır.
İşte hızlı geçici çözüm için kod (bir modül oluşturmanız ve Mage_Core_Model_Url_Rewrite_Request
sınıfı kendiniz yeniden yazmanız gerekir):
protected function _rewriteDb()
{
if (null === $this->_rewrite->getStoreId() || false === $this->_rewrite->getStoreId()) {
$this->_rewrite->setStoreId($this->_app->getStore()->getId());
}
$requestCases = $this->_getRequestCases();
$fromStore = $this->_request->getQuery('___from_store');
if ($fromStore) {
$stores = $this->_app->getStores(false, true);
if (!empty($stores[$fromStore])) {
/** @var $store Mage_Core_Model_Store */
$store = $stores[$fromStore];
$fromStoreId = $store->getId();
} else {
return parent::_rewriteDb();
}
$this->_rewrite->setStoreId($fromStoreId)->loadByRequestPath($requestCases);
if (!$this->_rewrite->getId()) {
return parent::_rewriteDb();
}
// Load rewrite by id_path
$currentStore = $this->_app->getStore();
$this->_rewrite->setStoreId($currentStore->getId())->loadByIdPath($this->_rewrite->getIdPath());
$this->_setStoreCodeCookie($currentStore->getCode());
$targetUrl = $currentStore->getBaseUrl() . $this->_rewrite->getRequestPath();
$this->_sendRedirectHeaders($targetUrl, true);
}
if (!$this->_rewrite->getId()) {
return parent::_rewriteDb();
}
$this->_request->setAlias(Mage_Core_Model_Url_Rewrite::REWRITE_REQUEST_PATH_ALIAS,
$this->_rewrite->getRequestPath());
$this->_processRedirectOptions();
return true;
}