James ile aynı durumdayız. Çok fazla kazı yaptıktan sonra, şunu buldum:
core_url_rewriteTablo yerine artık Magento EE 1.13 şimdi yeniden yazar saklar itiraz edildienterprise_url_rewrite .
Tablolar:
enterprise_*_category_rewritekullanımcatalog_*_entity_url_key çalıştırdığınızda tablolar iki yeniden yazma tabloları yeniden inşa etmekphp indexer.php --reindex catalog_url_*
Yönetici Kataloğuna bir 'URL Yönlendirmesi' eklediğinizde-> URL Özel bir URL için yönlendirmeler, enterprise_url_rewrite_redirectmasaya eklenir ve Magento için dizinin şimdi eskimiş olduğu bayrağını yeniden enterprise_url_rewrite_redirect_clçalıştıran tabloya girilir php indexer.php --reindex url_redirect.enterprise_url_rewrite_redirect_rewrite tabloyu .
Hızlı not, _cl ile biten herhangi bir tablonun kesilmesi güvenlidir, 'CL' Günlük Kaydı anlamına gelir ve Magento tarafından yeniden indekslemenin gerekip gerekmediğini kontrol etmek için kullanılır.
URL Anahtar tablolarının yürüdüğü kadarıyla, neden iki URL Anahtar girişinin bir catalog_*_entity_url_keyve bir tanesinin catalog_*_entity_varchar(öznitelik kimliği 90) olmasına nazaran hala habersizim , ancak bunun ne olduğunu varsayalım:
Yeni bir ürün oluşturduğunuzda / kategori Magento yerleştirilir bir url_key oluşturmak için adını kullanır catalog_*_entity_url_keyVE içinde catalog_*_entity_varchar, ama Magento tarafından kullanılan birincil tablodur catalog_*_entity_url_keybunu kesmek ve çalıştırmak çünkü eğer php indexer.php --reindex catalog_url_*senin enterprise_*_category_rewritetablolar boş ve ürünler / kategorileri içinde olacak ön uç çirkin URL'leri gösterecek, yani http://example.com/catalog/product/view/id/123/etc/etc(SOE dostu değil) İki tablonun birbiriyle ilişkili olduğuna ve enterprise_url_rewritebu tabloyu oluşturmak için kullanıldığına inanıyorum, çünkü bu tablo, catalog_*_entity_varchartablonun içinde bir 'request_path' ve büyük olasılıkla url_key'i içerir. catalog_*_entity_url_keyTablodaki URL Anahtarı . Url_key ve varchar tabloları konusunda tamamen yanılmış olabilirim, bu yüzden sadece sesli düşünüyorum.
Yine de, başarılı bir şekilde kesmek ve yeniden çalıştırabilmeniz için yeniden yazabilirsiniz
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;
ve sonra çalıştırın:
sudo php indexer.php --reindex catalog_url_product
sudo php indexer.php --reindex catalog_url_category
sudo php indexer.php --reindex url_redirect
Ayrıca kısalırsanız enterprise_url_rewrite_redirect , yönetici panelinizde gördüğünüz tüm özel yönlendirmelerinizi kaybedersiniz, belki de bu sizin hedefinizdir, çünkü tonlarca işe yaramaz URL’ler bırakmışsınızdır. '* _Entity_url_key' tablolarını kesmediğiniz sürece iyi olacaksınız.
Hikayemiz biraz farklıydı, çünkü yinelenen URL Anahtarları ve 1.11'den 1.13'e yükselttikten sonra excel ithalatından gelen ürün isimleriyle ilgili büyük sorunlarımız vardı, bu yüzden catalog_product_entity_url_keytabloyu ve tablodaki URL anahtarlarını ve URL yollarını catalog_product_entity_varcharürünü kullanarak sıfırlamak için bu hızlı komut dosyasını yazdım. isimler. Aşağıdaki kodu ekledim, ancak kullanırsanız kullanmak kendi sorumluluğunuzdadır.
<?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.']';
Kod burada Magentos formatKey yöntemini kullanmak için ayarlanmış olabilir: http://www.magentocommerce.com/wiki/3_-_store_setup_and_management/seo/url_key_characters_conversion maalesef tüm anahtarları güncelledikten sonra ne yazık ki reupdating rahatsız etmedim yine her şey.
Umarım yardımcı olur :)!
core_url_rewriteve işe yaradı.