Sitemdeki tüm düğümleri nasıl hızlı bir şekilde yeniden kaydedebilirim (içerik güncellemesinde aktif olan bir kuralı tetiklemek için)?


24

Sitemde belirli bir içerik türünü yapılandırırken bazı hatalar yaptım. Bu hataları düzeltmek için, "mevcut içerik güncellendiğinde" bazı işlemler yapan bir kural yaptım. Ancak, siteme göz atmak ve tüm düğümleri birer birer tekrar elle kaydetmek istemiyorum. Tüm düğümleri hızlı bir şekilde yeniden kaydetmek için Kurallar veya Görünüm Toplu İşlemlerini kullanmanın bir yolu var mı?

Yanıtlar:


22

VBO "PHP kodunu yürütün" işlemine sahiptir. Çalıştırın ve "node_save ($ entity);" yazın. (tırnak işaretleri olmadan) metin kutusunda. Bu sizin için zaman aşımına uğraşırken hile yapacak.


1
Ahh, çok daha hızlı :)
Clive

5
VBO'da "İçeriği kaydet" seçeneğinde kendi PHP'nizi yazmanıza gerek kalmadan da aynısını yapacak bir seçenek var.
stevenw00

"İçeriği Kaydet" seçeneğini bulamadım, ancak bahsettiğiniz php yöntemi harika çalıştı! Teşekkürler!
hokey2112

Hem php hem de vbo yöntemlerini başarı ile denedim. Kendi veritabanımda, yalnızca bir kılavuz Kaydet, bir tablo alanı için etiketleri günceller. Garip ...
Bisonbleu

14

Kurallar veya VBO hakkında bilgim yok ancak aynı sonucu almak için kısa bir kod pasajı kullanabilirsiniz:

$nids = db_query('SELECT nid FROM {node}')->fetchCol();
foreach (node_load_multiple($nids) as $node) {
  node_save($node);
}

Eğer biraz zaman alabilen çok fazla düğümünüz varsa, bu yüzden sunucunuz izin veriyorsa, bu kodun başında zaman sınırını uzatmak, belki de kapalıysa sınırsız olmak iyi bir fikirdir. :

set_time_limit(0);

12

Sen kullanabilirsiniz node_mass_update () fonksiyonu:

module_load_include('inc', 'node', 'node.admin');
$nids = db_query('SELECT nid FROM {node}')->fetchCol();
node_mass_update($nids, array());

Zaman sınırını umursamadığınız için çok iyi. 10'dan fazla düğüm varsa, düğüm güncellemesi için toplu işlem otomatik olarak başlayacaktır.


5
200.000'den fazla düğümde mükemmel çalıştı. Partiyi sizin için işler. Devel modülünü etkinleştirdiyseniz, yukarıdaki kodu '/ devel / php'
2

1
Mükemmel bir çözüm, arka planda çalışır, bu nedenle zaman aşımı veya saha performansını
Daniel Waters

5

Güncelleme: Az önce Tüm Düğümleri Kurtar öğesini oluşturdum . Şimdilik yalnızca seçilen düğüm türlerinin tüm düğümlerini yeniden kaydetmek için bir toplu işlemi tetiklemek için bir form içermektedir. Şu anda alfa. Ben de bir Drush komutu (beta) ve bazı testler (kararlı) eklemeyi planlıyorum.

Drupal Tüm Düğümleri Kurtar form ekran görüntüsü


Orada Resave Düğümler . Cron pistlerinde kullanılmak üzere tasarlanmıştır. Ancak manuel olarak da tetikleyebilirsiniz. Hangi içerik türünün düğümlerinin yeniden kaydedileceğini seçin.

Manüel yeniden kaydetmeyi çalıştırmadan önce, "Şimdi Düğümleri Kurtar" ı tıklatarak bir kez "Yapılandırmayı Kaydet" (bir cron türü ve içerik türü seçin) seçmeniz gerekir.


2

Yönetici / içeriğe gidin ve içerik türünüze göre filtreleyin - yalnızca yayınlandı. Tümünü seçin ve ardından açılan işlemler arasından "değeri değiştir" i seçin. 'Çalıştır' üzerine tıklayın. Bir sonraki sayfada, mülklerden 'durum' seçeneğini seçin ve yayınlayın. Next sonraki ’düğmesini tıklayın. Yayınlanan tüm düğümler değişiklik yapmadan yeniden kaydedilir.

Yayımlanmamış düğümler için tekrarlayın (ancak özellik olarak yayınlanmamış seçeneğini seçin).

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.