function getModelsNameArray() { $model_array = []; //$path = Yii::getAlias('@app/modules/admin/models/*.php'); //$modelNamespace = 'app\modules\admin\models\\'; $path = Yii::getAlias(\Yii::$app->getModule('options')->model_path); $modelNamespace = Yii::getAlias(\Yii::$app->getModule('options')->modelNamespace); $pattern = '/.+\\//i'; //print_r(glob($path)); foreach (glob($path) as $filename) { $model_name = $modelNamespace . preg_replace($pattern, '', str_replace(".php", "", $filename)); $m = new $model_name(); /* имя модели без namespace */ $clearModelName = MyHelper::modelFromNamespace($model_name); if (isset($m->modelFrontName)) { $model_array[$clearModelName] = $m->modelFrontName; } if (isset($m->childModels) and is_array($m->childModels)) { foreach (MyHelper::complexModel($model_name) as $chModel => $chModelName) { $model_array[$chModel] = $chModelName; } } } return $model_array; }
/** * @return OptionsList */ public function getChildOptionsList($cat_id) { $model_name = MyHelper::modelFromNamespace($this->model_name); $parent_model_name = MyHelper::modelFromNamespace($this->parent_model_name); $model = new $this->parent_model_name(); $parent_ids = $this->getParentIds($cat_id, [$cat_id], $model); $option_ids = ModelsOptionsList::find()->select('option_id')->where(['IN', 'model_id', $parent_ids])->asArray()->all(); $options = OptionsList::find()->where(["IN", 'id', $this->flatArray($option_ids, 'option_id')])->andWhere(['model' => $parent_model_name . '-' . $model_name])->all(); return $options; }
/** Render widget */ public function run() { $model = $this->behavior->owner; $model_name = MyHelper::modelFromNamespace($this->behavior->model_name); $parent_model_name = MyHelper::modelFromNamespace($this->behavior->parent_model_name); $parent_relation = $this->behavior->parent_relation; if ($model->{$parent_relation}) { $cat_id = $model->{$parent_relation}->id; /** * Формируем поля для параметров * * @var $optionList \porcelanosa\yii2options\models\OptionsList */ if ($this->behavior->getChildOptionsList($cat_id) and is_array($this->behavior->getChildOptionsList($cat_id))) { foreach ($this->behavior->getChildOptionsList($cat_id) as $optionList) { $option = ChildOptions::findOne(['model' => $parent_model_name . '-' . $model_name, 'model_id' => $model->id, 'option_id' => $optionList->id]); $option_name = trim(str_replace(' ', '_', $optionList->alias)); $value = $this->behavior->getChildOptionValueById($optionList->id); $option_type_alias = $optionList->type->alias; if ($option_type_alias == 'boolean') { $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_boolean', ['option_name' => $option_name, 'optionList' => $optionList, 'value' => $value]); } if ($option_type_alias == 'textinput') { $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_textinput', ['option_name' => $option_name, 'optionList' => $optionList, 'value' => $value]); } if ($option_type_alias == 'textarea') { $textarea = $option ? ChildRichTexts::find()->where(['option_id' => $option->id])->one() : null; $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_textarea', ['option_name' => $option_name, 'optionList' => $optionList, 'richTextValue' => $textarea != null ? $textarea->text : '']); } if ($option_type_alias == 'richtext') { $richText = $option ? ChildRichTexts::find()->where(['option_id' => $option->id])->one() : null; $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_rich_text', ['option_name' => $option_name, 'optionList' => $optionList, 'richTextValue' => $richText != null ? $richText->text : '']); } if ($option_type_alias == 'dropdown') { // получаем фабрики $status_preset_values = OptionPresetValues::find()->where(['preset_id' => $optionList->preset->id])->orderBy('sort')->all(); // формируем массив, с ключем равным полю 'id' и значением равным полю 'name' $status_preset_items = ArrayHelper::map($status_preset_values, 'id', 'value'); $status_preset_items = ArrayHelper::merge(['null' => 'Выберите ' . mb_strtolower($optionList->name)], $status_preset_items); $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_dropdown', ['option_name' => $option_name, 'optionList' => $optionList, 'value' => $value, 'status_preset_items' => $status_preset_items]); } if ($option_type_alias == 'radiobuton_list') { // получаем фабрики $status_preset_values = OptionPresetValues::find()->where(['preset_id' => $optionList->preset->id])->orderBy('sort')->all(); // формируем массив, с ключем равным полю 'id' и значением равным полю 'name' $status_preset_items = ArrayHelper::map($status_preset_values, 'id', 'value'); $this->options_string .= '<label> ' . $optionList->name . '</label>' . Html::radioList($option_name, $value ? $value : null, $status_preset_items, ['id' => $option_name, 'class' => 'form-control']); } if ($option_type_alias == 'dropdown-multiple') { // получаем список значений для мульти селектед $multipleValuesArray = $this->behavior->getChildOptionMultipleValueByOptionId($option->id); // получаем фабрики $status_preset_values = OptionPresetValues::find()->where(['preset_id' => $optionList->preset->id])->orderBy('sort')->all(); // формируем массив, с ключем равным полю 'id' и значением равным полю 'name' $status_preset_items = ArrayHelper::map($status_preset_values, 'id', 'value'); $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_dropdown_multiple', ['option_name' => $option_name, 'optionList' => $optionList, 'multipleValuesArray' => $multipleValuesArray, 'status_preset_items' => $status_preset_items]); } /* Список checkboxes */ if ($option_type_alias == 'checkboxlist-multiple') { // получаем список значений для мульти селектед $multipleValuesArray = $option ? $this->behavior->getChildOptionMultipleValueByOptionId($option->id) : []; // получаем фабрики $status_preset_values = OptionPresetValues::find()->where(['preset_id' => $optionList->preset->id])->orderBy('sort')->all(); // формируем массив, с ключем равным полю 'id' и значением равным полю 'name' $status_preset_items = ArrayHelper::map($status_preset_values, 'id', 'value'); $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_checkboxlist_multiple', ['option_name' => $option_name, 'optionList' => $optionList, 'multipleValuesArray' => $multipleValuesArray, 'status_preset_items' => $status_preset_items]); } /* IMAGE Изображение */ if ($option_type_alias == 'image') { $this->options_string .= $this->render('@vendor/porcelanosa/yii2-options/views/_partials/_image', ['option_name' => $option_name, 'optionList' => $optionList, 'value' => $value, 'this_widget' => $this, 'behavior' => $this->behavior]); } } } $view = $this->getView(); OptionsAsset::register($view); $this->options['id'] = 'child-opt-widget-' . $this->model->id; $this->options['class'] = 'child-options'; } return $this->render('optionsWidget', ['options_string' => $this->options_string]); }
$form = ActiveForm::begin(); ?> <?php $model_array = []; //$path = Yii::getAlias('@app/modules/admin/models/*.php'); //$modelNamespace = 'app\modules\admin\models\\'; $path = Yii::getAlias(\Yii::$app->getModule('options')->model_path); $modelNamespace = Yii::getAlias(\Yii::$app->getModule('options')->modelNamespace); $pattern = '/.+\\//i'; //print_r(glob($path)); foreach (glob($path) as $filename) { $model_name = $modelNamespace . preg_replace($pattern, '', str_replace(".php", "", $filename)); $m = new $model_name(); /* имя модели без namespace */ $clearModelName = MyHelper::modelFromNamespace($model_name); if (isset($m->modelFrontName)) { $model_array[$clearModelName] = $m->modelFrontName; } if (isset($m->childModels) and is_array($m->childModels)) { foreach (MyHelper::complexModel($model_name) as $chModel => $chModelName) { $model_array[$chModel] = $chModelName; } } } ?> <div class="row"> <div class="col-md-7"> <div class="row"> <div class="col-md-6"> <?php
use porcelanosa\yii2options\OptionsBehavior; use porcelanosa\yii2options\components\helpers\MyHelper; /** * @var $optionList OptionsList * @var $option_name string * @var $value string * @var $this_widget OptionsWidget * @var $behavior OptionsBehavior */ $delimage_link_anchor = Yii::t('app', 'Delete image'); $view = $this_widget->getView(); $model_name = MyHelper::modelFromNamespace($behavior->model_name); $appUrl = $behavior->appUrl; if (isset($behavior->parent_model_name)) { if ($behavior->parent_model_name != '' or $behavior->parent_model_name != null) { $model_name = MyHelper::modelFromNamespace($behavior->parent_model_name) . '-' . $model_name; } } $delimage_script = <<<JS \t\t\$("#delimg-{$option_name}-{$this_widget->model->id}").on('click', function(e) { \t\t\te.preventDefault(); \t\t\tvar option_id = "{$optionList->id}"; \t\t\tvar model_id = "{$this_widget->model->id}"; \t\t\tvar model_name = "{$model_name}"; \t\t\tvar url = '{$appUrl}/options/delimage'; \t\t\t\$.ajax( \t\t\t\turl, \t\t\t\t{ \t\t\t\t\ttype: 'POST', \t\t\t\t\tdataType: 'json', \t\t\t\t\tdata: {
/** * @return OptionsList[] */ public function getOptionsList() { $model_name = MyHelper::modelFromNamespace($this->model_name); $options = OptionsList::find()->where(['model' => $model_name, 'active' => 1])->orderBy('sort')->all(); return $options; }