Views用來「列資料」很棒,可是如果要做一些統計、計算,雖然有些模組可以用(像是Views Cul等等),但其實都不是很好的解決方案。不過Views的API非常齊全,所以只要了解Views的寫法,也是可以不需要自己寫query喔!
以下範例是算出某個Views的total rows,也就是該Views的總數。
實際應用舉例:
獎金獵人的「目前進行中比賽有XXX件」這樣的區塊。
<?php
$view = views_get_view( 'VIEWS_NAME' );
$view->get_total_rows = TRUE;
$view->execute();
$count = $view->total_rows;
print '目前進行中比賽有' . $count . 'XXX件';
?>
如果你的狀況需要設參數的話:
<?php
$view = views_get_view( 'VIEWS_NAME' );
$view->set_arguments( array( 1, 2, 3 ) ); //參數設在這
$view->get_total_rows = TRUE;
$view->execute();
$count = $view->total_rows;
print $count;
?>
如果希望最後輸出可以依照總數改變的話:
<?php
$view = views_get_view( 'VIEWS_NAME' );
$view->set_arguments( array( 1, 2, 3 ) ); //參數設在這
$view->get_total_rows = TRUE;
$view->execute();
$count = $view->total_rows;
if ($count > 0) {
$output = format_plural($count,
'只有 1 個',
'總共有 @count 個');
print $output;
}
?>
Re: Code Snippets : 計算Views生成資料的總數
程式寫得很簡潔喔,果然是高手~
順便分享一下,如果需要知道某個 view 的某個 page 的總數,可以參考下面的寫法:
<?php
$my_view_name = 'pdp';
$my_view = views_get_view($my_view_name);
$my_display_id = 'page_1';
$my_view->set_display($my_display_id);
$my_view->execute_display($my_display_id);
$my_subtotal1 = count($my_view->result);
//-----------------------------------------
$my_view = views_get_view($my_view_name);
$my_display_id = 'attachment_2';
$my_view->set_display($my_display_id);
$my_view->execute_display($my_display_id);
$my_subtotal2 = count($my_view->result);
//-----------------------------------------
$my_total = $my_subtotal1 + $my_subtotal2;
$my_percent1 = round( $my_subtotal1/$my_total*100 );
$my_percent2 = round( $my_subtotal2/$my_total*100 );
//-----------------------------------------
print '
不常使用 PDP ( PDP = 0, 1, 2 ),小計 ' . $my_subtotal1 . ' 人,比例:'.$my_percent1.' %
';
print '
常使用 PDP ( PDP = 3, 4, 5 ),小計 ' . $my_subtotal2 . ' 人,比例:'.$my_percent2.' %
';
$chart = array(
'#chart_id' => 'test_chart',
'#title' => chart_title(t('PDP 使用狀況分析'), 'cc0000', 15),
'#type' => CHART_TYPE_PIE,
'#size' => chart_size(700, 350),
);
$chart['#data']['不常使用 PDP'] = $my_subtotal1;
$chart['#data']['常使用 PDP'] = $my_subtotal2;
$chart['#labels'][] = t('不常使用 PDP: '.$my_percent1.' %');
$chart['#labels'][] = t('常使用 PDP: '.$my_percent2.' %');
$chart['#legends'][] = t('不常使用 PDP: '.$my_percent1.' %');
$chart['#legends'][] = t('常使用 PDP: '.$my_percent2.' %');
$chart['#data_colors'][] = 'ff0000';
$chart['#data_colors'][] = '00ff00';
echo chart_render($chart);
?>
Re: Code Snippets : 計算Views生成資料的總數
試試在 view的 fields 中
在groups中選擇 global
而後點選 Global: View result counter
也是另一種方法
Re: Code Snippets : 計算Views生成資料的總數
VIEWS_NAME 就是你在新增 views 時的 views name 吧,中文翻譯成【檢視名稱】。