Bir alanın boş olup olmadığını kontrol edin


18

$ Node nesnesine sahip olduğunuzda bir alanın boş olup olmadığını nasıl kontrol edersiniz ?.

Bunu olası bir çözüm olarak buldum:

$field = field_get_items('node', $node, 'field_post_image');

Şimdi kontrol edebilirim:

GÜNCELLEME .Ups! Bu güvenilir değil, dün benim için çalışacağına söz veriyorum.

isset($field);

ama daha iyi bir yol olup olmadığını merak ediyorum.

Beni aydınlat

Yanıtlar:


30

Belgeleri okursanız FALSE, veri yoksa işlev geri döner . değişkene isset()atadığınız FALSEiçin aslında başarısız olur , böylece aslında bir şeye ayarlanmıştır. Doğru sözdizimi şöyle olur:

$field = field_get_items('node', $node, 'field_post_image');
if ($field) {
   //Do something with the field
}
else{
   //There are no results
}

Bu en iyi yol gibi görünüyor. Boşsa FALSE değerini döndürür, herhangi bir veri varsa bir dizi döndürür, bu nedenle 0 alanının vb.
— Olması

Hiçbir şey ayarlanmadığında varsayılan değeri döndürdüğü için bu benim için çalışmadı.
— nehir

@ Sam152 Teşekkürler! Bu, giriş yaptığımda harika çalıştı, ancak çıkış yaptığımda hiçbir şey göstermiyor. Bunun ve herhangi bir çözümün bir nedeni var mı?
— Dan

Merhaba Dan. Giriş yapmanın yukarıdaki kod üzerinde herhangi bir etkisi olmamalıdır. Belki bir değişkeni ayıklamak için devel kullanıyorsunuz ve anon kullanıcılarının "geliştirici bilgilerine erişme" özelliği yok?
— Sam152

Bu, bir alanın boş olup olmadığını kontrol etmenin yanlış yoludur, alanı uygulayan modül tarafından tanımlanan hook_field_is_empty'yi çağırmakla açıklanan yaklaşımı kullanmalısınız, kiamlaluno'nun yazısına bakın.
— lslinnet

8

Bir alanın boş olup olmadığını doğrulamak için aşağıdaki snippet'i kullanabilirsiniz.

$info = field_info_field($field_name);
$function = $info['module'] . '_field_is_empty';

if (function_exists($function)) {
  $value = field_get_items('node', $node, $field_name);
  $is_empty = $function($value[0], $info);
}

Farklı koşullar altında farklı alanlar boş kabul edildiğinden bu kod daha güvenlidir. Bakınız, örneğin, arasındaki fark file_field_is_empty () , number_field_is_empty () , ve taxonomy_field_is_empty () : taxonomy_field_is_empty()kontrol TID malı $itemparametresi ise number_field_is_empty()çek değeri aynı parametre özelliği. Özel alanlar, alanı boş olarak değerlendirmek için daha karmaşık bir durumun doğrulanmasını gerektirebilir.

Belgelerde verilen hook_field_is_empty () açıklaması şu şekildedir:

Alan türü için neyin boş bir öğe oluşturduğunu tanımlayın.


Bu cevabı takdir ediyorum, ancak hook_field_is_empty () çok ileri gidiyor gibi görünüyor. Alanın gerçekten boş olup olmadığını bilmek istiyorum. Örneğin number_field_is_empty, 0'ın da boş olduğunu düşünür. Ayrıca alan çok değerli ise bu işlevi doğrudan uygulayamayacağınızı test ederim.
— corbacho

1
0 içeren bir değişkeni veya "0" dizesini ilettiğinizde empty () işlevi budur; alan boş olduğunda bir değer kullanıyor olabilir ve alanın boş olup olmadığını bilmenin tek yolu hook_field_is_empty () öğesini çağırmak olabilir.
— kiamlaluno

Bir hata var. $ İşlevi ($ değeri [0], $ info) olmalıdır; Bkz. Api.drupal.org/api/drupal/modules!field!field.api.php/function/…
— volocuga

2

Ham değeri ( $content['field_name']['#items'][0][value]) içinde bulduk , böylece alanın ifadeyle boş olup olmadığını belirleyebilirsiniz.

(! Empty ($ içerik [ 'alan_adı'] [ '# öğe'] [0] [değer]))

burada field_nameistenen alanın adıyla eşleşir.


Hayır. "Değer" anahtarı yalnızca bir db sütun adıdır. Alan türüne bağlı olarak farklı olabilir. Bence en iyi yol - yukarıda önerildiği gibi hook_field_is_empty () (gerekli) kontrol edin
— volocuga

1

Drupal 8

Birisi D8'de aynı cevaba ihtiyaç duyarsa, alanımı test etmek için yaptığım şey budur:

if ($entity->hasField('field_event_date_start')
  && !$entity->get('field_event_date_start')->isEmpty()) {
  // Do something ...
}
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.