pvsaintpe / yii2-freeze-column

GNU General Public License v3.0
2 stars 0 forks source link

How can i use it #1

Closed indigitale closed 3 years ago

indigitale commented 4 years ago

Hi,

how can i use it? Than you!

pvsaintpe commented 4 years ago

This extension for lock left, right or both columns in GridView for Yii2 when you horizontal scrolling GRID.

Can I see your code, where you want using this?

indigitale commented 4 years ago

Thank You. I need to lock left column, but i don't know how to use your extension. Can you give me some example? I'm using Kartik Dynagrid

pvsaintpe commented 4 years ago

пример виджета в GridView

namespace backend\widgets;

use pvsaintpe\grid\widgets\GridView as BaseGridView;

/**
 * Class GridView
 * @package backend\widgets
 */
class GridView extends BaseGridView
{
    public function run()
    {
        parent::run();
        $view = $this->getView();
        $gridId = $this->options['id'];
        foreach ($view->js as $position => $keys) {
            foreach ($keys as $key => $js) {
                $view->js[$position][$key] = str_replace(
                    "jQuery('#{$gridId} .kv-grid-table:first').floatThead(",
                    "jQuery('#{$gridId} .kv-grid-table').floatThead(",
                    $js
                );
            }
        }
    }
}

Далее пример инициализации грида в view.php

use backend\widgets\GridView;

$this->params['breadcrumbs'][] = $this->title;
?>
<div class="box box-primary payin-index">
    <div class="box-body">
        <?= GridView::widget([
            'dataProvider' => $dataProvider,
            'filterModel' => $searchModel,
            'columns' => $searchModel->getGridColumns(),
            'freezeOptions' => $searchModel->getFreezeOptions(),
        ])?>
    </div>
</div>

вам нужна строчка с

'freezeOptions' => $searchModel->getFreezeOptions(),

пример того что может лежать в freezeOptions

/**
 * Возвращает настройки для закрепления
 * @return array
 */
public function getFreezeOptions()
{
    return [
        'freezeLeftColumns' => [
           'id',
           'name',
        ],
        'freezeRightColumns' => [
           'actions',
        ]
    ];
}

в ключи freezeLeftColumns, freezeRightColumns - положить идентификаторы колонок (по сути это id, или name) ваших полей вашего грида, которые хотите закрепить слева или справа или и там и там

Да, и еще, возможно это важно, по умолчанию вроде, GridView в конфиге по ключу 'columns' принимает массив вида

/**
 * @return array
 */
public function getGridColumns()
{
    return [
        [
            'class' => 'backend\components\grid\IdColumn',
            'permissionPrefix' => $this->getPermissionPrefix(),
        ],
        [
            'class' => 'backend\components\grid\SimpleUserIdColumn',
        ],
        [
            'class' => 'backend\components\grid\DataColumn',
            'attribute' => 'userEmail',
            'value' => function (PayinSearchBase $model) {
                return $model->user ? $model->user->email : null;
            }
        ],
        [
            'class' => 'backend\components\grid\SimpleAccountIdColumn',
        ],

и тд

если по простому без ключей, вам бы ключи туда прокинуть, типа так

/**
 * @return array
 */
public function getGridColumns()
{
    return [
        'id' => [
            'class' => 'backend\components\grid\IdColumn',
            'permissionPrefix' => $this->getPermissionPrefix(),
        ],
        'user_id' => [
            'class' => 'backend\components\grid\SimpleUserIdColumn',
        ],
        'userEmail' => [
            'class' => 'backend\components\grid\DataColumn',
            'attribute' => 'userEmail',
            'value' => function (PayinSearchBase $model) {
                return $model->user ? $model->user->email : null;
            }
        ],
        'account_id' => [
            'class' => 'backend\components\grid\SimpleAccountIdColumn',
        ],

Классы которые я использую это обертки над

namespace backend\components\grid;

use backend\helpers\Html;
use backend\helpers\Url;
use pvsaintpe\grid\components\ActionColumn as ActionColumnBase;
use yii\db\BaseActiveRecord;
use yii\helpers\ArrayHelper;
use Closure;
use Yii;

/**
 * Class ActionColumn
 * @package backend\components\grid
 */
class ActionColumn extends ActionColumnBase
{
    public $attribute = 'action';

    public $dropdownOptions = ['class' => 'pull-right'];

или например

namespace backend\components\grid;

use backend\helpers\Html;
use yii\db\BaseActiveRecord;
use Yii;
use yii\web\Application;

class IdColumn extends DataColumn
{
    public $width = '36px';
    public $attribute = 'id';

а DataColumn может быть таким

namespace backend\components\grid;

use pvsaintpe\grid\components\DataColumn as DataColumnBase;

/**
 * Class DataColumn
 * @package backend\components\grid
 */
class DataColumn extends DataColumnBase
{
    public $vAlign = 'middle';

    /**
     * @var array
     */
    public $columnOptions = [
        'clickable' => 1,
    ];

Надеюсь поможет

если не получится - отправьте мне свой composer.json посмотрим какие мои пакеты вы подключили и правильно ли вы используете инициализации этих компонентов

pvsaintpe commented 4 years ago

Thank You. I need to lock left column, but i don't know how to use your extension. Can you give me some example? I'm using Kartik Dynagrid

You must use my components for resolve your task.

indigitale commented 4 years ago

ok, thank you. i'll try