हम आपको जेम्स के समान स्थिति में हैं। बहुत सारी खुदाई के बाद मैं यही आया:
core_url_rewrite
अब तालिका में हटाई गई है, बजाय Magento ईई 1.13 अब में पुनर्लेखन संग्रहीत करता हैenterprise_url_rewrite
।
टेबल्स:
enterprise_*_category_rewrite
उपयोगcatalog_*_entity_url_key
जब आप चलाते हैं तो दो फिर से लिखने वाली तालिकाओं के पुनर्निर्माण के तालिकाओं काphp indexer.php --reindex catalog_url_*
जब आप व्यवस्थापक कैटलॉग में 'URL रीडायरेक्ट' जोड़ते हैं-> URL कस्टम URL के लिए रीडायरेक्ट करता है तो इसे enterprise_url_rewrite_redirect
टेबल पर जोड़ा जाता है और Magento के लिए ध्वज कि इंडेक्स अब पुराना हो गया enterprise_url_rewrite_redirect_cl
है, जिसे टेबल में दर्ज किया जाता है, जब php indexer.php --reindex url_redirect
इसे फिर से बनाया जाता हैenterprise_url_rewrite_redirect_rewrite
तालिका।
त्वरित ध्यान दें, _cl में समाप्त होने वाली कोई भी तालिका काट-छाँट करने के लिए सुरक्षित है, 'CL' का अर्थ चेंज लॉग है और यदि पुन: अनुक्रमण आवश्यक है तो यह जांचने के लिए Magento द्वारा उपयोग किया जाता है।
जहाँ तक URL कुंजी तालिकाएँ हैं, मैं अभी भी थोड़ा अव्यवस्थित हूँ कि वहाँ दो URL कुंजी प्रविष्टियाँ क्यों हैं catalog_*_entity_url_key
और एक में क्यों हैंcatalog_*_entity_varchar
(विशेषता आईडी 90) में हैं, लेकिन मुझे लगता है कि ऐसा होता है:
जब आप एक नया उत्पाद / श्रेणी बनाते हैं तो Magento एक url_key उत्पन्न करने के लिए नाम का उपयोग करता है जिसे catalog_*_entity_url_key
AND में रखा गया है catalog_*_entity_varchar
, लेकिन Magento द्वारा उपयोग की जाने वाली प्राथमिक तालिका catalog_*_entity_url_key
इसलिए है क्योंकि यदि आप इसे काटते हैं और php indexer.php --reindex catalog_url_*
आपकी enterprise_*_category_rewrite
तालिकाएँ खाली होती हैं और उत्पाद / श्रेणियाँ सीमांत बदसूरत url प्रदर्शित करेगा http://example.com/catalog/product/view/id/123/etc/etc
( अर्थात SOE अनुकूल नहीं) मेरा मानना है कि दो तालिकाओं का संबंध है और enterprise_url_rewrite
तालिका बनाने के लिए उपयोग किया जाता है क्योंकि यह तालिका एक 'request_path' को संग्रहीत करती catalog_*_entity_varchar
है और सबसे अधिक संभावना है कि तालिका के अंदर url_key और 'प्राथमिक' से URL कुंजीcatalog_*_entity_url_key
तालिका । मैं url_key और varchar टेबल के बारे में पूरी तरह से गलत हो सकता है, इसलिए मैं सिर्फ जोर से सोच रहा हूं।
वैसे भी सफलतापूर्वक आपके द्वारा निष्पादित की जा सकने वाली सभी पुनर्लेखित तालिकाओं को सफलतापूर्वक समाप्त और पुनर्निर्मित किया जा सकता है:
SET FOREIGN_KEY_CHECKS = 0;
TRUNCATE TABLE `core_url_rewrite`;
TRUNCATE TABLE `enterprise_catalog_category_rewrite`;
TRUNCATE TABLE `enterprise_catalog_product_rewrite`;
TRUNCATE TABLE `enterprise_url_rewrite`;
TRUNCATE TABLE `enterprise_url_rewrite_category_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_product_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect_rewrite`;
SET FOREIGN_KEY_CHECKS = 1;
और फिर चलाएं:
sudo php indexer.php --reindex catalog_url_product
sudo php indexer.php --reindex catalog_url_category
sudo php indexer.php --reindex url_redirect
यदि आप भी काटते हैं enterprise_url_rewrite_redirect
तो आप अपने सभी कस्टम पुनर्निर्देशों को ढीला कर देंगे जो आप अपने व्यवस्थापक पैनल में देखते हैं, शायद यह आपका लक्ष्य है क्योंकि आप एक टन बेकार यूआरएल के साथ छोड़ दिए गए थे। जब तक आप '* _entity_url_key' तालिकाओं को छोटा नहीं करेंगे, तब तक आप ठीक रहेंगे।
हमारी कहानी थोड़ी अलग थी, क्योंकि हमें 1.11 से 1.13 पर अपग्रेड करने के बाद एक्सेल आयात से उत्पाद के नाम वाली डुप्लिकेट URL कीज़ और प्रमुख समस्याएं थीं, इसलिए मैंने catalog_product_entity_url_key
टेबल का रीसेट करने के लिए यह त्वरित स्क्रिप्ट लिखी और catalog_product_entity_varchar
उत्पाद का उपयोग करके तालिका में URL कुंजी और URL पथ नाम। मैंने नीचे कोड संलग्न किया है, लेकिन यदि आप इसका उपयोग करते हैं, तो इसे अपने जोखिम पर उपयोग करें।
<?php
include_once('app/Mage.php');
Mage::app();
$dbHandle = Mage::getSingleton('core/resource')->getConnection('core_write');
$productCounter = 0;
$nameFixCounter = 0;
$vUrlKeyFixCounter = 0;
$urlPathCounter = 0;
$urlKeyCounter = 0;
$productCollection = $dbHandle->query("SELECT entity_id, sku FROM catalog_product_entity");
while($product = $productCollection->fetch()) {
$dataString = null;
$oldProductName = $dbHandle->query("SELECT value FROM catalog_product_entity_varchar WHERE entity_id = '".$product['entity_id']."' AND attribute_id = 65")->fetch();
$oldVarcharUrlKey = $dbHandle->query("SELECT value FROM catalog_product_entity_varchar WHERE entity_id = '".$product['entity_id']."' AND attribute_id = 90")->fetch();
$oldUrlPath = $dbHandle->query("SELECT value FROM catalog_product_entity_varchar WHERE entity_id = '".$product['entity_id']."' AND store_id = 0 AND attribute_id = 91")->fetch();
$oldUrlKey = $dbHandle->query("SELECT value FROM catalog_product_entity_url_key WHERE entity_id = '".$product['entity_id']."'")->fetch();
$newProductName = preg_replace('/\s+/', ' ', trim(preg_replace('/[^\x20-\x21\x23-\x2B\x2D-\xE7]/', ' ', $oldProductName['value'])));
$newUrlKey = preg_replace('/\s+/', '-', trim(preg_replace('/[^\x30-\x39\x61-\x7A]/', ' ', strtolower($newProductName))));
if (strcmp($oldProductName['value'], $newProductName)) {
echo "-[".$oldProductName['value']."]\n";
echo "+[".$newProductName."]\n";
$dbHandle->query('UPDATE catalog_product_entity_varchar SET value = "'.$newProductName.'" WHERE entity_id = "'.$product['entity_id'].'" AND attribute_id = 65');
++$nameFixCounter;
}
if (strcmp($oldVarcharUrlKey['value'], $newUrlKey)) {
echo "-[".$oldVarcharUrlKey['value']."]\n";
echo "+[".$newUrlKey."]\n";
if ($oldVarcharUrlKey['value'] === null) {
$dbHandle->query("INSERT INTO catalog_product_entity_varchar (entity_type_id, attribute_id, store_id, entity_id, value) VALUES ('4', '90', '0', '".$product['entity_id']."', '".$newUrlKey."')");
} else {
$dbHandle->query("UPDATE catalog_product_entity_varchar SET value = '".$newUrlKey."' WHERE entity_id = '".$product['entity_id']."' AND attribute_id = 90");
}
++$vUrlKeyFixCounter;
}
if (strcmp($oldUrlPath['value'], $newUrlKey.'.html')) {
echo "-[".$oldUrlPath['value']."]\n";
echo "+[".$newUrlKey.".html]\n";
if ($oldUrlPath['value'] === null) {
$dbHandle->query("INSERT INTO catalog_product_entity_varchar (entity_type_id, attribute_id, store_id, entity_id, value) VALUES ('4', '91', '0', '".$product['entity_id']."', '".$newUrlKey.".html')");
} else {
$dbHandle->query("UPDATE catalog_product_entity_varchar SET value = '".$newUrlKey.".html' WHERE entity_id = '".$product['entity_id']."' AND store_id = 0 AND attribute_id = 91");
}
++$urlPathCounter;
}
if (strcmp($oldUrlKey['value'], $newUrlKey)) {
echo "-[".$oldUrlKey['value']."]\n";
echo "+[".$newUrlKey."]\n";
if ($oldUrlKey['value'] === null) {
$dbHandle->query("INSERT INTO catalog_product_entity_url_key (entity_type_id, attribute_id, store_id, entity_id, value) VALUES ('4', '90', '0', '".$product['entity_id']."', '".$newUrlKey."')");
} else {
$dbHandle->query("UPDATE catalog_product_entity_url_key SET value = '".$newUrlKey."' WHERE entity_id = '".$product['entity_id']."'");
}
++$urlKeyCounter;
}
$report = "[".++$productCounter."] ";
$report .= "NAME: [".(strcmp($oldProductName['value'], $newProductName)?'!=':'==')."] ";
$report .= "V_KEY: [".(strcmp($oldVarcharUrlKey['value'], $newUrlKey)?'!=':'==')."] ";
$report .= "PATH: [".(strcmp($oldUrlPath['value'], $newUrlKey.'.html')?'!=':'==')."] ";
$report .= "KEY: [".(strcmp($oldUrlKey['value'], $newUrlKey)?'!=':'==')."]\n";
echo $report;
}
echo 'Total Products: ['.$productCounter.'] Names: ['.$nameFixCounter.'] V_Keys: ['.$vUrlKeyFixCounter.'] Paths: ['.$urlPathCounter.'] Keys: ['.$urlKeyCounter.']';
यहाँ Magentos formatKey विधि का उपयोग करने के लिए कोड को ट्वीक किया जा सकता है: http://www.magentocommerce.com/wiki/3_-_store_setup_and_management/seo/url_key_characters_convertersion दुर्भाग्य से मैं विकी भर में आया था क्योंकि मैंने सभी कुंजियों को अपडेट किया था ताकि मैं दोबारा से परेशान न होऊं फिर से सब कुछ।
उम्मीद है की वो मदद करदे :)!
core_url_rewrite
और यह काम किया।