Sono al punto dell'esperienza di Drupal in cui sto cercando di risolvere le sfide di progettazione del sito a livello di codice personalizzato utilizzando le API di Drupal e Views. Come al solito, il mio tentativo apparentemente semplice di risolvere un problema mi ha dimostrato quanto non so ancora!
Ho un campo di riferimento al nodo che punta a un contenuto di "fatti correlati" utilizzato da molti diversi tipi di contenuto e sottocategorie per ciascuno di questi tipi. Mentre posso creare una relazione e visualizzare i "fatti correlati" per una vista, ci sono problemi. Per uno, voglio che i fatti correlati vengano inseriti in un blocco separato e che visualizzi un unico elenco di fatti correlati per l'intero elenco di articoli forniti dalla vista. Views non gestisce alcun duplicato per nid multipli con lo stesso riferimento "fatti correlati". Inoltre, dovrei generare visualizzazioni separate di "fatti correlati" per ciascun tipo di contenuto e sottocategoria, che sarà un numero piuttosto elevato.
Se potessi creare una vista dei fatti correlati separata che potesse accettare un elenco di nid come argomento, la vista dei fatti correlati potrebbe essere semplificata. Quindi la mia domanda è come procedere. Anche se può essere possibile all'interno delle viste, sto cercando una soluzione php con modulo personalizzato , quindi devo ottenere quanto segue:
Estrarre i risultati di una qualsiasi delle viste del "tipo di contenuto" come un elenco di argomenti. Oltre a visualizzare i risultati della vista, devo caricare l'elenco dei NID che vengono visualizzati.
Chiama la vista dei fatti correlati e passa l'elenco di nidici da utilizzare come filtro o filtro contestuale nella vista "fatti correlati".
Informazioni aggiuntive:
Usando questa strategia ho iniziato definendo una vista e tentando di estrarne i risultati. Questo tentativo ha comportato un problema nel trovare i risultati nell'oggetto vista ( vedere questa domanda ). Una volta ottenuti i risultati, dovrò generare un'altra vista che abbia quei risultati come filtri. Ho visto le viste implementate dal codice come file di inclusione in cui tutti i parametri sono codificati, ma non ho trovato esempi che definiscono e generano una vista e manipolano i risultati usando una funzione php. Eventuali esempi o collegamenti sarebbero apprezzati.
Finora:
Due risposte hanno indirizzato il processo per applicare i risultati di una vista e metterlo in un'altra vista come filtro contestuale. Ma devo ancora affrontare il problema di avere dozzine di tipi di contenuto con almeno una dozzina di varianti del riquadro del contenuto in ciascuno. Invece di collegare direttamente ciascuna vista ai fatti correlati, dovrò far sì che una qualsiasi delle viste di contenuto della mia vista1 passi i suoi risultati a una singola vista separata dei 'fatti correlati'.
CONTENT TYPE SUB-CATEGORY RELATED FACT (nid)
Type 1 --------- General Info 101, 105
Specifications 103, 105
Inspections 102
Quality
etc...
Type 2 ----------General Info 101, 106
Specifications 102, 103
Cost factors 107
etc...
View1 trova un tipo di contenuto specifico e contiene vari articoli di sottocategoria ordinati per valore in un campo di sottocategoria. Inoltre contiene un campo di riferimento del nodo per i fatti correlati. Visualizza un filtro per un tipo di contenuto e una sottocategoria e ha campi esposti per la visualizzazione e un campo nascosto con i nodi di riferimento dei fatti correlati.
View2 filtra gli articoli dei "fatti correlati" e contiene un set di filtri contestuali per nid (sebbene l'impostazione si applichi all'URL)
Utilizzando il codice nella risposta di Letharion, il ciclo foreach nella riga 6 sta compilando un elenco degli ID degli articoli, non degli ID dei fatti correlati (gli articoli contengono un riferimento a fatti correlati, ma i fatti correlati non hanno un riferimento nodo agli articoli) . Devo estrarre gli ID dei fatti correlati dal campo dei fatti in ciascun nodo. Ho incluso il campo dei fatti nella definizione di View1, ma non riesco a trovare il risultato dal comando dpm ($ node); si è arrestato in modo anomalo e non so dove siano archiviati i valori nell'array.
Dato che ci sarà più di una View1 clonata per diversi tipi di contenuto, ho pensato che potesse avere senso usare hook_views_post_execute e averlo codificato come segue:
function mymodule_views_post_execute (&$sourceview) {
$nids = '';
foreach($sourceview->result as $node) {
$nids += $node->nid . ','; //I need field name for $node->facts
}
$nids = rtrim($nids, ',');
$view = views_get_view('get_related');
//dpm($nids); // Fatal error: Cannot unset string offsets...
$view->execute_display('panel_pane_1', array($nids));
}
Infine, non sono sicuro di dover indirizzare la visualizzazione della vista nella posizione corretta o ciò avviene semplicemente posizionando il riquadro del contenuto dei fatti correlati nella posizione del pannello attraverso l'interfaccia utente dei pannelli e lasciando che i temi dei pannelli gestiscano il resto.