it-swarm-korea.com

프로그래밍 방식으로 뷰 블록을 표시하려면 어떻게합니까?

머신 이름이 "news"인 뷰 블록을 만들었습니다.

module_invoke() 및보기의 기계 이름을 사용하여 표시하려면 어떻게합니까?

31
vitaly.batonov

views_embed_view() 을 사용하십시오 :

echo views_embed_view('view_machine_name', 'block_1');

탭을 클릭하여 표시 이름을 찾고 브라우저의 주소 표시 줄에서 해당 이름을 확인할 수 있습니다. #views-tab-block_1은 (는) block_1.

63
tostinni

뷰에 매개 변수를 전달하려면 다음을 사용하십시오.

echo views_embed_view('view_machine_name', 'block_1', $param);

예를 들면 다음과 같습니다.

echo views_embed_view('view_machine_name', 'block_1', $node->nid);

또는:

echo views_embed_view('view_machine_name', 'block_1', $nid, $uid);
22
Peter Lozovitskiy

대부분의 경우 tostinni의 답변이 정답입니다. 그러나 View 제목을 포함하려면 조금 더보기 흉합니다.

views_embed_view() 설명서에서 :

이 기능은 뷰의 제목을 표시하지 않습니다. 그렇게하려면 뷰를로드하고 미리보기를 가져온 다음 $view->get_title()을 가져 와서이 함수가 수동으로 수행하는 작업을 수행해야합니다.

예를 들면 다음과 같습니다.

$name = 'view_machine_name';
$display_id = 'block_1';
$view = views_get_view($name);
if (!$view || !$view->access($display_id)) {
  return;
}
$view_content = $view->preview($display_id);
$title = $view->get_title();

pdated : @rojosnow는 문서에서 미리보기를 가져와야한다고 지적했습니다. beforeget_title()을 호출하여 두 줄을 뒤집 었습니다.

8
Joshua Stewardson

이것은 나를 위해 일했다 :

$view = views_get_view('view_machine_name');
$view->set_display('Master');
$view->get_title();
$response = $view->preview('You_Block_id');

// html로 다음과 같이 호출했습니다.

<div class="col-md-4 col-sm-6">
<div class="blocksOuterWrapper companyNewsWrapper">
'.$response.'
</div>
</div>
1
devashish gurjar

나를 위해 기본 블록 (이름 없음)은 block_1가 아니라 block이라고합니다.

<?php echo views_embed_view('news_archive', 'block'); ?>
1

또한 tostinni의 답변을 기반으로합니다.

보기에 결과가없는 경우 HTML을 표시하지 않으려는 경우. 또한 제목이 있지만 결과가있는 경우에만 추가하십시오.

if (array_filter(views_get_view_result('view_machine_name', 'block_1'))) {
    print '<h2 class="my-view-block-title">Special Title</h2>';
    print views_embed_view('view_machine_name', 'block_1');
}
0
squarecandy

다음 코드로 뷰를 렌더링하는 대신 블록을 렌더링 할 수 있습니다.

<?php
 $block = block_load($module, $delta);
 $render_array = _block_get_renderable_array(_block_render_blocks(array($block)));
 $output = render($render_array);
 print $output;
?>
0
Leopathu

내 경험으로는 다음과 같은 기능을 사용하여 뷰 제목이나 내용으로 경로를 변환 할 수 있습니다.

<?php
function view_path_to_title($path)
{
  // only if your path is a URL alias
  $sql = "SELECT src FROM {url_alias} WHERE dst = '%s'";
  $src = db_result(db_query($sql, $path));

  // if you do not use URL aliases, you probably use $path here instead of $src
  $menu_item = menu_get_item($src);

  // make sure it worked as expected
  if(!empty($menu_item)
  && $menu_item["page_callback"] == "views_page"
  && count($menu_item["page_arguments"]) >= 2)
  {
    $args = $menu_item["page_arguments"];
    $view = views_get_view($args[0]);
  }
  else
  {
    $view = null;
  }

  if ($view)
  {
    // just loading a view is not quite enough, we have to setup the
    // arguments, including the display, and the "execute" the view
    $view->set_display($args[1]);
    array_shift($args); // view name
    array_shift($args); // display name
    $view->set_arguments($args);
    $view->execute();
    $title = $view->get_title();
    if($title)
    {
      return $title;
    }
  }

  // some "random" default
  return $path;
}

뷰를 렌더링하려면 $view->render() 대신 $view->get_title()을 사용하십시오.

확실히, $view->execute()을 제대로 호출 할 때까지는 아무 효과가 없었습니다. 반환 값으로 빈 문자열 (아마도 null 일 수 있음)을 얻습니다.

0
Alexis Wilke