सभी URL फिर से साफ़ करें - एंटरप्राइज़ (1.13)


27

कई बार आयात किए जाने के बाद, मुझे URL रीराइट के लोड के साथ छोड़ दिया गया है जिसे मुझे हटाने की आवश्यकता है।

मैं एंटरप्राइज 1.13 चला रहा हूं

जब मुझे समुदाय में यह समस्या हुई है, तो मैंने बस काट दिया है core_url_rewrite , और फिर से जोड़ दिया है।

हालाँकि, एंटरप्राइज़ में, मैं देख रहा हूँ कि पुनर्लेखन को नियंत्रित करने वाली कई अलग-अलग तालिकाएँ हैं।

  • enterprise_url_rewrite
  • enterprise_url_rewrite_category_cl
  • enterprise_url_rewrite_product_cl
  • enterprise_url_rewrite_redirect
  • enterprise_url_rewrite_redirect_cl
  • enterprise_url_rewrite_redirect_rewrite

क्या मैं उन सभी को अलग करने के लिए सुरक्षित हूं?

मैं किसी को यह बताने के लिए पूरी तरह से आशान्वित हूं कि मुझे इन तालिकाओं को कभी नहीं तोड़ना चाहिए, इसलिए पहले से भोलेपन के लिए माफी माँगता हूँ।


'अलग-अलग तालिकाओं को नियंत्रित करने वाली कई सारणियों' से आपका क्या अभिप्राय है? ईई पर मैं आमतौर पर सीई के रूप में एक ही काम करता था। Truncate core_url_rewriteऔर यह काम किया।
मारियस

हाय मारियस। ये वे सारणियाँ हैं जो पुनर्लेखन को नियंत्रित करती हैं। मैंने core_url_rewrites को छोटा कर दिया था, लेकिन इससे एडमिन में सूचीबद्ध लोगों पर कोई प्रभाव नहीं पड़ा। एंटरप्राइज़_
url_rewrite

मुझे माफ करें। मेरी गलती। मैंने इस लाइन को याद किया "मैं एंटरप्राइज 1.13 चला रहा हूं"। मुझे ईई 1.13 के साथ कोई अनुभव (अभी तक) नहीं है। अभी के लिए मेरी उपेक्षा करो।
मारियस

1
कुछ विचार करने के लिए: gist.github.com/Vinai/5451584
B00MER

1
हमने अपनी दुकानों में से एक के लिए हाल ही में Magento EE 1.12 को EE 1.13 में अपडेट किया और हमने अपनी वेबसाइट पर बदलाव और समस्याओं के बारे में एक पोस्ट लिखी: कोड 4business.de/update-magento-enterprise-edition-13-13-2-2 /… पोस्ट में पृष्ठ के निचले भाग में एक अंग्रेजी अनुवाद है।
user2830524

जवाबों:


30

हम आपको जेम्स के समान स्थिति में हैं। बहुत सारी खुदाई के बाद मैं यही आया:

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_keyAND में रखा गया है 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 दुर्भाग्य से मैं विकी भर में आया था क्योंकि मैंने सभी कुंजियों को अपडेट किया था ताकि मैं दोबारा से परेशान न होऊं फिर से सब कुछ।

उम्मीद है की वो मदद करदे :)!


sudo php indexer.php --reindex catalog_url_catalogहोना चाहिए sudo php indexer.php --reindex catalog_url_category
मथायस ज़ीस

मैं अभी वही करने की कोशिश कर रहा हूं। हालांकि सभी तालिकाओं को काट-छाँट करने के बाद, केवल प्रत्यक्ष श्रेणी और उत्पाद URL को फिर से जोड़ दिया जाता है। मुझे श्रेणियों में उत्पादों के लिए कोई प्रविष्टि नहीं मिली catalog/product/view/id/XXX/category/YYY। क्या आप कृपया पुष्टि कर सकते हैं कि यह आपके लिए समान है? मैं इस बारे में थोथा हूँ ... यह एक बग है, या मैं कुछ गलत कर रहा हूँ? मैंने १.१३.०.२ की एक ताजा स्थापना पर ऐसा ही करने की कोशिश की, वही हुआ। पुनर्वसन फ्रंटएंड में सभी सही काम करता है, लेकिन कोई श्रेणी निर्धारित नहीं है।
fmrng

9

मैंने जो देखा है उसके आधार पर EE 1.13 के साथ एक परीक्षण वातावरण और एक त्वरित थोड़ा परीक्षण जो मैंने किया था, आपको उन तालिकाओं को सरल बनाने में सक्षम होना चाहिए और फिर CLI से सभी URL अनुक्रमितों को मैन्युअल रूप से पुन: बनाना चाहिए।

* _Cl तालिकाओं का उपयोग TRIGGERS में पाया जाता है catalog_product_entity_url_key तालिका में । रिकॉर्ड्स जो वे इन * _cl टेबल में डालते हैं, वे हैं, मुझे लगता है, यह बताने के लिए उपयोग किया जाता है कि बचत के बाद क्या फिर से अनुक्रमित होने की आवश्यकता है।

मैंने जो किया था यह रहा। अनुक्रमणिका को फिर से बनाने के लिए सीएलआई उपकरण का उपयोग करने के बाद, सब कुछ जाने के लिए अच्छा प्रतीत हुआ। MySql ट्रंकेशन…

TRUNCATE TABLE `enterprise_url_rewrite_redirect_rewrite`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect`;
TRUNCATE TABLE `enterprise_url_rewrite_product_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_category_cl`;
TRUNCATE TABLE `enterprise_url_rewrite`;
TRUNCATE TABLE `enterprise_catalog_product_rewrite`;
TRUNCATE TABLE `enterprise_catalog_category_rewrite`;
TRUNCATE TABLE `core_url_rewrite`;

फिर CLI पर…

php shell/indexer.php --reindex catalog_url_product
php shell/indexer.php --reindex catalog_url_category
php shell/indexer.php --reindex url_redirect

हमें अपने परिणाम बताएं ... मेरीस की तरह, मैंने अभी तक एक ईई 1.13 साइट नहीं बनाई है और केवल कल्पना के बाद उसके साथ खिलवाड़ करने का अनुभव है। :)


1
हाय डेविड, आपकी विस्तृत प्रतिक्रिया के लिए धन्यवाद। मैंने आपके निर्देशों की कोशिश की, लेकिन दुर्भाग्य से कोई भाग्य नहीं। इसने फिर से लिखे गए सभी को स्पष्ट किया, लेकिन indexer.php को चलाने से कोई पुनर्जीवित नहीं हुआ। रातों रात, मैगेंटो का समर्थन वास्तव में मुझे वापस मिल गया है, और उनकी सलाह थी कि URL पुनर्लेखनों को अब इसमें सहेजा गया है: - उत्पादों के लिए कैटलॉग_प्रोडक्ट_एंटिटी_उर्ल_की_- श्रेणी के लिए कैटलॉग_श्रेणी_एंटी_उर्ल_कीज मैंने इनको भी साफ़ करने की कोशिश की है, हालाँकि वास्तव में इनमें केवल 2 प्रविष्टियाँ थीं, लेकिन फिर से अब किस्मत। मैंने उनसे कुछ और स्पष्टीकरण के लिए कहा है, इसलिए जैसे ही वे मेरे पास वापस आएंगे मैं आपको बता दूंगा।
जेम्सऑलवुड

एक बात जिस पर मैंने गौर किया, वह यह थी कि URL रीराइट को पहले की तरह enterprise_url_rewriteबनाम में स्टोर किया core_url_rewriteगया था। catalog_*_entity_url_keyटेबल इंडेक्सर द्वारा उपयोग के लिए यूआरएल-कुंजी के साथ एक दोहराया तालिका दिखाई, और वे भी यूआरएल पुनर्लेखन से संबंधित चलाता साथ टेबल रहे हैं।
davidalger

@Francesco, क्या आपने पहले 1.12 से अपग्रेड करने के बाद उस स्क्रिप्ट को चलाया था? यदि नहीं, तो यह उम्मीद की जाएगी कि आपको इसे चलाने की आवश्यकता है, और मैं उस छोटी गाड़ी को कॉल नहीं करूंगा क्योंकि यह 1.12 से 1.13 तक जाने वाली प्रलेखित अपग्रेड प्रक्रिया का हिस्सा है।
डेविडलगर

@davidalger: आप सही हैं कि स्क्रिप्ट लगभग अच्छी तरह से काम करती है (यह कुछ अजीब उरल्स बनाता है लेकिन केवल कुछ) हालांकि इस EE रिलीज़ में url रीराइट की कार्यक्षमता काफी कमजोर है (उत्पाद के लिए url-key बदलना और इसे सहेजना, doesn '। t काम के अनुसार)
Fra

यह उत्तर स्वीकार किया जाना चाहिए। मैं ईई 1.13 पर इस काम की पुष्टि कर सकता हूं।
musicliftsme

4

TRUNCATE का उपयोग करने के बारे में एक नोट:

TRUNCATE TABLE `enterprise_url_rewrite`;

विदेशी प्रमुख संदर्भों के कारण त्रुटि होती है:

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`customerx_dev`.`enterprise_catalog_category_rewrite`, CONSTRAINT `FK_415B32DA3DF924D5C803CF24EB3AC1D9` FOREIGN KEY (`url_rewrite_id`) REFERENCES `customerx_dev`.`enterprise_url_rewrite` (`url_rewrite_i)

ट्रंकटेट चलाना / इस तरह से कमांड हटाना काम करेगा:

TRUNCATE TABLE `enterprise_url_rewrite_redirect_rewrite`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect`;
TRUNCATE TABLE `enterprise_url_rewrite_product_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_category_cl`;
TRUNCATE TABLE `enterprise_catalog_product_rewrite`;
TRUNCATE TABLE `enterprise_catalog_category_rewrite`;
TRUNCATE TABLE `core_url_rewrite`;
DELETE FROM `enterprise_url_rewrite`;

SET FOREIGN_KEY_CHECKS = 0;अपने पहले TRUNCATE ...और SET FOREIGN_KEY_CHECKS = 1;बहुत नीचे का उपयोग करें , के बादDELETE FROM ...
ओलेग

4

सरल जवाब है नहीं यह इन तालिकाओं, कम से कम अगर आप परिणाम पता नहीं है काटना सुरक्षित नहीं है:

  • सभी पुन: लिखने वाली तालिकाओं को काट-छाँट करें और पुन: अनुक्रमणिका चलने से कार्य स्थल बन जाता है

तथापि:

  • आप सभी कस्टम पुनर्लेखनों को ढीला कर देंगे (यह सामान्य है)
  • Catalog -> Url Redirectखाली हो जाएगा (EE 1.13.1 पर) (जो Magento के अनुसार बग जैसा दिखता है। यह 1.13.1 पर अपेक्षित व्यवहार है) (नीचे टिप्पणी भी देखें)

2
मैं सिर्फ इतना जोड़ना चाहूंगा कि Catalog -> Url Redirectकेवल गैर-सिस्टम पुनर्लेखन दिखाता है। इसलिए, केवल आपके कस्टम पुनर्लेखन ही यहां दिखाई देंगे। के साथ पंक्तियाँ enterprise_url_rewrite.system = 0
म्यूज़िकलिफ्ट्समे

हाँ, आप सही हैं, मैंने मैगेंटो सपोर्ट टीम से मिली अंतिम जानकारी के साथ उत्तर में सुधार किया है। यदि आप चाहें तो मेरे उत्तर को सुधारने के लिए स्वतंत्र महसूस करें
Fra
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.