web-gelistirme-sc.com

Toplu alan güncellemesi?

Drupal 7 zaten çok sayıda düğümü olan bir 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?

34
daphshez

Düğümlerin listesini almak için EntityFieldQuery tuşunu kullanabilir, ardından düğüm alanlarını node_save() ile güncelleyebilirsiniz:

$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 defalık bir işlemse, yukarıdakileri çalıştırmak için Devel modülünün Execute PHP işlevini kullanabilirsiniz: aksi takdirde, basit bir özel modül oluşturabilirsiniz.

37
user7

Ben Views Toplu İşlemler ve temelde yukarıdaki öğeleri yapmak için "Keyfi Yürüt PHP Script" kullanacaktı, ama tüm ekstra kodu yapmak zorunda değilsiniz , istediğinizi yapan küçük snippet ($object->field_foo['und'][0]['value'] = 'some_value')

17
rfay

Alanı yalnızca bir değerle güncellemek istiyorsanız, kabul edilen cevaba daha etkili bir alternatif şudur:

$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 field_attach_presave ve field_attach_update fonksiyonları, sadece düğüm alanını doğru şekilde güncelleyen ve düğüm kaydetme işleminin geri kalanını atlayan fonksiyonlar. Bunun, düğüm ön kaydetme/kaydetme kancaları çağrılmayacak, "değiştirilmiş" tarih, güncel tarihe vb. Güncellenmeyecek bir etkiye sahiptir.

9
Mirsoft

Gerçekten de VBO (Dökme İşlemleri Görüntüleme) iyi bir çözümdür. Ayrıca, en son sürümlerde, bir işlemde düğüm dilini güncellemenin çok kolay bir yolunu sunan bir "Varlık değerlerini değiştir" seçeneği bulunur.

4
xaa

Views Toplu İşlemler modülünü kurup etkinleştirin ve sayfa ekranıyla bir görünüm oluşturun.

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

Başvurmak

enter image description here

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

Senin durumunda başlık. Resimde 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çmeyi seçebilir veya tek tek düğümlere karşılık gelen kutuları manuel olarak işaretleyebilirsiniz. Devam etmek için en az bir onay kutusunun işaretlenmesi gerekir.

Şimdi varsayılan değeri ayarlayıp kaydedersiniz.

2
DRUPWAY