Toplu alan güncellemesi?


35

Zaten birçok düğümü olan bir Drupal 7 içerik türüne yeni bir (metin) alan ekledim.

Tüm bu düğümler için alanı varsayılan bir değerle nasıl doldurabilirim?

Yanıtlar:


37

EntityFieldQueryDüğümlerin bir listesini almak için kullanabilirsiniz , ardından düğümün alanlarını aşağıdakilerle güncelleyin node_save():

$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type

$query = new EntityFieldQuery;
$result = $query
  ->entityCondition('entity_type', 'node')
  ->propertyCondition('type', $node_type)
  ->execute();

if (!empty($result['node'])) {
  $nodes = entity_load('node', array_keys($result['node']));

  foreach($nodes as $node) {
    // Replace field_foo with the machine name of the field to update.
    // - 0 refers to specific value within the field array, for when the field contains
    //    multiple values. If the field only has one value, it should be 0.
    $node->field_foo[$lang][0]['value'] = 'New Value';
    node_save($node);
  }
}

Bu bir kereye mahsus bir işlemse , yukarıdakileri çalıştırmak için Devel modülünün PHP Yürüt işlevini kullanabilirsiniz: aksi takdirde, basit bir özel modül oluşturabilirsiniz.


2
Devel veya vbo kullanmanın yanı sıra, yukarıdaki kodu tamamen önyüklenmiş bir ortamda yürütmek için "drush scr myscript.php" de kullanabilirsiniz.
fietserwin

Bu kod aynı işlemi bir terim referans alanıyla gerçekleştirecek şekilde nasıl değişir?
Screenack

17

Ben kullanacağı Görüntüleme Operasyon Bulk ve kullanımı yukarıda esasen öğeleri yapmak için "Keyfi PHP Denetimi yürütme", ancak herkesin (gibi istediğini yapar fazladan kod, sadece küçük parçacığını yapmak gerekmez $object->field_foo['und'][0]['value'] = 'some_value')


9

Alanı sadece bir değere sahip olarak güncellemek istiyorsanız, kabul edilen cevaba daha iyi bir alternatif budur:

$lang = LANGUAGE_NONE; // Replace with ISO639-2 code if localizing
$node_type = 'page'; // Machine name of the content type

$query = new EntityFieldQuery;
$result = $query
  ->entityCondition('entity_type', 'node')
  ->propertyCondition('type', $node_type)
  ->execute();

if (!empty($result['node'])) {
  $nodes = entity_load('node', array_keys($result['node']));

  foreach($nodes as $node) {
    // Replace field_foo with the machine name of the field to update.
    // - 0 refers to specific within the field array, for when the field contains
    //    multiple values. If the field only has one value, it should be 0.
    $node->field_foo[$lang][0]['value'] = 'New Value';
    field_attach_presave('node', $node);
    field_attach_update('node', $node);
  }
}

Aradaki fark doğrudan kullanımda field_attach_presaveve field_attach_updatesadece düğüm alanını doğru şekilde güncelleyen ve düğüm kaydetme işleminin geri kalanını atlayan fonksiyonlar. Bunun hiçbir düğüm ön-kaydet / kaydet kancası çağrılmayacağı, "değiştirildiği" tarihin o tarihe kadar güncellenmeyeceği vs. gibi bir etkisi vardır.


4

Nitekim VBO (Görünümler Toplu İşlemler) iyi bir çözümdür. Ayrıca, en son sürümlerle, tek bir işlemde düğüm dilini güncellemenin çok kolay bir yolunu sağlayan "Varlık değerlerini değiştir" seçeneğini bulacaksınız.


2

Görünümler Toplu İşlemleri modülünü kurun ve etkinleştirin ve sayfa ekranlı bir görünüm oluşturun.

Ekle => Toplu işlemler: Görünümdeki İçerik (İçerik) alanı.

başvurmak

görüntü tanımını buraya girin

Varsayılan değeri ayarlamak istediğiniz alanları seçin.

Senin durumunda unvanı. Resimde bu etiketler.

Görünümü kaydedin ve oluşturduğu sayfaya gidin. Birden fazla sonuç sayfanız varsa, geçerli sayfadaki tüm öğeleri, tüm sayfalardaki tüm öğeleri seçebilir veya tek tek düğümlere karşılık gelen kutuları manuel olarak işaretleyebilirsiniz. Devam etmek için en az bir onay kutusu işaretlenmelidir.

Şimdi varsayılan değeri ayarlayın ve kaydedin.

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.