मैगेंटो 1.9.1 के लिए कुछ अद्यतन जानकारी
बग @Vaiai ने बताया कि इस संस्करण में वैसे भी हल दिखता है, जबकि अन्य कारण से कार्यक्षमता अभी भी टूटी हुई है (विन्यास योग्य उत्पादों के लिए)
समस्या वास्तविक समस्या शायद यहाँ है, Mage_Catalog_Model_Resource_Url
हालांकि मेरे पास समय नहीं है और न ही मैं कोर के ऐसे नाजुक हिस्से को छूना चाहता हूं।
वर्कअराउंड के लिए स्पष्टीकरण:
प्रवेश बिंदु हमेशा इस वर्ग Mage_Core_Model_Url_Rewrite_Request
और विशेष रूप से विधि है_rewriteDb()
कैसे _rewriteDb()
काम करता है:
- पहले यह वर्तमान स्टोर के लिए अनुरोध को लोड करने का प्रयास करता है
(139): $this->_rewrite->loadByRequestPath($requestCases);
- तब अगर मुझे यह नहीं मिल रहा है (कोई आईडी नहीं) और एक
___from_store
पैरामीटर है
(142): if (!$this->_rewrite->getId() && $fromStore) {
- इसके लिए फिर से लिखने का प्रयास करें
___from_store
:
(152): $this->_rewrite->setStoreId($fromStoreId)->loadByRequestPath($requestCases);
- यदि यह मिल जाए, तो यह
id_path
वर्तमान स्टोर के लिए एक लोड करने के लिए उपयोग करता है:
(159): $this->_rewrite->setStoreId($currentStore->getId())->loadByIdPath($this->_rewrite->getIdPath());
सब कुछ ठीक लग रहा है लेकिन url_rewrite डेटा में एक समस्या है और इसलिए सूचकांक कार्यक्षमता (कम से कम विन्यास उत्पादों के लिए):
- यहां तक कि अगर हम स्टोर स्विच कर रहे हैं और नए स्टोर में अलग-अलग यूआरएल हैं, तो लाइन 139 पर फिर से लिखा जाता है।
समस्या यह है कि यह फिर से गलत id_path
को इंगित करता है (इसके बजाय कॉन्फ़िगर करने योग्य उत्पाद आईडी की ओर इशारा करते हुए यह उसके सरल उत्पाद आईडी में से एक की ओर इशारा करता है)
अब !$this->_rewrite->getId()
स्थिति को हटाने के लिए एक वर्कअराउंड है और इसलिए मैगेंटो एक $fromstore
पैरामीटर के दौरान हमेशा रीडायरेक्ट खोजने की कोशिश करता है
- सबसे अच्छा यह होगा कि
catalog_url
सूचकांक को ठीक किया जाए और इसके द्वारा बनाए गए गलत पुनर्लेखन को हटाया जाए।
यहां तेज़ वर्कअराउंड के लिए कोड (आपको Mage_Core_Model_Url_Rewrite_Request
अपने स्वयं के द्वारा एक मॉड्यूल और फिर से लिखना वर्ग बनाने की आवश्यकता होगी ):
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;
}