Skip to content

Commit

Permalink
dev
Browse files Browse the repository at this point in the history
  • Loading branch information
skeeks-semenov committed May 9, 2018
1 parent b86abd3 commit 9f06b59
Show file tree
Hide file tree
Showing 5 changed files with 269 additions and 14 deletions.
41 changes: 40 additions & 1 deletion src/controllers/AdminCmsSite2Controller.php
Expand Up @@ -24,6 +24,10 @@
use skeeks\yii2\form\fields\SelectField;
use skeeks\yii2\form\fields\TextareaField;
use skeeks\yii2\form\fields\WidgetField;
use yii\base\Event;
use yii\data\ActiveDataProvider;
use yii\db\ActiveQuery;
use yii\db\Expression;
use yii\helpers\ArrayHelper;

/**
Expand Down Expand Up @@ -88,6 +92,33 @@ public function actions()
],

"grid" => [
'on init' => function (Event $e) {
/**
* @var $dataProvider ActiveDataProvider
* @var $query ActiveQuery
*/
$query = $e->sender->dataProvider->query;
$dataProvider = $e->sender->dataProvider;

$query->joinWith('cmsSiteDomains');
$query->groupBy(CmsSite::tableName() . ".id");
$query->select([
CmsSite::tableName() . '.*',
'countDomains' => new Expression("count(*)")
]);
},

'sortAttributes' => [
'countDomains' => [
'asc' => ['countDomains' => SORT_ASC],
'desc' => ['countDomains' => SORT_DESC],
'label' => 'Количество доменов',
'default' => SORT_ASC
]
],
'defaultOrder' => [
'def' => SORT_DESC
],
'visibleColumns' => [
'checkbox',
'actions',
Expand All @@ -99,6 +130,7 @@ public function actions()
'priority',
'code',
'name',
'countDomains',
],
'columns' => [
'active' => [
Expand All @@ -110,6 +142,13 @@ public function actions()
'image_id' => [
'class' => ImageColumn2::class,
],
'countDomains' => [
'value' => function(CmsSite $cmsSite) {
return $cmsSite->raw_row['countDomains'];
},
'attribute' => 'countDomains',
'label' => 'Количество доменов'
],
],
],
],
Expand Down Expand Up @@ -202,7 +241,7 @@ public function updateFields($action)
'cms_site_id' => 'id'
],

'controllerRoute' => '/cms/admin-cms-site-domain',
'controllerRoute' => '/cms/admin-cms-site-domain-2',
'gridViewOptions' => [
'columns' => [
//['class' => 'yii\grid\SerialColumn'],
Expand Down
42 changes: 35 additions & 7 deletions src/controllers/AdminCmsSiteDomain2Controller.php
Expand Up @@ -9,7 +9,10 @@
namespace skeeks\cms\controllers;

use skeeks\cms\backend\controllers\BackendModelStandartController;
use skeeks\cms\models\CmsSite;
use skeeks\cms\models\CmsSiteDomain;
use skeeks\yii2\form\fields\HiddenField;
use skeeks\yii2\form\fields\SelectField;
use yii\helpers\ArrayHelper;

/**
Expand All @@ -31,11 +34,6 @@ public function init()
*/
public function actions()
{
$updateFields = [
'domain',
'cms_site_id',
];

return ArrayHelper::merge(parent::actions(), [
'index' => [
"filters" => [
Expand All @@ -56,11 +54,41 @@ public function actions()
],
],
"create" => [
'fields' => $updateFields,
'fields' => [$this, 'updateFields'],
],
"update" => [
'fields' => $updateFields,
'fields' => [$this, 'updateFields'],
],
]);
}

public function updateFields($action)
{
/**
* @var $model CmsSiteDomain
*/
$model = $action->model;

if ($code = \Yii::$app->request->get('cms_site_id'))
{
$model->cms_site_id = $code;
$field = [
'class' => HiddenField::class,
'label' => false
];
} else {
$field = [
'class' => SelectField::class,
'items' => function() {
return ArrayHelper::map(CmsSite::find()->all(), 'id', 'asText');
}
];
}
$updateFields = [
'domain',
'cms_site_id' => $field
];

return $updateFields;
}
}
67 changes: 61 additions & 6 deletions src/widgets/GridView.php
Expand Up @@ -96,6 +96,15 @@ class GridView extends \yii\grid\GridView
*/
public $pageSizeLimitMax = 50;

/**
* @var array
*/
public $defaultOrder = [];
/**
* @var array
*/
public $sortAttributes = [];


public function behaviors()
{
Expand Down Expand Up @@ -123,10 +132,6 @@ public function behaviors()
],
//'multiple' => true,
'on beforeRender' => function ($e) {
/**
* @var $gridView GridView
*/
//$gridView = $e->sender->model->configBehavior->owner;
/**
* @var $widgetField WidgetField
*/
Expand All @@ -139,6 +144,26 @@ public function behaviors()
],
],
],
/*'sort' => [
'class' => FieldSet::class,
'name' => \Yii::t('skeeks/cms', 'Sorting'),
'fields' => [
'defaultOrder' => [
'class' => WidgetField::class,
'widgetClass' => SortSelect::class,
'on beforeRender' => function ($e) {
/**
* @var $widgetField WidgetField
$widgetField = $e->sender;
$widgetField->widgetConfig['items'] = ArrayHelper::getValue(
\Yii::$app->controller->getCallableData(),
'sortAttributes'
);
},
],
],
],*/
'paginationConfig' => [
'class' => FieldSet::class,
'name' => \Yii::t('skeeks/cms', 'Pagination'),
Expand Down Expand Up @@ -172,6 +197,8 @@ public function behaviors()
'pageSizeLimitMin',
'pageSizeLimitMax',
'pageSizeParam',

'defaultOrder',
],
'attributeLabels' => [
'visibleColumns' => 'Отображаемые колонки',
Expand All @@ -182,10 +209,13 @@ public function behaviors()
'pageSizeLimitMin' => \Yii::t('skeeks/cms', 'The minimum allowable value for pagination'),
'pageSizeLimitMax' => \Yii::t('skeeks/cms', 'The maximum allowable value for pagination'),
'pageSizeParam' => \Yii::t('skeeks/cms', 'pageSizeParam'),

'defaultOrder' => 'Сортировка',
],
'rules' => [
['visibleColumns', 'required'],
['visibleColumns', 'safe'],
['defaultOrder', 'safe'],
['caption', 'string'],

[['pageParam', 'pageSizeParam', 'defaultPageSize'], 'required'],
Expand Down Expand Up @@ -288,9 +318,10 @@ public function init()
parent::init();

//Применение включенных/выключенных колонок
$this->applyColumns();
$this->_applyColumns();

$this->_initPagination();
$this->_initSort();

//Если удалили колонки
foreach ($this->columns as $key => $column)
Expand Down Expand Up @@ -320,6 +351,20 @@ protected function _initPagination()
return $this;
}

/**
* @param DataProviderInterface $dataProvider
* @return $this
*/
protected function _initSort()
{
$dataProvider = $this->dataProvider;

$dataProvider->getSort()->attributes = ArrayHelper::merge($dataProvider->getSort()->attributes, $this->sortAttributes);
$dataProvider->getSort()->defaultOrder = $this->defaultOrder;

return $this;
}

/**
* @return ActiveDataProvider
*/
Expand Down Expand Up @@ -474,7 +519,8 @@ protected function _preInitColumns()

return $this;
}
protected function applyColumns()

protected function _applyColumns()
{
$result = [];
//Есть логика включенных выключенных колонок
Expand Down Expand Up @@ -533,9 +579,18 @@ protected function _getRealVisibleColumns()
*/
public function getEditData()
{
$sort = [];
if ($this->dataProvider->getSort()->attributes) {
foreach ($this->dataProvider->getSort()->attributes as $key => $value)
{
$sort[$key] = ArrayHelper::getValue($value, 'label');
}
}

return [
'callAttributes' => $this->callAttributes,
'availableColumns' => $this->getColumnsKeyLabels(),
'sortAttributes' => $sort,
];
}
}
80 changes: 80 additions & 0 deletions src/widgets/SortSelect.php
@@ -0,0 +1,80 @@
<?php
/**
* @author Semenov Alexander <semenov@skeeks.com>
* @link https://skeeks.com/
* @copyright (c) 2010 SkeekS
* @date 24.03.2018
*/

namespace skeeks\cms\widgets;

use skeeks\cms\widgets\assets\DualSelectAsset;
use yii\base\InvalidConfigException;
use yii\helpers\ArrayHelper;
use yii\helpers\Html;
use yii\widgets\InputWidget;
/**
* Class SortableDualList
* @package skeeks\cms\widgets
*/
class SortSelect extends InputWidget
{
/**
* @var array
*/
public $wrapperOptions = [];

/**
* @var array
*/
public $items = [];

/**
* @var array
*/
public $jsOptions = [];


public $itemOptions = [
'tag' => 'li'
];


/**
* @inheritdoc
*/
public function run()
{
if (!$this->hasModel()) {
throw new InvalidConfigException('!!!');
}

Html::addCssClass($this->options, 'sx-select-element');

if (!ArrayHelper::getValue($this->options, 'id')) {
$this->options['id'] = Html::getInputId($model, $attribute);
$this->jsOptions['element_id'] = $this->options['id'];
}

$this->wrapperOptions['id'] = $this->id;
$this->jsOptions['id'] = $this->id;

$this->options['multiple'] = true;

$items = (array) $this->model->{$this->attribute};
$selectedItems = [];
if ($items) {
foreach ($items as $value)
{
$selectedItems[$value] = $value;
}
}

$element = Html::activeListBox($this->model, $this->attribute, (array) $selectedItems, $this->options);

echo $this->render('sort-select', [
'element' => $element,
]);
}

}

0 comments on commit 9f06b59

Please sign in to comment.