CgridView нумерация страниц HTML - PullRequest
2 голосов
/ 10 октября 2011

Я использую виджет cgridview для отображения некоторых данных, а также использую нумерацию страниц.но проблема у меня в том, что мне нужно заменить разделение на страницы.мне нужно поместить его в нижний колонтитул страницы, например

<div id="footer">
  <div id="pagination">
    <!-- pagination: << < 1 2 3 4 > >>  --> 
  </div>
</div>

, но когда я проверяю HTML-код, div разбиения на страницы автоматически создается виджетом, некоторые div вроде

<div class="pager">
   <!-- pagination: << < 1 2 3 4 > >>  -->
</div>

любое решение, чтобы сделать как это ...

спасибо заранее ..


РЕДАКТИРОВАНИЕ: согласно сообщению LDG мой код

$pageSize = Yii::app()->user->getState('pageSize', Yii::app()->params['defaultPageSize']);

                    $widget = $this->widget('zii.widgets.grid.CGridView', array(
                        'id' => 'request-grid',
                        'dataProvider' => $model->search(),
                        'cssFile' => Yii::app()->baseUrl . '/media/css/gridview.css',
                        'summaryText' => '',
                        'enablePagination' => true,
                        'template'=>'{items}',
                        'pagerCssClass'=>'pager',
                        'pager' => 1,
                        'pager' => array(
                            'cssFile' => Yii::app()->baseUrl . '/media/css/gridview.css',
                            'header' => false,
                            'firstPageLabel' => 'First',
                            'prevPageLabel' => 'Previous',
                            'nextPageLabel' => 'Next',
                            'lastPageLabel' => 'Last',
                        ),
                        'columns' => array(
                            array(
                                'name' => 'id',
                                'header' => '#',
                                'value' => '$this->grid->dataProvider->pagination->currentPage * $this->grid->dataProvider->pagination->pageSize + ($row+1)',
                            ),
                 ........................................
                            ));

                    ?>
                    <div id="grid-view-footer">
                        <div class="paginationholder">
                            <div id="pagination">
                                <div class="floatright">
                                    <div class="pagers">
                                        <?php $widget->renderPager(); ?>
                                    </div>
                                </div>
                            </div>
                        </div>

                        <div class="recordspageholder">
                            <div class="recordsperpage">Records per page
                                <?php //echo $this->pagination; ?>
                                <?php echo CHtml::dropDownList('pageSize', $pageSize, array(1 => 1, 20 => 20, 30 => 30, 40 => 40, 50 => 50, 100 => 100), array('onchange' => "$.fn.yiiGridView.update('request-grid',{ data:{pageSize: $(this).val() }})",)); ?>
                            </div>
                        </div>

комментарий к ldg : но небольшая проблема.Я использую раскрывающийся список, чтобы показать записи на странице.CHtml :: dropDownList ('pageSize', $ pageSize, массив (1 => 1, 20 => 20, 30 => 30, 40 => 40, 50 => 50, 100 => 100), массив ('onchange'=> "$ .fn.yiiGridView.update ('request-grid', {data: {pageSize: $ (this) .val ()}})",)) ;.но когда я изменяю записи на странице, нумерация страниц не обновляется.например, если у меня есть 20 записей в дБ, когда я выбираю 40 записей на странице, часть пагинации также отображается.любое решение для этого.я буду обновлять код в моем вопросе, пожалуйста, просмотрите его.спасибо ..

Ответы [ 3 ]

3 голосов
/ 10 октября 2011

Если вам не нужно менять разметку, вам не нужно расширять классы.(И если вы действительно хотите изменить внешний вид пейджера, вы можете сделать большую часть этого в CSS.)

определить ваш виджет с помощью переменной примерно так:

$widget = $this->widget(
    ...
    'template'=>'{sorter}{items}'
    ...
);

(изменитьАтрибут шаблона для того, что подходит вам лучше всего.)

, тогда вы можете позвонить:

$widget->renderPager();

в другое место в вашем представлении.

3 голосов
/ 10 октября 2011

Вы не можете разделить виджет по разделам.Вы можете расширить CGridView и переопределить метод renderPager.

Теперь это выглядит так:

public function renderPager()
{
    if(!$this->enablePagination)
        return;

    $pager=array();
    $class='CLinkPager';
    if(is_string($this->pager))
        $class=$this->pager;
    else if(is_array($this->pager))
    {
        $pager=$this->pager;
        if(isset($pager['class']))
        {
            $class=$pager['class'];
            unset($pager['class']);
        }
    }
    $pager['pages']=$this->dataProvider->getPagination();

    if($pager['pages']->getPageCount()>1)
    {
        echo '<div class="'.$this->pagerCssClass.'">';
        $this->widget($class,$pager);
        echo '</div>';
    }
    else
        $this->widget($class,$pager);
}

Вы можете написать свой собственный метод.И вы можете добавить div с вашим собственным идентификатором

1 голос
/ 07 февраля 2017

Я знаю, что это очень старая запись, но если кто-то просто ищет способ переопределить класс, сгенерированный в этом div в пейджере, используйте это:

$this->widget('zii.widgets.grid.CGridView', array(
    'pagerCssClass'=>'newclass',
    ....

Сгенерированный div будет

<div class="newclass">
   ....
</div>

Работал для меня в Yii 1.1.17, не пробовал ни одного предыдущего.

...