James ile aynı durumdayız. Çok fazla kazı yaptıktan sonra, şunu buldum:
core_url_rewrite
Tablo yerine artık Magento EE 1.13 şimdi yeniden yazar saklar itiraz edildienterprise_url_rewrite
.
Tablolar:
enterprise_*_category_rewrite
kullanı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_redirect
masaya 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_key
ve 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_key
VE içinde catalog_*_entity_varchar
, ama Magento tarafından kullanılan birincil tablodur catalog_*_entity_url_key
bunu kesmek ve çalıştırmak çünkü eğer php indexer.php --reindex catalog_url_*
senin enterprise_*_category_rewrite
tablolar 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_rewrite
bu tabloyu oluşturmak için kullanıldığına inanıyorum, çünkü bu tablo, catalog_*_entity_varchar
tablonun içinde bir 'request_path' ve büyük olasılıkla url_key'i içerir. catalog_*_entity_url_key
Tablodaki 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_key
tabloyu 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_rewrite
ve işe yaradı.