Bir varlıktan bir alanın değerini alma


11

Siteme yüklediğim şey Entity API ve Entityform modülleri. Entityform modülü, herhangi bir kullanıcının gönderebileceği formlar oluşturmamı sağlar ve form alanları, içerik türünün nasıl çalışacağına benzer şekilde görünümlerde kullanmam için kullanılabilir.

Normalde bir alanın değerini bir düğümden php ile şablonuma çekmek için aşağıdakileri yaparım:

<?php echo $node->field_name[$node->language][0]['value']; ?>

Ancak bu, varlık formları / varlıkları ile çalışmaz.

Bir varlık formundaki bir alan için bunu yapmanın bir yolunu bilen var mı? Bazı insanlar devel ve dpm () işlevini kullanmayı önerdiler, ancak bunları nasıl kullanacağım hakkında hiçbir fikrim yok.

Bu alanın değerini nasıl elde edebileceğime dair bazı özel örnekler bana gerçekten çok yardımcı olacaktır.

Yanıtlar:


13

Entity_metadata_wrapper ile değerlere erişmeyi denediniz mi?

$entityform_id = 12; // entity form id
$entityform = entityform_load($entityform_id);
$entityform_wrapper = entity_metadata_wrapper('entityform', $entityform);
// Access fields with $entityform_wrapper->field_name->value() or ->field_name->raw()
drupal_set_message($entityform_wrapper->field_my_field->value()); // for example

4
Gelecekteki okuyucular için not: Bu doğrudur, ancak bir varlık alanına erişmek için Entity API modülünü yüklemek gerekmez; Drupal çekirdek zaten bir varlık alanına erişim işlevlerine sahiptir.
kiamlaluno

Evet, ancak OP, Entity API modülünün kurulu olduğunu belirterek belirtmiştir, bu nedenle entity_metadata_wrapper, ayrıca entityforms modülünün bir bağımlılığıdır.
David Thomas

2
entity-api , Entity API modülü için değil, Drupal 7'den uygulanan Entity API'sının etiketidir. Not, yeni başlayan geliştiricilerin varlıkları işlemek için Entity API modülünün gerekli olduğunu düşünmesini önlemektir. Cevabın doğru olmadığını söylemedim. :)
kiamlaluno

7

Entity API modülünü kullanmadan, bir varlıkla ilişkilendirilmiş bir alanın değerini almak için field_get_items () ; sadece varlık türünü, varlık nesnesini ve alan adını iletirsiniz.

Örneğin, bir yorumun gövdesini almak için aşağıdaki kodu kullanırsınız.

if ($items = field_get_items('comment', $comment, 'comment_body')) {
  // ...
}

Bir düğümün gövdesini almak için aşağıdaki kodu kullanabilirsiniz.

if ($items = field_get_items('node', $node, 'body')) {
  // ...
}

Varlık nesnesi entity_load () öğesinden döndürülen nesne veya bu varlık için node_load () , comment_load () veya taxonomy_term_load () gibi belirli bir yükleme işlevidir . Drupal 8'de bu işlevler için sarmalayıcılardır entity_load().

Alanın içeriğini göstermek istiyorsanız, field_view_field () öğesini kullanmalısınız .


0

Siz veya kullandığınız bazı kodlar node_load () öğesini önceden çağırdığı için normalde $ node özelliklerine erişebilirsiniz.

Bir varlığı, özelliklerini alabilmek için önce yüklemeniz gerekir.

Entity_load () kullanın http://api.drupal.org/api/drupal/includes%21common.inc/function/entity_load/7

Ardından, alanlarından alabileceğiniz yüklü bir nesne var.

Dpm () kullanmak diğer işlevlerle aynıdır, sadece devel modülünü kurmanız gerekir.

Yani, böyle bir şey yapın:

<?php
$entity = entity_load('myEntityType', $entity_id);
dpm($entity);
?>

0

Deneyin:

$value= field_get_items('entityform', $entityform, 'field_myfieldname');
print '<p>the value is: '.$value.'</p>';

Bu, alanın değerini yazdırmalıdır.

Bir dizi ise şunu deneyin:

$values = field_get_items('entityform', $entityform, 'field_myfieldname');
$value = $values[0]['value'];
print '<p>the value is: '.$value.'</p>';

Bunun ham çıktı olduğunu ve değerin nereden geldiğine bağlı olarak, değeri burada manuel olarak sterilize etmeniz gerekebilir.

Bkz. Fonksiyon field_get_items


0

Bunu modüllerinizden birine yerleştirin ve formun sayfasına gidin, aradığınız bilgiyi bulacaksınız.

function yourmodulename_form_alter(&$form, &$form_state, $form_id) {

  dpm($form);

}

-1

Ben dpm kullanmak ve bu modülü yüklemek yerine:

print_r('<pre>');
print_r($node);
print_r('</pre>');

Umarım bu değer için kazmak yardımcı olacaktır.


? Hmmm, benim için de bu çıkışı değil şey :( ben bir entityform gönderme görüntüleme ve bir düğüm Or entityform sunulması aslında bir düğüm olurdu Yani kafam karıştı çünkü olabilir.
Dustin

O zaman emin değilim, $ node dışında farklı bir değişkene ihtiyacınız olacağını varsayacağım.
Brian

1
Soru, varlığın nasıl yazdırılacağı değil, bir varlığın alanına erişmekle ilgilidir.
kiamlaluno
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.