Das Abrufen von Dateiobjekten, die sich auf Knoten beziehen, über ein Feld ist einfach mit EntityMetadataWrapper
:
$wrapper = entity_metadata_wrapper('node', $node);
$images = $wrapper->field_images;
Das ist großartig. Ich möchte jedoch einige der Eigenschaften des Standarddateiobjekts verwenden, die jedoch nicht verfügbar sind. Wenn ich mir die Eigenschaften ansehe, die bei $images[0]->file
Verwendung des obigen Codes verfügbar sind, sehe ich Folgendes:
- fid
- Name
- Mime
- Größe
- URL
- Zeitstempel
- Inhaber
Vor allem uri
fehlt, und an seiner Stelle gibt es eine url
Eigenschaft, die die vollständige externe URL zur Bilddatei ist. Ich möchte diese Bilder über ihre URI bearbeiten (Daumen erstellen usw.), also mache ich Folgendes:
$fid = $images[0]->file->fid->value();
$uri = file_load($fid)->uri;
Das scheint den ganzen Sinn der Verwendung von a EntityMetadataWrapper
in erster Linie zu negieren .
Was vermisse ich? Wo befindet sich der URI für das umschlossene Dateiobjekt? Wenn es nicht verfügbar ist, aus Liebe zu allen guten und reinen Dingen, warum nicht?!
Ich bin mir bewusst, dass ich die URL wieder in eine URI dekonstruieren könnte, aber das fühlt sich auch sehr unnötig an.
hook_entity_property_info_alter()
", dann ist das in Ordnung, wollte nur wissenentity_metadata_system_entity_property_info()
, wo eine Reihe neuer Eigenschaften angeheftet werden$info['file']['properties']
. Ich bin bereit zu wetten, wenn file_entity dort wäre, dass das Array bereits die Entitätseigenschaften selbst darin hätte. Ich werde versuchen, später oder morgen eine Antwort zu schreiben, wenn es noch niemand getan haturi
ist dort mit file_entity.Antworten:
Vielen Dank an MPD, dass sie mich in die richtige Richtung gelenkt haben. Kurz gesagt, ohne das Dateieinheitsmodul sind Dateien keine Entitäten, daher haben sie natürlich nicht die 'Eigenschaften', die ich erwartet hatte.
Das Entitätsmodul stellt einige für sie bereit, aber URI gehört nicht dazu. Glücklicherweise ist es sehr einfach, es mithilfe
hook_entity_property_info_alter()
eines benutzerdefinierten Eigenschaftsrückrufs verfügbar zu machen :Danach
$images[0]->file->uri->value()
ist wie erwartet verfügbar.quelle
Unten funktioniert ohne den Hack:
quelle
Dies ist, was für mich funktioniert, um den vollständigen Pfad eines einzelnen Bildes zu erhalten ...
Alternative...
quelle