Estamos em uma situação semelhante à sua, James. Depois de muita pesquisa, é isso que eu criei:
A core_url_rewrite
tabela agora está obsoleta. Em vez disso, o Magento EE 1.13 agora armazena as regravações enterprise_url_rewrite
.
Tabelas:
enterprise_*_category_rewrite
use catalog_*_entity_url_key
tabelas para recriar as duas tabelas de reescrita ao executarphp indexer.php --reindex catalog_url_*
Quando você adiciona um 'URL Redirect' em admin Catalog-> URL Redirects para um URL personalizado, ele é adicionado à enterprise_url_rewrite_redirect
tabela e o sinalizador para Magento de que o índice agora está desatualizado é inserido na enterprise_url_rewrite_redirect_cl
tabela que, ao executar, php indexer.php --reindex url_redirect
reconstrói a enterprise_url_rewrite_redirect_rewrite
tabela.
Nota rápida, qualquer tabela que termina em _cl é segura para truncar, o 'CL' significa Change Log e é usado pelo Magento para verificar se é necessária uma nova indexação.
No que diz respeito às tabelas URL Key, ainda estou um pouco sem noção do motivo pelo qual existem duas entradas de chave URL uma dentro catalog_*_entity_url_key
e outra dentro catalog_*_entity_varchar
(atributo 90), mas presumo que seja isso o que acontece:
Quando você cria um novo produto / categoria, o Magento usa o nome para gerar uma url_key que é colocada em catalog_*_entity_url_key
AND catalog_*_entity_varchar
, mas a tabela principal usada pelo Magento é catalog_*_entity_url_key
porque, se você o truncar e executar, php indexer.php --reindex catalog_url_*
suas enterprise_*_category_rewrite
tabelas estarão vazias e os produtos / categorias em o frontend exibirá URLs feias, ou seja, http://example.com/catalog/product/view/id/123/etc/etc
não amigável para SOE. Acredito que as duas tabelas estejam relacionadas e sejam usadas para criar a enterprise_url_rewrite
tabela, porque essa tabela armazena um 'caminho_de_ requisição', provavelmente a url_key dentro da catalog_*_entity_varchar
tabela e um 'identificador', que é o principal Chave de URL da catalog_*_entity_url_key
tabela. Eu poderia estar completamente errado sobre as tabelas url_key e varchar, então estou pensando em voz alta.
De qualquer forma, para truncar e reconstruir com êxito todas as tabelas de reescrita, você pode executar:
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;
e então execute:
sudo php indexer.php --reindex catalog_url_product
sudo php indexer.php --reindex catalog_url_category
sudo php indexer.php --reindex url_redirect
Se você também truncar enterprise_url_rewrite_redirect
, perderá todos os redirecionamentos personalizados que vê no painel do administrador, talvez seja esse o seu objetivo, pois você ficou com uma tonelada de URLs inúteis. Contanto que você NÃO trunque as tabelas '* _entity_url_key', você estará bem.
Nossa história foi um pouco diferente, porque tivemos chaves de URL duplicadas e grandes problemas com nomes de produtos das importações do Excel após a atualização para 1,13 da 1,11, então escrevi esse script rápido para redefinir a catalog_product_entity_url_key
tabela e as chaves de URL e os caminhos de URL na catalog_product_entity_varchar
tabela usando o produto nomes. Anexei o código abaixo, mas se você usá-lo, use-o por sua conta e risco.
<?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.']';
O código pode ser ajustado para usar o método Magentos formatKey aqui: http://www.magentocommerce.com/wiki/3_-_store_setup_and_management/seo/url_key_characters_conversion infelizmente me deparei com o wiki depois que eu atualizei todas as chaves para que eu não me incomodei reupdating tudo de novo.
Espero que ajude :)!
core_url_rewrite
e funcionou.