Bir düğüm için bir alan değeri nasıl güncellenir?


21

Bir düğüm için bir alanın değerini değiştirmek istiyorum. Aşağıdaki kodu kullandım:


$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][$node->language][0]['value'] = 1;
node_save($node);

Sorundur $node->languagedöner esiken print_r($node)bu kadar und. Neden $node->languageiçinde ne farklıdır $ düğüm dizisi ve bunu nasıl alabilirim?

Yanıtlar:


41
$node = node_load($nid);
$node_wrapper = entity_metadata_wrapper('node', $node);
$node_wrapper->field_myfield->set(1);
$node_wrapper->save();

Varlık meta veri sarmalayıcısı, düğümdeki alanların değerlerini ayarlamak veya okumak için harika bir yoldur!


Ben entity_metadata_wrapper bc'yi güzel ve temiz hale getirir. Yanlışlıkla NULL öğesinin entity_metadata_wrapper () içine yanlışlıkla NULL geçmesi durumunda, hatalı bir hatadan kaçınmak için node_load () işleminden sonra $ node var olup olmadığını kontrol edeceğim.
texas-bronius

$ Nid'i doğrudan EMW'ye iletebilirsiniz.
nawfal

entity_metadata_wrapper kullanarak kabul edilen cevap olmalıdır.
akalata,

2
Başkalarına açık olmadığı durumda, entity_metadata_wrapper (), Varlık API modülünün bir parçasıdır: drupal.org/project/entity
BWPanda

9

field_attach_update()Fonksiyonu deneyin .

$node = node_load($nid); // $nid is the function's parameter
$node->field['field_myfield'][LANGUAGE_NONE][0]['value'] = 1;
field_attach_update('node', $node);

Alanın değerini günceller ve daha iyi performans gösterir node_save.


1
neden field_attach_update reddedildi?
milkovsky

6
$node = node_load($nid); 
$field_language = field_language('node', $node, 'field_myfield');
$node->field['field_myfield'][$field_language][0]['value'] = 1;
node_save($node);

4

Yalnızca alan değerini güncellemek istiyorsanız (güncellenen süre hakkındaki düğüm meta verilerini güncelleme olmadan) işlevi kullanın field_attach_update().

Örnek:

$node = node_load($nid);
$field_language = field_language('node', $node, 'field_myfield');
$node->field_fieldname[$field_language][0]['value'] = 'some value';
field_attach_update('node', $node);

Bazen ayrıca, düğüm statik önbelleğini aşağıdakilerle sıfırlamanız gerekebilir resetCache(array($nid)):

entity_get_controller('node')->resetCache(array($node->nid));

Kaynak: Düğümün kendisini kaydetmeden düğüm alanlarını kaydetme


2

Bunu yeni uyguladım ve bu kodun benim için çalıştığını öğrendim.

$node = node_load($nid); 
if (isset($node)) {
  $field_language = field_language('node', $node, 'field_myfield');
  $node->field_fieldname[$field_language][0]['value'] = 'some value';
  node_save($node);
}

Field_fieldname güncellenirken bunu 4. satırda kullandığımı fark ettim.

$node->field['field_myfield'][0]['value'] = 'some value';

işe yaramadı.

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.