Aby uzyskać wartości z encji, istnieją dwa sposoby:
- Użyj
field_get_items
i uzyskaj wartość pola - Użyj
entity_metadata_wrapper
i uzyskaj wartość pola
Chociaż entity_metadata_wrapper
abstrahuje różnice językowe, jego interfejs API jest czasem niezręczny, szczególnie przy korzystaniu z PHP 5.3. Na przykład uzyskanie wartości długiego pola tekstowego zwykle przebiega tą drogą:
$field = $wrapper->field->value();
print $field['safe_value'];
Na szczęście, PHP 5.4 obsługuje tej składni: print $wrapper->field->value()['safe_value'];
.
Ale moje pytanie dotyczy bardziej wydajności. Jak one działają? Czy przeszukują bazę danych za każdym razem, gdy żądają wartości? Czy entity_metadata_wrapper
żąda wszystkiego na raz? ( field_get_item
Bardziej odpowiednie dla pobierania pojedynczej wartości.)
Nie mam dość odwagi, by zanurzyć się głęboko w źródle Drupala.
field_get_items()
powoduje zerowe obciążenie bazy danych, więc myślę, że to dość otwarta i zamknięta sprawa :)
field_get_items()
zerowy narzut bazy danych? Musi gdzieś dostać swoje dane, prawda?
entity_metadata_wrapper
działa, pod względem wydajności.
field_get_items()
więc narzut już został poniesiony ... to jest trochę uduszona trasa w D7, szczerze mówiąc
field_view_field()
służy do renderowania pola. Funkcja uzyskiwania wartości pola to field_get_items () .