it-swarm-ko.tech

프로그래밍 방식으로 뷰의 결과를 반복하는 가장 좋은 방법은 무엇입니까?

'Children'이라는 뷰 (child_node_id와 birth_order_value라는 두 필드가 있음)가 주어지면 display_id가 'default'이고 부모 노드 ID를 포함하는 인수가 주어진 뷰 결과 세트를 프로그래밍 방식으로 반복하는 가장 좋은 방법은 무엇입니까?

이전에는 다음과 유사한 코드를 사용하여 블록에서 View를 사용했습니다.

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);
}

그러나 다른 블록에서는 뷰에서 찾은 값을 기반으로 몇 가지 논리를 수행하려고합니다. 내 최종 요구 사항에 따라 비즈니스 논리를 추측 할 수 있습니다.보기를 지원하는 코드 블록 ( '자녀')을 여러 번 호출하고 싶습니다. 뷰 데이터 세트 결과를 반복 할 때 하위 노드를 조회하는 하위 노드를 반복적으로 반복하고 싶습니다.

12
clsturgeon

Views로 조금 놀아서 접근 방식을 시도한 것 같습니다. 그러나 내 질문을 다른 답변과 더 나은 솔루션에 공개하고 싶습니다.

<?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();
      ....
   }
}
?>

뷰를 여러 번 실행하는 열쇠는 결과 세트가 끝나면 unset ($ view)하는 것이 었습니다.

2
Jeremy French

다음 기능 중 좋은 마일리지를 얻었습니다. 반환 값은 모든 뷰 레코드의 배열입니다. dsm ($ return_value)을 호출하면 특정 뷰의 구조를 알 수 있습니다.

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

다음은 Drupal API에 이미 내장 된 도우미 함수입니다. (나는 Drupal Docs에서 주위를 불황으로 보냈고 결국 그것을 찾았습니다. 많은 사람들 이이 도우미를 사용하지 않는 솔루션을 생산 했으며이 도우미가 다른 흥미로운 단계를 수행하는 것처럼 보입니다. 솔루션은 ... 실행하기 전에 $ view 객체에서 pre_render를 호출하지 않습니다).

나는 그것이 잘 작동하는지 아닌지를 보증 할 수는 없지만 적어도 이러한 접근법과 관련된 문제를 불러 낼 수있는 특정 장소입니다.

D6의 경우 http://api.drupal.org/api/views/views.module/function/views_get_view_result/6

그리고 D7의 경우 http://api.drupal.org/api/views/views.module/function/views_get_view_result/7

1
Christian Nally