'kv-page-summary'];
public $summaryOptions = ['class' => 'zPager'];
public $showEmpty = false; //为空时,是否显示信息
public $emptyTextOptions = ['class' => 'empty text-center'];
public $zSummary = []; //汇总数据,
public $layout = "{zSummary}\n{items}\n{pager}";
public $dataCount; //当前页记录数量
public $dataTotalCount; //总记录数
public $resizableColumns = false;
public function renderTableBody()
{
$tmp = $this->showPageSummary;
$this->showPageSummary = false;
$content = $this::zTableBody();
$this->showPageSummary = $tmp;
if ($this->showPageSummary) {
return $this->renderPageSummary() . $content;
}
return $content;
}
//为空时,不显示任何数据
public function zTableBody()
{
$models = array_values($this->dataProvider->getModels());
$keys = $this->dataProvider->getKeys();
$rows = [];
foreach ($models as $index => $model) {
$key = $keys[$index];
if ($this->beforeRow !== null) {
$row = call_user_func($this->beforeRow, $model, $key, $index, $this);
if (!empty($row)) {
$rows[] = $row;
}
}
$rows[] = $this->renderTableRow($model, $key, $index);
if ($this->afterRow !== null) {
$row = call_user_func($this->afterRow, $model, $key, $index, $this);
if (!empty($row)) {
$rows[] = $row;
}
}
}
if (empty($rows) && $this->emptyText != '') {
$colspan = count($this->columns);
return "
\n" . $this->renderEmpty() . " |
\n";
} else {
return "\n" . implode("\n", $rows) . "\n";
}
}
/**
* User: wangxj
*
* 禁用kartik加载bootstrap的class
*
*/
protected function initBootstrapStyle()
{
if ($this->striped) {
Html::addCssClass($this->tableOptions, 'table table-striped table-bordered table-zFixed table-responsive');
}
}
/**
* 重写分页. 左侧有按钮,固定在页面底部,需要引用ui.css
* @return string the rendering result
*/
public function renderPager()
{
$pagination = $this->dataProvider->getPagination();
$pagerHtml = '';
$this->dataCount = $this->dataProvider->getCount();
$this->dataTotalCount = $this->dataProvider->getTotalCount();
if ($pagination === false || $this->dataCount <= 0) {
//如果有功能按钮,没有分页也要显示
if (!empty($this->pagerButtons) || $this->summary) {
$pagerHtml = $this->renderPagerButton() . $pagerHtml;
}
return '' . $pagerHtml . '
';
}
/* @var $class LinkPager */
$pager = $this->pager;
$class = ArrayHelper::remove($pager, 'class', LinkPager::className());
$pager['pagination'] = $pagination;
$pager['view'] = $this->getView();
$pager['nextPageLabel'] = '';
$pager['prevPageLabel'] = '';
// $pager['linkOptions'] = ['class'=> 'icon-right'];
$pagerHtml = $class::widget($pager);
//如果有按钮
if (!empty($this->pagerButtons)) {
$pagerHtml = $this->renderPagerButton() . $pagerHtml;
} else {
$pagerHtml = $this->renderPagerGo() . $this->renderSummary() . $pagerHtml;
}
//如果需要固定
if ($this->pagerFixed) {
$pagerHtml = '' . $pagerHtml . '
';
}
return $pagerHtml;
}
protected function renderPagerButton()
{
$buttonHtml = '';
foreach ($this->pagerButtons as $pagerButton) {
$buttonHtml .= ' ' . $pagerButton;
}
$buttonHtml .= '
';
$buttonHtml .= $this->renderPagerGo() . $this->renderSummary();
return $buttonHtml;
}
public function renderSection($name)
{
switch ($name) {
case '{zSummary}':
return $this->renderZSummary();
case '{summary}':
return $this->renderSummary();
case '{items}':
return $this->renderItems();
case '{pager}':
return $this->renderPager();
case '{sorter}':
return $this->renderSorter();
default:
return false;
}
}
/**
* User: wangxj
*
* 汇总,$this->zSummary数组中的元素
*
* @return string
*/
public function renderZSummary()
{
$str = '';
if (!empty($this->zSummary)) {
$str .= '';
foreach ($this->zSummary as $item) {
$dataProvider = $this->dataProvider;
/* @var $dataProvider ActiveDataProvider */
/* @var $query ActiveQuery */
/* @var $model yii\db\ActiveRecord */
$query = $dataProvider->query;
$modelClass = $query->modelClass;
$model = new $modelClass();
if (isset($item['label'])) {
$title = $item['label'];
} else {
$title = $model->getAttributeLabel($item['attribute']);
}
$str .= '' . $title . ':' .
'' . number_format($query->sum($item['attribute']), 2) . '';
}
$str .= '
';
}
return $str;
}
/**
* Renders the summary text.
*/
public
function renderSummary()
{
$count = $this->dataProvider->getCount();
if ($count <= 0) {
return '';
}
$summaryOptions = $this->summaryOptions;
$tag = ArrayHelper::remove($summaryOptions, 'tag', 'div');
if (($pagination = $this->dataProvider->getPagination()) !== false) {
$totalCount = $this->dataProvider->getTotalCount();
$begin = $pagination->getPage() * $pagination->pageSize + 1;
$end = $begin + $count - 1;
if ($begin > $end) {
$begin = $end;
}
$page = $pagination->getPage() + 1;
$pageCount = $pagination->pageCount;
if (($summaryContent = $this->summary) === null) {
return Html::tag($tag, "共 " . number_format($pageCount) . "页 " . number_format($totalCount) . " 条记录", $summaryOptions);
}
} else {
$begin = $page = $pageCount = 1;
$end = $totalCount = $count;
if (($summaryContent = $this->summary) === null) {
return Html::tag($tag, Yii::t('yii', 'Total {count, number} {count, plural, one{item} other{items}}.', [
'begin' => $begin,
'end' => $end,
'count' => $count,
'totalCount' => $totalCount,
'page' => $page,
'pageCount' => $pageCount,
]), $summaryOptions);
}
}
return Yii::$app->getI18n()->format($summaryContent, [
'begin' => $begin,
'end' => $end,
'count' => $count,
'totalCount' => $totalCount,
'page' => $page,
'pageCount' => $pageCount,
], Yii::$app->language);
}
//分页显示跳转页数
protected
function renderPagerGo()
{
$pagination = $this->dataProvider->getPagination();
$str = '';
if ($pagination !== false && $pagination->pageCount > 1) {
$str = '';
}
return $str;
}
/**
* 每一列的总和
*
* @return null|string
*/
public
function renderPageSummary()
{
if (!$this->showPageSummary) {
return null;
}
$cells = [];
/** @var zDataColumn $column */
/* @var $dataProvider ActiveDataProvider */
/* @var $query ActiveQuery */
/* @var $model yii\db\ActiveRecord */
$dataProvider = $this->dataProvider;
$query = $dataProvider->query;
foreach ($this->columns as $column) {
if (get_class($column) == 'common\components\zDataColumn') {
$column->query = $query;
}
$cells[] = $column->renderPageSummaryCell();
}
$tag = ArrayHelper::remove($this->pageSummaryContainer, 'tag', 'tbody');
$content = Html::tag('tr', implode('', $cells), $this->pageSummaryRowOptions);
return Html::tag($tag, $content, $this->pageSummaryContainer);
}
}