私たちはジェームズと同じような状況にあります。たくさん掘った後、これが私が思いついたものです:
core_url_rewrite
テーブルが廃止され、代わりにMagentoのEE 1.13今で書き換えを記憶しますenterprise_url_rewrite
。
テーブル:
テーブルをenterprise_*_category_rewrite
使用catalog_*_entity_url_key
して、実行時に2つの書き換えテーブルを再構築します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」はChange Logの略で、Magentoはインデックスの再作成が必要かどうかを確認するために使用します。
限りURLキーテーブルが行くように、私はまだ2 URLのキーが1つあっエントリ理由としてビット無知だcatalog_*_entity_url_key
と1つのcatalog_*_entity_varchar
(属性ID 90)が、私は何が起こるか、これがあると仮定します。
新しい製品/カテゴリを作成すると、Magentoは名前を使用してでcatalog_*_entity_url_key
ANDに配置されるurl_keyを生成し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フレンドリーではありません)2つのテーブルは関連しており、enterprise_url_rewrite
テーブルを構築するために使用されると信じています。このテーブルはおそらくcatalog_*_entity_varchar
テーブル内のurl_key とプライマリである「識別子」を格納しているためですcatalog_*_entity_url_key
テーブルのURLキー。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
と、管理パネルに表示されるすべてのカスタムリダイレクトが失われます。これは、無数の役に立たないURLが残っているため、おそらくこれが目標です。'* _entity_url_key'テーブルを切り捨てない限り、問題ありません。
私はリセットするために、この迅速なスクリプトを書いたように、我々は1.11から1.13へのアップグレード後にExcelの輸入から製品名と重複URLのキーと主要な問題を抱えていたので、私たちの物語は、少し違っていたcatalog_product_entity_url_key
中で、テーブルやURLのキーとURLのパスを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.']';
ここでMagentos formatKeyメソッドを使用するようにコードを微調整できます:http : //www.magentocommerce.com/wiki/3_-_store_setup_and_management/seo/url_key_characters_conversion再びすべて。
それが役立つことを願っています:)!
core_url_rewrite
て動作しました。