You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							144 lines
						
					
					
						
							3.3 KiB
						
					
					
				
			
		
		
	
	
							144 lines
						
					
					
						
							3.3 KiB
						
					
					
				| <?php | |
| /** | |
|  * Created by Error202 | |
|  * Date: 04.06.2018 | |
|  */ | |
|  | |
| namespace backend\components; | |
|  | |
| use yii\grid\DataColumn; | |
| use yii\helpers\Html; | |
| use yii\web\View; | |
| use Yii; | |
|  | |
| class ToggleColumn extends DataColumn | |
| { | |
|     /** | |
|      * Toggle action that will be used as the toggle action in your controller | |
|      * @var string | |
|      */ | |
|     public $action = 'toggle'; | |
|  | |
|  | |
|     /** | |
|      * @var string pk field name | |
|      */ | |
|     public $primaryKey = 'primaryKey'; | |
|  | |
|     /** | |
|      * Whether to use ajax or not | |
|      * @var bool | |
|      */ | |
|     public $enableAjax = true; | |
|  | |
|     /** | |
|      * @var string glyphicon for 'on' value | |
|      */ | |
|     public $iconOn = 'ok'; | |
|  | |
|     /** | |
|      * @var string glyphicon for 'off' value | |
|      */ | |
|     public $iconOff = 'remove'; | |
|  | |
|     /** | |
|      * @var string text to display on the 'on' link | |
|      */ | |
|     public $onText; | |
|  | |
|     /** | |
|      * @var string text to display on the 'off' link | |
|      */ | |
|     public $offText; | |
|  | |
|     /** | |
|      * @var string text to display next to the 'on' link | |
|      */ | |
|     public $displayValueText = false; | |
|  | |
|     /** | |
|      * @var string text to display next to the 'on' link | |
|      */ | |
|     public $onValueText; | |
|  | |
|     /** | |
|      * @var string text to display next to the 'off' link | |
|      */ | |
|     public $offValueText; | |
|  | |
|  | |
|     public function init() | |
|     { | |
|         if ($this->onText === null) { | |
|             $this->onText = Yii::t('main', 'On'); | |
|         } | |
|         if ($this->offText === null) { | |
|             $this->offText = Yii::t('main', 'Off'); | |
|         } | |
|         if ($this->onValueText === null) { | |
|             $this->onValueText = Yii::t('main', 'Active'); | |
|         } | |
|         if ($this->offValueText === null) { | |
|             $this->offValueText = Yii::t('main', 'Inactive'); | |
|         } | |
|         if ($this->enableAjax) { | |
|             $this->registerJs(); | |
|         } | |
|     } | |
|  | |
|     /** | |
|      * Registers the ajax JS | |
|      */ | |
|     public function registerJs() | |
|     { | |
|         if (Yii::$app->request->isAjax) { | |
|             return; | |
|         } | |
|         $js = <<<'JS' | |
| $(document.body).on("click", "a.toggle-column", function(e) { | |
|     e.preventDefault(); | |
|     $.post($(this).attr("href"), function(data) { | |
|         var pjaxId = $(e.target).closest("[data-pjax-container]").attr("id"); | |
|         $.pjax.reload({container:"#" + pjaxId}); | |
|     }); | |
|     return false; | |
| }); | |
| JS; | |
|         $this->grid->view->registerJs($js, View::POS_READY, 'zx-toggle-column'); | |
|     } | |
|  | |
|     /** | |
|      * @inheritdoc | |
|      */ | |
|     protected function renderDataCellContent($model, $key, $index) | |
|     { | |
|         $url = [$this->action, 'id' => $model->{$this->primaryKey}]; | |
|  | |
|         $attribute = $this->attribute; | |
|         $value     = $model->$attribute; | |
|  | |
|         if ($value === null || $value == true) { | |
|             $icon      = $this->iconOn; | |
|             $title     = $this->offText; | |
|             $valueText = $this->onValueText; | |
|             $color     = 'green'; | |
|         } else { | |
|             $icon      = $this->iconOff; | |
|             $title     = $this->onText; | |
|             $valueText = $this->offValueText; | |
|             $color     = 'red'; | |
|         } | |
|  | |
|         return Html::a( | |
|             '<span class="glyphicon glyphicon-' . $icon . '"></span>', | |
|             $url, | |
|             [ | |
|                 'title'       => $title, | |
|                 'class'       => 'toggle-column', | |
|                 'style'       => 'color:' . $color, | |
|                 'data-method' => 'post', | |
|                 'data-pjax'   => '0', | |
|             ] | |
|         ) . ($this->displayValueText ? " {$valueText}" : ''); | |
|     } | |
| }
 | |
| 
 |