আমরা যেমন জেমস হিসাবে আমরা একইরকম অবস্থায় আছি। অনেক খোঁড়াখুঁজির পরে এটাই আমি নিয়ে এসেছি:
core_url_rewriteটেবিল বর্তমানে অবচিত হয়েছে, এর পরিবর্তে Magento ই ই 1.13 এখন নতুন করে লেখা হয় সঞ্চয় করে enterprise_url_rewrite।
টেবিলগুলি:
আপনি যখন চালান তখন দুটি পুনর্লিখন টেবিল পুনর্নির্মাণের enterprise_*_category_rewriteজন্য catalog_*_entity_url_keyসারণীগুলি ব্যবহার করুনphp indexer.php --reindex catalog_url_*
যখন আপনি অ্যাডমিন ক্যাটালগ-> ইউআরএলটিতে কোনও 'ইউআরএল পুনর্নির্দেশ' যুক্ত করেন তখন এটি কাস্টম ইউআরএলের জন্য পুনর্নির্দেশ করে এটি enterprise_url_rewrite_redirectটেবিলের সাথে যুক্ত হয় এবং ম্যাগেন্তোর জন্য পতাকাটি সূচী এখন পুরানো হয় এমন enterprise_url_rewrite_redirect_clসারণীতে প্রবেশ করা হয় যা চলমান সারণীটি php indexer.php --reindex url_redirectপুনর্নির্মাণ করে enterprise_url_rewrite_redirect_rewrite।
দ্রুত দ্রষ্টব্য, _ সিএল-এ শেষ হওয়া কোনও টেবিলটি কাটা নিরাপদ, 'সিএল' চেঞ্জ লগকে বোঝায় এবং পুনরায় ইনডেক্সিং প্রয়োজন কিনা তা যাচাই করার জন্য ম্যাজেন্টো ব্যবহার করেন।
ইউআরএল কী টেবিলগুলি যতদূর যায়, আমি এখনও এখনও কিছুটা নির্লিপ্ত যে কেন দুটি ইউআরএল কী এন্ট্রি catalog_*_entity_url_keyএবং একটিতে catalog_*_entity_varchar(গুণবাচক আইডি 90) রয়েছে, তবে আমি ধরে নিই যে এটি ঘটেছিল:
আপনি যখন কোনও নতুন পণ্য / বিভাগ তৈরি করেন তখন ম্যাজেন্টো নামটি একটি ইউআরএল_কি তৈরি করতে ব্যবহার করে যা এর মধ্যে catalog_*_entity_url_keyএবং এর মধ্যে রাখা হয় catalog_*_entity_varchar, তবে ম্যাগেন্টো দ্বারা ব্যবহৃত প্রাথমিক সারণি হ'ল 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টেবিলটি তৈরিতে ব্যবহৃত হয় কারণ এই টেবিলটি সম্ভবত 'টেস্টের ভিতরে url_key catalog_*_entity_varcharএবং একটি' সনাক্তকারী 'সংরক্ষণ করে যা প্রাথমিক catalog_*_entity_url_keyটেবিল থেকে URL কী । আমি url_key এবং ভার্চার টেবিলগুলি সম্পর্কে সম্পূর্ণ ভুল হতে পারি, তাই আমি কেবল উচ্চস্বরে চিন্তা করছি।
যাইহোক আপনি সম্পাদন করতে পারেন এমন সমস্ত পুনর্লিখনের টেবিলগুলি সফলভাবে ছাঁটাই এবং পুনর্নির্মাণ করতে:
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' টেবিলগুলি কাটাবেন না আপনি ভাল থাকবেন be
আমাদের গল্পটি কিছুটা আলাদা ছিল, কারণ আমাদের ডুপ্লিকেট ইউআরএল কীগুলি এবং 1.11 থেকে 1.13 আপগ্রেড করার পরে এক্সেল আমদানি থেকে পণ্যের নামগুলির সাথে বড় সমস্যা ছিল তাই আমি catalog_product_entity_url_keyটেবিলটি পুনরায় নির্ধারণ করতে এই দ্রুত স্ক্রিপ্টটি লিখেছি এবং catalog_product_entity_varcharপণ্যটি ব্যবহার করে টেবিলের ইউআরএল কী এবং ইউআরএল পাথগুলি লিখেছি নাম থাকবে না। আমি নীচের কোডটি সংযুক্ত করেছি, তবে আপনি যদি এটি ব্যবহার করেন তবে এটি নিজের ঝুঁকিতে ব্যবহার করুন।
<?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.']';
কোডটি ম্যাজেন্টোস ফর্ম্যাটকি পদ্ধতিটি এখানে ব্যবহার করার জন্য চিহ্নিত করা যেতে পারে: http://www.magentocommerce.com/wiki/3_-_store_setup_and_management/seo/url_key_characters_conversion দুর্ভাগ্যক্রমে আমি সমস্ত কী আপডেট করার পরে আমি উইকি জুড়ে এসেছি যাতে আমি পুনরায় অপারেশন করতে বিরক্ত করি না আবার সব।
আশা করি এইটি কাজ করবে :)!
core_url_rewriteএবং এটি কাজ করে।