您在這裡

Code Snippets : 計算Views生成資料的總數

hanamizuki's 的頭像
hanamizuki 在 2010-08-10 (二) 21:54 發表

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

程式寫得很簡潔喔,果然是高手~

順便分享一下,如果需要知道某個 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);

?>