it-swarm-eu.dev

Jaký je nejlepší programový způsob, jak iterovat výsledky zobrazení?

Jaký je nejlepší pohled, pojmenovaný 'Děti' (se dvěma poli: child_node_id a birth_order_value), programově, k iteraci iterací prostřednictvím výsledků výsledků pohledu, které jsou dány display_id 'default' a argumentem, který obsahuje id nadřazeného uzlu?

Dříve jsem použil pohled v bloku pomocí kódu podobného následujícímu:

if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2)) {
   $node = node_load(arg(1));
   $args = array($node->nid);
   $view = views_get_view('Children');
   print $view->preview('default', $args);
}

V jiném bloku však chci provést nějakou logiku založenou na hodnotách nalezených v pohledu. Možná byste mohli hádat, že obchodní logika je založena na mém posledním požadavku: Chci, aby byl blok kódu podporující pohled („Děti“) nazýván vícekrát. Když iteruji výsledky datového souboru zobrazení, chci rekurzivně iterovat prostřednictvím dětských uzlů dotazujících se na jejich děti.

12
clsturgeon

Trochu si pohrávám s pohledy, zdá se, že jsem vypracoval přístup. Rád bych však nechal svou otázku otevřenou pro jiné odpovědi a lepší řešení.

<?php
if ( arg(0) == 'node' && is_numeric(arg(1)) && ! arg(2) ) {
   $node = node_load(arg(1));
   $args = array($node->nid );
   unset($view);
   $view = views_get_view('Children');
   $view->set_display('default');  
   $view->set_arguments($args);
   $view->set_items_per_page(20);
   $view->execute();
   $newarg = array();
   for ($i=0; $i<sizeof($view->result); $i++) {
      $newarg[$i] = $view->render_field('nid_1', $i);
   }
   for ($i=0; $i<sizeof($newarg); $i++) {
      unset($view);
      $view = views_get_view('Children');
      $view->set_display('default');  
      $view->set_arguments($newarg[$i]);
      $view->set_items_per_page(20);
      $view->execute();
      ....
   }
}
?>

Klíčem k vícenásobnému provedení pohledu bylo, abych se deaktivoval ($ view), když jsem udělal sadu výsledků.

2
Jeremy French

Dostal jsem dobrý počet najetých kilometrů z následující funkce. Návratová hodnota je pole všech záznamů pohledu. Voláním dsm ($ return_value) získáte dobrou představu o struktuře vašeho konkrétního pohledu.

function _get_view_data($view_name, $args, $page = NULL, $page_size = 0 ) {
    $view = views_get_view($view_name);
    $view->pager['items_per_page'] = $page_size;
    $view->set_arguments($args);
    if ($page) {
        $view->build($page);
        $view->execute($page);
    }
    else {
        $view->execute();
    }
    return $view->result;
}
1
theta-fish

Tady je pomocná funkce již zabudovaná do rozhraní API Drupal). (Strávil jsem chvilku blýskáním v dokumentech Drupal Docs) a nakonec jsem ji našel. mnoho dalších také vytvořilo řešení, která tohoto pomocníka nepoužívají, a také, že tento pomocník dělá jeden zajímavý krok, který jiná řešení ne ... zavolat pre_render na objekt $ view před spuštěním).

Nemohu ručit za to, zda to funguje dobře nebo ne, ale alespoň je to konkrétní místo, kde lze s těmito přístupy hovořit.

Pro D6 http://api.drupal.org/api/views/views.module/function/views_get_view_result/6

A pro D7 http://api.drupal.org/api/views/views.module/function/views_get_view_result/7

1
Christian Nally