Come utilizzare Views PHP per riscrivere i risultati di un campo?


7

Sto usando Views PHP per riscrivere i campi in Views. Posso accedere a tutte le variabili MA quelle che hanno una modalità di costruzione. Nel mio caso, ho il campo Contenuto: Nodo (che può essere creato in base a qualsiasi display), che dovrebbe essere accessibile usando la variabile $row->nodefield. Tuttavia, il contenuto di quella variabile è sempre vuoto. Ho provato con altre variabili e ogni campo con una modalità di costruzione non verrà visualizzato in Views PHP .

inserisci qui la descrizione dell'immagine

È un problema di progettazione o mi sto perdendo qualcosa?

Sto usando Drupal 7 e Views 3

MODIFICARE

L'uso di dpm () sui valori disponibili restituisce quanto segue:

DPM ($ riga)

inserisci qui la descrizione dell'immagine

DPM ($ data)

inserisci qui la descrizione dell'immagine

Risposte:


6

Sopra la sezione "Codice di output" dovresti controllare la $datavariabile nel campo "Valore".

Di solito sono solo dpm($data)per trovare il campo di cui ho bisogno. Quindi è possibile salvarlo nella $static['myvalue']variabile per l'uso nel campo "Codice di output".

È confuso, ma per qualche motivo se si provano solo le $row->xxxvariabili nella sezione "Codice di output" sono vuote o impostate sull'ID nodo.


Grazie. Sono nuovo a questo, quindi potresti aiutarmi ulteriormente: quando copio dpm($data)nel campo valore, Views restituisce una "chiamata alla funzione indefinita dpm ()" errore "
znat

OK. DPM è una funzione di sviluppo, quindi non funzionerà se il modulo di sviluppo non è installato. Installalo o usa semplicemente print_r ($ data).
Probabilità G

Non ho trovato alcun contenuto pertinente. (vedi la mia modifica) Tutti i campi sembrano nulli nell'oggetto $ row. Ho provato altre variabili come $ view o $ handler senza successo. Il token [nodefield] è disponibile in Rewrite Results, quindi dovrebbe essere da qualche parte. Qualche altra idea?
znat,

3

Gli $rowelementi delle variabili disponibili nelle viste sono in qualche modo inutili per ottenere i valori dei campi. Ma non è necessario utilizzare noad_loadper ottenere i dati necessari. Innanzitutto, come al solito, nascondi l'output del campo che desideri riscrivere, quindi nel campo Codice output del tuo campo PHP puoi usare in questo $datamodo:

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

In questo caso sto eliminando i tag non consentiti e attribuiti dal contenuto per l'uso in un'esportazione NITF. Se non sei sicuro di cosa ci sia dentro $data, puoi ovviamente print_r($data)dargli un'occhiata.


cosa intendi esattamente con: "Innanzitutto, come al solito, nascondi l'output del campo che vuoi riscrivere"? Stai rifacendo la casella di controllo "Escludi dalla visualizzazione" sul campo che vogliamo riscrivere?
Antonio,

Sì. Si utilizza "Escludi dalla visualizzazione" ogni volta che si desidera ottenere il valore di un campo e utilizzarlo in un campo personalizzato successivo.
Scott Lahteine,

1
È possibile utilizzare $data->field_field_body[0]['raw']['value']per ottenere il valore grezzo.
user2534880

1

Suggerimento aggiuntivo: l'array $ data contiene effettivamente i dati del nodo non elaborato e può essere stampato. Ma per renderlo correttamente dobbiamo elaborare i campi con funzioni come field_view_field .


1

Stai cercando di farlo all'interno delle viste? Perché non solo temi il modello di viste stesso invece di usare il PHP globale? Non sono sicuro se print_r funzionerà all'interno del campo di visualizzazione. Se fossi in me, farei semplicemente clic su tema -> informazioni, vedrai qualcosa come views-view-field - MyViewName.tpl.php

(modifica, chiarimento) Sotto la cartella del tema del modulo views, copia "views-view-field.tpl.php" quindi rinominalo in "views-view-field - MyViewName.tpl.php" e mettilo nella cartella / templates nel tuo sito li. Nel file, vedrai qualcosa di simile

<?php print $output; ?> 

Puoi eliminarlo e aggiungere tutti i campi manualmente come

<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>

ecc. O avvolgi l'output $ con quello che vuoi.

Inoltre, non ho mai avuto molta fortuna con DEVEL, utilizzo sempre solo:

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

Quindi guardare l'origine della pagina per ottenere le variabili. Forse sto usando DEVEL in modo errato, ma trovo che posso ottenere le variabili per ogni riga molto più facilmente con un vecchio normale var_dump di PHP.


Questo dà file duplicate!
user219492

0

Ho trascorso due giorni per trovare la soluzione. Il modo più semplice è aggiornare il "Views Php Module" a 7.x-2.x-dev. Il Maintainer ha risolto questo problema nella sua versione 2.x.

Puoi scaricare da qui (assicurati di scaricare 7.x-2.x-dev ): https://www.drupal.org/project/views_php

La speranza può aiutare qualcuno.


0

Non dovresti MAI archiviare il codice PHP nel tuo database (e con View PHP lo farai). Utilizzare invece un hook di Views per modificare i risultati.


Ciao @ssibal, e grazie per il contributo. Puoi spiegare perché questo dovrebbe essere evitato? Aumenterebbe notevolmente la qualità del tuo post.
Neograph734,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.