web-gelistirme-sc.com

İçerik türüne yeni bir alan ekledikten sonra tüm düğümleri varsayılan alanla güncelleyin

Birkaç düğüm içeren mevcut bir içerik türüm var. Az önce varsayılan değeri "kapalı" olan yeni bir boole alanı ekledim.

Ancak, her düğümü yeniden kaydetinceye kadar varsayılan değer ayarlanmaz, bu nedenle yalnızca yeni alanın varsayılan değeri kullandığı düğümleri göstermesi gereken bir görünüm şu anda boştur.

Alan eklenmeden önce oluşturulan mevcut düğümleri bu alanı varsayılan değerine ayarlamak için nasıl güncelleyebilirim?

15
DanH

Ne yazık ki, bunu yapmanın çok basit bir yolu yok (VBO/kuralların yanı sıra), ancak yeni bir alan ekledikten sonra belirli bir düğüm türü için alan değerlerini önceden doldurmam gerektiğinde özel modül yükleme dosyalarımdaki güncelleme işlevlerinde kullandığım kod ( bu durumda, 'sayfa' düğümleri):

<?php
// Get all nodes of 'page' type, populate the field with a value of '1'.
$pages = db_query("SELECT nid, vid FROM {node} WHERE type = 'page'")->fetchAllAssoc('nid');
foreach ($pages as $nid => $values) {
  $fields = array(
    'entity_type' => 'node',
    'bundle' => 'page',
    'deleted' => 0,
    'entity_id' => $values->nid,
    'revision_id' => $values->vid,
    'language' => LANGUAGE_NONE,
    'delta' => 0,
    'field_page_new_field_value' => 1,
  );
  db_insert('field_data_field_page_new_field')
    ->fields($fields)
    ->execute();
  db_insert('field_revision_field_page_new_field')
    ->fields($fields)
    ->execute();
}
?>

bu cevap 'da bahsedilen başka bir manuel yöntem EntityFieldQuery kullanır ve her düğümü yükler/kaydeder. Daha fazla Drupal-y, ama çok daha az performans ... (her bir düğüm için tam bir düğüm yükü ve kaydetme işlemi gerektirir!).

10
geerlingguy

En iyi bahis doğrudan MySQl'de. Tablolar şöyle görünecektir:

field_data_field_newbooleanfieldname
field_revision_field_newbooleanfieldname

Onlara bakarsanız oldukça basittir - sorgunun nasıl görüneceğine başlamanız için bana ihtiyacınız var mı yoksa buradan iyi misiniz?

2
Mike

Sadece aşağıdaki mantığı deneyin. çok daha hızlı ve tüm kanca uygulamalarını geçerek. daha fazla ayrıntı . tüm nid almak ve bu örnek kod ile döngü için basit bir doğrudan db_select sorgusu yazabilirsiniz.

$node = new stdClass();
$node->nid = $val;
$node->type = 'NODETYPE';
$node-field_whatever[LANGUAGE_NONE][0]['value'] = 'VALUE';
field_attach_presave('node', $node);
field_attach_update('node', $node);

alan değeri ayarlanmamış düğümlerin

SELECT nid,vid
 from node where type='procedure' and nid not in (select entity_id from field_data_field_pr_choix_du_document)

field_data_field_pr_choix_du_document alanımla ilgili olan ve varlık kimliği düğümü yeniden ayarlanmış bir girdi par değeri içeren tablodur

sQL insert kullanarak yaptım ... sözdizimi seçin

https://dev.mysql.com/doc/refman/5.5/en/insert-select.html

INSERT INTO `field_data_field_pr_choix_du_document` (`entity_type`, `bundle`, `deleted`, `entity_id`, `revision_id`, `language`, `delta`, `field_pr_choix_du_document_value`)
SELECT 'node','procedure',0,nid,vid,'und',0,'Importer un document'
from node where type='procedure' and nid not in (select entity_id from field_data_field_pr_choix_du_document)
0
Matoeil

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.

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.

0
DRUPWAY

Bu modülle içerik türündeki alanları güncellemenin kolay bir yolunu buldum: Alan Varsayılanları

Ekran görüntüsüne bakın. Mevcut içeriği varsayılan değerlerle güncelleyebilir veya mevcut değerleri koruyabilirsiniz.

D7'de test ettim ve işe yarıyor.

enter image description here

0