Wie verwende ich Views PHP, um die Ergebnisse eines Feldes neu zu schreiben?


7

Ich verwende Views PHP , um Felder in Views neu zu schreiben. Ich kann auf alle Variablen zugreifen, ABER auf diejenigen, die einen Build-Modus haben. In meinem Fall habe ich das Feld Inhalt: Knoten (das gemäß jeder Anzeige erstellt werden kann), auf das über die Variable zugegriffen werden soll $row->nodefield. Der Inhalt dieser Variablen ist jedoch immer leer. Ich habe es mit anderen Variablen versucht, und jedes Feld mit einem Erstellungsmodus wird in Views PHP nicht gerendert .

Geben Sie hier die Bildbeschreibung ein

Ist das ein Designproblem oder fehlt mir etwas?

Ich verwende Drupal 7 und Views 3

BEARBEITEN

Wenn Sie dpm () für verfügbare Werte verwenden, wird Folgendes zurückgegeben:

dpm ($ row)

Geben Sie hier die Bildbeschreibung ein

dpm ($ data)

Geben Sie hier die Bildbeschreibung ein

Antworten:


6

Über dem Abschnitt "Ausgabecode" sollten Sie die $dataVariable im Feld "Wert" überprüfen .

Normalerweise dpm($data)finde ich nur das Feld, das ich brauche. Anschließend können Sie es in der $static['myvalue']Variablen speichern, um es im Feld "Ausgabecode" zu verwenden.

Es ist verwirrend, aber aus irgendeinem Grund, wenn Sie nur die $row->xxxVariablen im Abschnitt "Ausgabecode" ausprobieren, sind sie leer oder auf die Knoten-ID gesetzt.


Vielen Dank. Ich bin neu in diesem dpm($data)Bereich.
Könnten

OK. DPM ist eine Entwicklungsfunktion, daher funktioniert es nicht, wenn Sie das Entwicklungsmodul nicht installiert haben. Installieren Sie das entweder oder verwenden Sie einfach print_r ($ data).
Chance G

Ich habe keinen relevanten Inhalt gefunden. (siehe meine Bearbeitung) Alle Felder im $ row-Objekt scheinen null zu sein. Ich habe andere Variablen wie $ view oder $ handler ohne Erfolg ausprobiert. Das Token [Knotenfeld] ist jedoch in Rewrite Results verfügbar, sollte sich also irgendwo befinden. Irgendeine andere Idee?
21.

3

Die $rowElemente " Verfügbare Variablen" in Ansichten sind für das Abrufen von Feldwerten nutzlos. Sie müssen jedoch nicht verwenden noad_load, um die benötigten Daten abzurufen. Blenden Sie zunächst wie gewohnt die Ausgabe des Felds aus, das Sie neu schreiben möchten, und verwenden Sie dann im Feld Ausgabecode Ihres PHP-Felds Folgendes $data:

<?php echo check_markup($data->field_field_body[0]['rendered']['#markup'], 'nitf_body'); ?>

In diesem Fall entferne ich nicht zugelassene Tags und ordne sie dem Inhalt zur Verwendung in einem NITF-Export zu. Wenn Sie sich nicht sicher sind, was drin ist $data, können Sie es sich natürlich print_r($data)ansehen.


Was genau meinst du mit: "Verstecke zuerst wie üblich die Ausgabe des Feldes, das du umschreiben möchtest"? Aktivieren Sie das Kontrollkästchen "Von Anzeige ausschließen" in dem Feld, das wir neu schreiben möchten?
Antonio

Ja. Sie verwenden "Von Anzeige ausschließen", wenn Sie den Wert eines Felds abrufen und in einem nachfolgenden benutzerdefinierten Feld verwenden möchten.
Scott Lahteine

1
Sie können verwenden $data->field_field_body[0]['raw']['value'], um den Rohwert zu erhalten.
user2534880

1

Zusätzlicher Tipp: Das $ data-Array enthält tatsächlich die Rohknotendaten und kann gedruckt werden. Aber um es richtig zu rendern, müssen wir die Felder mit Funktionen wie field_view_field verarbeiten .


1

Versuchen Sie dies in Innenansichten zu tun? Warum nicht einfach die Ansichtsvorlage selbst thematisieren, anstatt PHP global zu verwenden? Ich bin nicht sicher, ob print_r im Ansichtsfeld funktioniert. Wenn ich es wäre, würde ich einfach auf Thema -> Informationen klicken. Sie sehen so etwas wie Ansichten-Ansichtsfeld - MyViewName.tpl.php

(Bearbeiten, Erläutern) Kopieren Sie im Themenordner des Ansichtsmoduls "views-view-field.tpl.php", benennen Sie es in "views-view-field - MyViewName.tpl.php" um und legen Sie es in Ihrem Ordner / templates ab auf Ihrer Website sie. In der Datei sehen Sie so etwas wie

<?php print $output; ?> 

Sie können das löschen und alle Ihre Felder manuell wie hinzufügen

<div class="MyPrettyTitle"><?php print $row->_field_data['nid']['entity']->title; ?></div> 
<div class="MyNodeBody">
<?php print $row->_field_data['nid']['entity']->body['und'][0]['value'];?>
</div>

usw. Oder wickeln Sie die $ -Ausgabe mit dem ein, was Sie wollen.

Außerdem hatte ich nie viel Glück mit DEVEL, ich benutze immer nur:

<?php print var_dump($row);?> 

Schauen Sie sich dann die Quelle der Seite an, um die Variablen zu erhalten. Vielleicht verwende ich DEVEL nur falsch, aber ich finde, dass ich die Variablen für jede Zeile mit einem normalen alten PHP var_dump viel einfacher abrufen kann.


Dies ergibt doppelte Zeilen!
user219492

0

Ich habe zwei Tage damit verbracht, die Lösung zu finden. Am einfachsten ist es, das "Views Php Module" auf 7.x-2.x-dev zu aktualisieren. Der Maintainer hat dieses Problem in seiner 2.x-Version behoben.

Sie können von hier herunterladen ( Stellen Sie sicher, dass Sie 7.x-2.x-dev herunterladen ): https://www.drupal.org/project/views_php

Hoffnung kann jemandem helfen.


0

Sie sollten NIEMALS PHP-Code in Ihrer Datenbank speichern (und mit View PHP werden Sie). Verwenden Sie stattdessen einen Views-Hook, um die Ergebnisse zu ändern.


Hallo @ssibal, und danke für deinen Beitrag. Können Sie erklären, warum dies vermieden werden sollte? Dies würde die Qualität Ihres Beitrags erheblich verbessern.
Neograph734
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.