
Dirk v B
Ich habe gegoogelt, Devel, Drupal für Firebug installiert, aber ich kann es nicht finden.
ich fand was Ich will, ich weiß wo es ist; Ich weiß es einfach nicht wie es bekommen.
Ich setze dies in Code-Klammern, aber Devel sagt mir, dass der Dateiname (den ich in die .tpl.php-Datei einfügen möchte) hier ist:
field_image (Object) stdClass
handler (Object) views_handler_field_field
view (Object) view
result (Array, 2 elements)
0 (Object) stdClass
_field_data (Array, 1 element)
nid (Array, 2 elements)
entity (Object) stdClass
field_image (Array, 1 element)
und (Array, 1 element)
0 (Array, 11 elements)
filename (String, 23 characters ) FILENAME.jpg
Wie bekomme ich also, dass FILENAME.jpg mit PHP ausgegeben wird?
<?php print $something->other; ?>

hakre
Immer wenn Sie einen Wert aus einer Variablen auslesen müssen, müssen Sie wissen, welchen Ausdruck Sie formulieren müssen, um auf diesen Wert zuzugreifen.
Für einen einfachen Variablenwert ist dies einfach, Sie nehmen einfach den Variablennamen und greifen als Variable darauf zu, indem Sie ihm das voranstellen $
Schild:
var_dump($variable);
Dies ist hier dokumentiert.
Dies funktioniert jedoch nur für einfache Datentypen wie string
oder integer
. Es gibt auch zusammengesetzte Datentypen, nämlich array
und object
. Sie können weitere Datentypen enthalten, seien es einfache oder zusammengesetzte. Wie das geht, erfahren Sie im PHP-Handbuch auf die Werte eines Arrays zugreifen und wie Sie können von einem Objekt darauf zugreifen. Ich denke, das weißt du schon ein bisschen, also nur, dass du es hier verlinkt hast.
Wenn du das gelernt hast, kannst du das dann kombinieren. Wenn es zB ein Array innerhalb eines Objekts gibt und darin eine Zeichenfolge, die Sie erhalten möchten, müssen Sie die kombinieren $
sign und den Variablennamen mit den benötigten Accessoren, Eigenschaftsnamen und Array-Schlüsseln. Dann bekommst du deinen Wert. Die von Ihnen geposteten Daten zeigen, dass Sie ein Objekt haben, das einige andere Objekte und Arrays enthält, und am Ende finden Sie den Variablennamen.
Einige Kombinationsbeispiel:
var_dump($variable->handler->view[0]->_field_data);
Dies basiert auf den Daten, die Sie oben angegeben haben. $variable
Hier fängst du an, ->
wird verwendet, um auf Objektmitglieder zuzugreifen, die dann benannt werden müssen (wie ein Name für eine Variable): handler
. Wie Sie in Ihrer Debug-Ausgabe gesehen haben handler
ist ein Objekt, das Sie erneut verwenden müssen ->
um auf die zuzugreifen view
Mitglied davon.
Jetzt view
ist anders, weil es ein Array ist. Sie greifen auf Werte eines Arrays zu, indem Sie verwenden []
und den Schlüssel dort reinstecken. Der Schlüssel in meinem Beispiel ist eine Zahl, 0
. Und da der Wert dieses Array-Eintrags wieder ein Objekt ist, müssen Sie im nächsten Schritt verwenden ->
aufs Neue.
Sie können dieses Spiel fortsetzen, bis Sie das Element erreichen, das Sie interessiert. Die Debug-Ausgabe, die Sie bereits haben, hilft Ihnen, den Ausdruck zu schreiben, der den Wert zurückgibt. Möglicherweise ist es:
$field_image->handler->view->result[0]->_field_data['nid']['entity']->field_image['und'][0]['filename']
Aber das kann ich hier auf meinem System nicht vollständig validieren.
Wenn Sie jedoch Dinge herausfinden, ist es hilfreich, sie zu verwenden var_dump
wie Sie den Ausdruck Schritt für Schritt erweitern könnten, bis Sie das Element finden. Wenn Sie einen Fehler machen, werden Sie sofort sehen. Manchmal hilft es, a zu platzieren die();
nach dem var_dump
Anweisung, um die Antwort nicht zu beenden, bevor sie zu viele andere Daten enthält, die die Informationen vor Ihnen verbergen. Das Devel-Plugin bietet zusätzliche Debug-Routinen, um prominente Werte abzuspeichern.
Wenn dies Ihr Objekt ist:
field_image (Object) stdClass
handler (Object) views_handler_field_field
view (Object) view
result (Array, 2 elements)
0 (Object) stdClass
_field_data (Array, 1 element)
nid (Array, 2 elements)
entity (Object) stdClass
field_image (Array, 1 element)
und (Array, 1 element)
0 (Array, 11 elements)
filename (String, 23 characters ) FILENAME.jpg
Ich denke, Sie können es finden mit:
field_image->handler->view->result[0]->_field_data['nid'][entity]->field_image['und'][0]['filename]
Könnte ein Fehler sein, aber die allgemeine Idee ist: Wenn Sie ein Objekt haben, holen Sie sich die Variable mit ->
und wenn Sie ein Array haben, verwenden Sie [key]
.
Angenommen, Sie haben ein Knotenobjekt in $node. Sie können seine Werte sehr schön drucken mit:
dpm($node); // remember this function is declared in devel module
Dann können Sie die Informationen von $node sehen und die internen Felder mit einem Klick erweitern. Und mit einem Doppelklick auf das Feld können Sie den PHP-Pfad sehen.

Sie erhalten dieses Ergebnis:

Ich hoffe, das hilft!
PD: Ich schätze, diese Funktionalität ist auf D6s dpm nicht verfügbar.
Versuchen:
$field_image->handler->view->result[0]->_field_data['nid']['entity']->field_image['und'][0]['filename']
Wenn Sie devel installiert haben und versuchen Sie es
krumo ($variable);
Denken Sie daran, dass standardmäßig nur Admin-Benutzer Rechte zur Verwendung des krumo-Befehls haben, aber dies kann durch einen Blick auf die DEVEL-Rollenberechtigungen geklärt werden. (Vergessen Sie nicht, diese Berechtigungen zu entfernen, sobald Sie fertig sind.)

Ingrid
<? print_r($something["other"]); ?>
(wo das andere ist) also ist das Ergebnis ‘dies’
Lassen Sie mich zusammenfassen
print_r($data); => Traditional view of printing array.
var_dump($data); => Not so much cleaned view , gives you everything but in very suffocated manner
print "<pre>"; print_r($data); => A cleaned view but will not get data types information.
dpm($data); => It gives you everything, but you need to have installed devel.
9891900cookie-checkKann eine Variable in der Ausgabe von print_r() sehen, ist sich aber nicht sicher, wie man im Code darauf zugreiftyes
SimpleXML: Wenn Sie eine haben
print_r
eines SimpleXMLElement-Objekts werden hier Antworten gegeben: Wie bekomme ich Werte von XML-Elementen? und Zugreifen auf @attribute von SimpleXML– hakre
4. November 2012 um 9:23 Uhr
Nochmals vielen Dank, hakre. Tolle Antworten und Kommentare, und ich verweise immer noch hin und wieder auf diesen Beitrag, wenn ich in Code eintauche, da ich hauptsächlich mit UX- und designbezogenen Aufgaben beschäftigt bin.
– Dirk v B
12. November 2012 um 0:41 Uhr
Erkunden Sie Ihre print_r-Ausgabe interaktiv (guten Dank @mario): array.include-once.org
– hakre
23. Dezember 2014 um 16:47 Uhr
Beginnen Sie von oben und wann immer Sie sich vom Objekt zur nächsten Ebene bewegen, verwenden Sie den Pfeil (“->”) und wenn Sie sich vom Array bewegen, platzieren Sie das Element der nächsten Ebene in eckige Klammern.
– MilanG
27. Oktober 2017 um 8:31 Uhr