How to DRUPAL ... Codice PHP e le Viste Vediamo qualche esempio di codice PHP che si può usare nel tentativo di manipolare le views (o viste) Drupal. |
Quello che vogliamo fare è rendere le viste più flassibili, o estendere il loro funzionamento e semplicemente dare degli spunti agli utilizzatori.
MODIFICARE UNA VIEW A RUNTIME
Volete sapere come modificare la query di una vista a runtime? Ad es. volete a runtime aggiungere o modificare il group by? Bene, leggete l'ottimo articolo Group By in Views
LAVORARE CON I PARAMETRI DI UNA VISTA
Volete stampare i parametri di ingresso di una views? PErché li volete controllare o perché li volete usare per altri scopi?
Il seguente codice lo fa:
$view = views_get_current_view();
$args = $view->args;
print $args[0];
ARGOMENTI DI UNA VISTA E NODI
Vogliamo vedere come a partire dall'argomento di una vista si possa caricare un nodo:
$view = views_get_current_view();
$args = $view->args;
$node = node_load($args[0]);
if($node)
{
foreach( $node->field_reference as $tmp ) {
print $tmp;
}
}
CONTARE I RISULTATI DI UNA VIEWS
Vediamo come eseguire una vista e come si contano i suoi risultati con codice PHP:
//Caricare la vista che serve
$view = views_get_view( 'MIAVISTA' );
// se necessario si passano i parametri alla vista in formato array
$view->set_arguments( array( 1, 2 ) );
//Chiamare la pre_execute per preparare i dati. E' necessario chiamarla solo se la vista ha più display. In caso di unico dispaly tale metodo non esiste
$view->pre_execute();
// si esegue la vista
$view->execute();
// si contano i risultati
$count = count( $view->result );
print $count;
Se invece che contare i risultati della views MIAVISTA si vogliono contare quelli della vista corrente:
$view = views_get_current_view();
Un altro modo per eseguire direttamente in display di una vista è:
$view->execute_display('page_1' , array( 1, 2 ) );
NOTE sulla pre-execute()
Quando eseguite con codice PHP una vista per prenderne i risultati considerate che se la vista è costruita in maniera paginata durante la execute() riceverete solo gli elementi della prima pagina. Quindi per fare le cose per bene meglio usare una copia della vista che non usa la paginazione.
STAMPARE I RISULTATI DI UNA VIEW
Quello che vogliamo è eseguire una vista e stampare alcuni campi:
$view = views_get_current_view();
$view->set_arguments( array( 1, 2 ) );
$view->execute();
$result = $view->result;
foreach ($view->result as $result) {
$campochevuoi = $result->field_miocampo;
print $campochevuoi;
}