* @var $form \yii\widgets\ActiveForm * @var $label string * @var $model \app\properties\AbstractModel * @var $multiple boolean * @var $property_id integer * @var $property_key string * @var $this \yii\web\View * @var $values \app\properties\PropertyValue */ use app\models\Property; use app\modules\shop\models\Product; use yii\helpers\ArrayHelper; use kartik\helpers\Html; $productIds = ArrayHelper::getColumn($values->values, 'value'); /** @var Product[] $products */ $products = Product::findAll($productIds); ?> <dl> <?php if (count($productIds) == 0) { return; } $property = Property::findById($property_id); echo Html::tag('dt', $property->name); foreach ($products as $product) { echo Html::tag('dd', Html::a($product->name, ['@product', 'model' => $product])); } ?> </dl>
/** * Preparation to delete category. * Deleting related products and inserted categories. * @return bool */ public function beforeDelete() { if (!parent::beforeDelete()) { return false; } $productObject = Object::getForClass(Product::className()); switch ($this->deleteMode) { case self::DELETE_MODE_ALL: $products = !is_null($productObject) ? Product::find()->join('INNER JOIN', $productObject->categories_table_name . ' pc', 'pc.object_model_id = product.id')->where('pc.category_id = :id', [':id' => $this->id])->all() : []; break; case self::DELETE_MODE_MAIN_CATEGORY: $products = Product::findAll(['main_category_id' => $this->id]); break; default: $products = !is_null($productObject) ? Product::find()->join('INNER JOIN', $productObject->categories_table_name . ' pc', 'pc.object_model_id = product.id')->join('INNER JOIN', $productObject->categories_table_name . ' pc2', 'pc2.object_model_id = product.id')->where('pc.category_id = :id', [':id' => $this->id])->groupBy('pc2.object_model_id')->having('COUNT(*) = 1')->all() : []; break; } foreach ($products as $product) { $product->delete(); } foreach ($this->children as $child) { $child->deleteMode = $this->deleteMode; $child->delete(); } if (!is_null($productObject)) { Yii::$app->db->createCommand()->delete($productObject->categories_table_name, ['category_id' => $this->id])->execute(); } return true; }
<?php /** * @var $attribute_name string * @var $form \yii\widgets\ActiveForm * @var $label string * @var $model \app\properties\AbstractModel * @var $multiple boolean * @var $property_id integer * @var $property_key string * @var $this \yii\web\View * @var $values \app\properties\PropertyValue */ use app\modules\shop\models\Product; use yii\helpers\ArrayHelper; $productIds = ArrayHelper::getColumn($values->values, 'value'); $data = ArrayHelper::map(Product::findAll($productIds), 'id', 'name'); ?> <?php echo \app\backend\widgets\Select2Ajax::widget(['initialData' => $data, 'form' => $form, 'model' => $model, 'modelAttribute' => $property_key, 'multiple' => $multiple === 1, 'searchUrl' => '/shop/backend-product/ajax-related-product', 'additional' => ['placeholder' => Yii::t('app', 'Search')]]);