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.
		
		
		
		
		
			
		
			
				
					
					
						
							143 lines
						
					
					
						
							2.8 KiB
						
					
					
				
			
		
		
	
	
							143 lines
						
					
					
						
							2.8 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(); | |
| 		} | |
| 	} | |
|  | |
| 	/** | |
| 	 * @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}" : "" ); | |
| 	} | |
|  | |
| 	/** | |
| 	 * 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'); | |
| 	} | |
| } |