Tüm URL Yeniden Yazmalarını Temizle - Kurumsal (1.13)


27

Birkaç karışıklık içe aktarma işleminden sonra, kaldırmam gereken bir sürü URL yeniden yazma ile kaldım.

Enterprise 1.13'ü çalıştırıyorum

Toplulukta bu sorunu yaşadığımda, kısaltdım. core_url_rewrite , kısaltdım ve reindexed.

Ancak, Enterprise'da, yeniden yazma işlemini kontrol eden birkaç farklı tablo olduğunu fark ettim.

  • enterprise_url_rewrite
  • enterprise_url_rewrite_category_cl
  • enterprise_url_rewrite_product_cl
  • enterprise_url_rewrite_redirect
  • enterprise_url_rewrite_redirect_cl
  • enterprise_url_rewrite_redirect_rewrite

Hepsini kesmek için güvenli miyim?

Birisinin bana bu tabloları asla kesmemem gerektiğini söyleyeceğini umuyorum, bu yüzden naiflik için şimdiden özür dilerim.


Ne demek 'yeniden yazma kontrol eden bir dizi farklı tablo'? EE'de genellikle CE ile aynı şeyi yaptım. Kesmek core_url_rewriteve işe yaradı.
Marius

Selam Marius. Bunlar yeniden yazma kontrol etmek için görünen tablolardır. Core_url_rewrites'i kesmiştim, ancak adminde listelenenleri etkilemedi. enterprise_url_rewrite enterprise_url_rewrite_category_cl enterprise_url_rewrite_product_cl enterprise_url_rewrite_redirect enterprise_url_rewrite_redirect_cl enterprise_url_rewrite_redirect enterprise_url_rewrite_redirect_cl enterprise_url_rewrite_redirect_rewrite Teşekkürler
JamesAllwood 22:13

Ay pardon. Benim hatam. Bu satırı "Enterprise 1.13 kullanıyorum" özledim. EE 1.13 ile henüz bir deneyimim yok. Şimdilik beni görmezden gel.
Marius

1
Dikkate alınması gereken bir şey: gist.github.com/Vinai/5451584
B00MER 12:13

1
Yakın zamanda Magento EE 1.12'yi mağazalarımızdan biri için EE 1.13 olarak güncelledik ve web sitemizde oluşabilecek değişiklikler ve problemler hakkında bir yazı yazdık: code4business.de/update-magento-enterprise-edition-1-13-0-2 /… Yazının, sayfanın altında İngilizce çevirisi var.
user2830524

Yanıtlar:


30

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 :)!


sudo php indexer.php --reindex catalog_url_catalogolmalı sudo php indexer.php --reindex catalog_url_category.
Matthias Zeis

Şu anda aynı şeyi yapmaya çalışıyorum. Yine de tüm tabloları kestikten sonra, yalnızca doğrudan kategori ve ürün URL'leri yeniden düzenlendi. Gibi kategorilerdeki ürünler için hiçbir giriş bulamadım catalog/product/view/id/XXX/category/YYY. Lütfen bunun sizin için aynı olduğunu onaylayabilir misiniz? Bu konuda habersizim ... Bu bir hata mı, yoksa yanlış bir şey mi yapıyorum? Aynı şeyi 1.13.0.2'deki yeni bir kurulumda da yapmaya çalıştım. Yeniden yazma işlemi ön tarafta çalışır, ancak kategori ayarlanmaz.
fmrng

9

Test ortamında EE 1.13 ile uğraşırken gördüklerime ve az önce yaptığım küçük bir teste dayanarak, bu tabloları basit bir şekilde kesebilmeli ve ardından tüm URL dizinlerini CLI'den manuel olarak yeniden oluşturabilmelisiniz.

* _Cl tabloları, catalog_product_entity_url_keytabloda bulunan TRIGGERS'da kullanılır . Bu * _cl tablosuna ekledikleri kayıtlar, kayıtlardan sonra neyin yeniden indekslenmesi gerektiğini göstermek için kullanıldığını düşünüyorum.

İşte yaptığım şey. Dizinleri yeniden oluşturmak için CLI aracını kullandıktan sonra, her şey yolunda gibiydi. MySQL kısaltması…

TRUNCATE TABLE `enterprise_url_rewrite_redirect_rewrite`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect`;
TRUNCATE TABLE `enterprise_url_rewrite_product_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_category_cl`;
TRUNCATE TABLE `enterprise_url_rewrite`;
TRUNCATE TABLE `enterprise_catalog_product_rewrite`;
TRUNCATE TABLE `enterprise_catalog_category_rewrite`;
TRUNCATE TABLE `core_url_rewrite`;

Sonra CLI'de…

php shell/indexer.php --reindex catalog_url_product
php shell/indexer.php --reindex catalog_url_category
php shell/indexer.php --reindex url_redirect

Sonuçlarınızı bize bildirin… Marius gibi, henüz bir EE 1.13 sitesi inşa etmedim ve yalnızca Imagine'dan bu yana onunla uğraşma deneyimim oldu. :)


1
Merhaba David, Detaylı cevabınız için teşekkürler. Talimatlarını denedim, ama ne yazık ki şans yok. Tüm yeniden yazımları temizledi, ancak indexer.php dosyasını çalıştırmak hiç bir şey yapamadı. Bir gecede, Magento desteği aslında bana geri döndü ve onların tavsiyesi, URL yeniden yazmalarının şu anda kaydedilmiş olmasıydı: - ürünler için catalog_product_entity_url_key. şimdi tekrar şans. Onlardan daha fazla açıklama isteyeceğim, o yüzden bana geri döndüklerinde size haber vereceğim.
JamesAllwood

Buna baktığımda fark ettiğim bir şey, URL'nin yeniden yazmaya daha önce olduğu gibi enterprise_url_rewritevs içinde depolanmasıydı core_url_rewrite. catalog_*_entity_url_keyTablolar İndeksleyici tarafından kullanılmak üzere url-tuşları ile çoğaltılmış bir tablo gibi görünüyor ve bunlar da URL yeniden yazar ilişkin tetikleyiciler ile tablolardır.
davidalger

@Francesco, daha önce bu senaryoyu 1.12'den yükselttikten sonra çalıştırdınız mı? Olmazsa, o zaman çalıştırmanız beklenir ve belgelenmiş yükseltme işleminin bir parçası olarak 1.12'den 1.13'e gitmesi nedeniyle bu arabayı aramam.
davidalger

@davidalger: Senaryo neredeyse iyi çalışıyor (haklı olarak bazı URL'ler yaratıyor ama sadece birkaçı). Ancak, URL yeniden yazma işlevi bu EE sürümünde oldukça zayıftır (örneğin, bir ürünün URL anahtarını değiştirme ve kaydetme, beklendiği gibi çalışma)
Fra

Bu cevap kabul edilmelidir. Bunun EE 1.13'te çalıştığını onaylayabilirim.
musicliftsme,

4

TRUNCATE kullanmayla ilgili bir not:

TRUNCATE TABLE `enterprise_url_rewrite`;

yabancı anahtar referanslar nedeniyle hata veriyor:

ERROR 1701 (42000): Cannot truncate a table referenced in a foreign key constraint (`customerx_dev`.`enterprise_catalog_category_rewrite`, CONSTRAINT `FK_415B32DA3DF924D5C803CF24EB3AC1D9` FOREIGN KEY (`url_rewrite_id`) REFERENCES `customerx_dev`.`enterprise_url_rewrite` (`url_rewrite_i)

Bu gibi truncate / delete komutlarını çalıştırmak işe yarayacaktır:

TRUNCATE TABLE `enterprise_url_rewrite_redirect_rewrite`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_redirect`;
TRUNCATE TABLE `enterprise_url_rewrite_product_cl`;
TRUNCATE TABLE `enterprise_url_rewrite_category_cl`;
TRUNCATE TABLE `enterprise_catalog_product_rewrite`;
TRUNCATE TABLE `enterprise_catalog_category_rewrite`;
TRUNCATE TABLE `core_url_rewrite`;
DELETE FROM `enterprise_url_rewrite`;

Sizden SET FOREIGN_KEY_CHECKS = 0;önce TRUNCATE ...ve SET FOREIGN_KEY_CHECKS = 1;en altında, sonra kullanınDELETE FROM ...
Oleg

4

Basit cevap: Hayır , en azından sonucu bilmiyorsanız, bu tabloları kısaltmak güvenli değildir:

  • Tüm yeniden yazma tablolarını kısaltın ve yeniden indeksleme çalıştıranları bir çalışma sitesine yönlendirin

Ancak:

  • Özel yeniden yazmaların tümünü kaybedeceksiniz (bu normal)
  • Catalog -> Url Redirectboş olacak (EE 1.13.1'de) ( Magento'ya göre bir böcek gibi görünüyor , bu 1.13.1'de beklenen bir davranış) (ayrıca aşağıya bakınız)

2
Sadece Catalog -> Url Redirectsistem dışı yeniden yazmaların gösterildiğini eklemek istiyorum . Yani, sadece sizin özel yazılarınız burada gösterilecek. yani satırlar enterprise_url_rewrite.system = 0.
musicliftsme

evet haklısınız, Magento Destek Ekibinden aldığım son bilgilerle cevabı geliştirdim. İsterseniz cevabımı geliştirmek için çekinmeyin
Fra
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.