Alanın değerini değiştirmek için hook_node_presave nasıl kullanılır


9

Temel olarak, adı ve soyadını $ node-> field_par_contact_name içine bir araya getirmek istiyorum

Ama bana uyarı veriyor. (Aşağıya bakınız)

function ortaklık_node_presave ($ düğüm) {
  if ($ node-> type == 'ortaklık') {
    $ first_name = $ düğüm-> field_par_contact_first_name ['und'] [0] ['ad'];
    $ soyadı = $ düğüm-> field_par_contact_surname ['und'] [0] ['ad'];

    // https://drupal.org/project/field_hidden
    // Gizli değişken
    $ node-> field_par_contact_name ['und'] [0] ['değer'] = $ ad_adı. ''. soyadını, $;

    // Kaydettikten sonra uyarı: array_flip (): Yalnızca STRING ve INTEGER değerlerini çevirebilir! DrupalDefaultEntityController-> load () (... / drupal-7.23 / 17. satırın 173 satırı dahil
  }
}

Güncellenmiş , lütfen resme bakın: resim açıklamasını buraya girin


formu programlı olarak gönderiyor musunuz? Yani hook_form_alter kullanıyor musunuz? ve sonra drupal_form_submit kodunuzda bir yerde?
harshal

Yanıtlar:


6

Yeni başlayanlar için muhtemelen kaydettiğiniz alan değeri için yanlış dizi anahtarı kullanıyorsunuz; 'name' orada 'değer' olmalıdır.

$node->field_par_contact_name['und'][0]['value'];

İkinci olarak, aslında "ad" ve "soyadı" alanlarınız için Taksonomi Terimi Referans alanlarını kullanıyorsunuz. Referans alanları ile ilgili önemli bir nokta, referans alınan varlıkların tam olarak yüklendiğini ve nesnenizde mevcut olduğunu her zaman kabul edemeyeceğinizdir. Varsayılan olarak, düğüm nesnesi yüklendiğinde, bu alan yalnızca şöyle görünür:

$node->field_par_contact_first_name (Array)
  'und' (Array)
    0 (Array)
      'tid' => 284

Sadece 'tid' anahtarı kesinlikle orada. 'name' başvurulan terimin bir özelliğidir ve genellikle otomatik olarak kullanılamaz. (Sonraki kod aslında başvurulan terimi yükleyebilir ve $ düğüm nesnesi içinde kullanılabilir hale getirebilir, ancak bu sadece böyle bir durumdur.)

"Adınız" ve "Soyadınız" alanlarınız referanslar yerine metin alanları olsaydı çok daha kolay bir zamanınız olurdu. Daha sonra, bu değerler ayrı bir sınıflandırma terimine başvurulmak yerine doğrudan düğümün kendisine ait olacaktır.

Bununla birlikte, sınıflandırma terim referanslarını kullanmaya devam ederseniz, referanslanan terimi yüklemek için kodunuzda bir noktaya değinmeli, ardından $ term-> name özelliğinin kendisinden ihtiyacınız olan değerleri almalısınız.


Yukarıdaki resme bakın. 'Değer' yoktur
kenpeter

Ah, varsaydığım gibi metin alanlarını değil, ad ve soyadı için Sınıflandırma Terimi Referans alanlarını kullanıyorsunuz. Bu tuhaf. :) Cevabı güncelledi.
Les Lim

haklısın.
kenpeter
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.