Closed indigitale closed 3 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?
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
пример виджета в 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 посмотрим какие мои пакеты вы подключили и правильно ли вы используете инициализации этих компонентов
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.
ok, thank you. i'll try
Hi,
how can i use it? Than you!