Uzyskiwanie wartości pola od encji


11

To, co zainstalowałem na mojej stronie, to Entity API i moduły Entityform. Moduł Entityform pozwala mi tworzyć formularze, które każdy użytkownik może przesłać, a pola formularzy są dla mnie dostępne w widokach, podobnie jak działałby typ zawartości.

Zwykle, aby pobrać wartość pola z węzła do mojego szablonu za pomocą php, zrobiłbym następujące:

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

Nie działa to jednak z formularzami / jednostkami encji.

Czy ktoś wie, jak to zrobić dla pola w formie jednostki? Niektórzy sugerowali użycie devel i funkcji dpm (), ale nie mam pojęcia, jak z nich korzystać.

Niektóre konkretne przykłady, w jaki sposób mogę uzyskać wartość tego pola, bardzo by mi pomogły.

Odpowiedzi:


13

Czy próbowałeś uzyskać dostęp do wartości za pomocą podmiotu_metadata_wrapper ?

$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
Uwaga dla przyszłych czytelników: jest to poprawne, ale aby uzyskać dostęp do pola encji, nie trzeba instalować modułu Entity API; Rdzeń Drupala ma już funkcje dostępu do pola encji.
kiamlaluno

Tak, ale OP oznaczył i określił, że ma zainstalowany moduł Entity API, stąd encja_metadanych_wrapper, ponadto jest to zależność modułu encji.
David Thomas

2
entity-api to znacznik dla Entity API implementowanego z Drupal 7, a nie dla modułu Entity API. Uwaga: aby początkujący programiści nie uważali, że moduł Entity API jest niezbędny do obsługi encji. Nie powiedziałem, że odpowiedź jest nieprawidłowa. :)
kiamlaluno

7

Bez użycia modułu Entity API, aby uzyskać wartość pola powiązanego z bytem, ​​używasz field_get_items () ; przekazujesz po prostu typ encji, obiekt encji i nazwę pola.

Na przykład, aby uzyskać treść komentarza, użyj następującego kodu.

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

Aby uzyskać treść węzła, możesz użyć następującego kodu.

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

Obiekt encji to obiekt zwracany z encji_load () lub określonej funkcji ładowania dla tej encji, takiej jak node_load () , comment_load () lub taxonomy_term_load () . W Drupal 8 te funkcje są opakowaniami entity_load().

Jeśli chcesz wyświetlić zawartość pola, powinieneś użyć field_view_field () .


0

Zwykle możesz uzyskać właściwości $ node, ponieważ ty lub jakiś kod, którego używasz, wywołuje wcześniej node_load ().

Musisz w pełni załadować byt, zanim będziesz mógł uzyskać jego właściwości.

Użyj entity_load () http://api.drupal.org/api/drupal/include%21common.inc/function/entity_load/7

Wtedy faktycznie będziesz mieć załadowany obiekt obiektu, który możesz uzyskać w polach.

Użycie dpm () jest takie samo, jak każdej innej funkcji, wystarczy zainstalować moduł devel.

Zrób więc coś takiego:

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

0

Próbować:

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

To powinno wydrukować wartość pola.

Jeśli to tablica, spróbuj tego:

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

Pamiętaj, że jest to wynik wyjściowy i, w zależności od tego, skąd pochodzi wartość, może być konieczne ręczne oczyszczenie wartości tutaj.

Zobacz: function field_get_items


0

Umieść to w jednym z modułów i przejdź do strony formularza, a znajdziesz informacje, których szukasz.

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

  dpm($form);

}

-1

Zamiast używać dpm i instalować ten moduł, używam:

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

Mamy nadzieję, że pomoże ci to docenić wartość.


Hmmm, to nie wyprowadzania coś dla mnie :( Czy to możliwe, bo jestem oglądania przedstawienie entityform, a nie węzeł A może złożenie entityform faktycznie być węzłem tak pomylić?.
Dustin

Nie jestem więc pewien, zakładam, że potrzebna byłaby inna zmienna inna niż $ node.
Brian

1
Pytanie dotyczy dostępu do pola encji, a nie sposobu drukowania encji.
kiamlaluno
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.