findModel($id); if ($model->parent_id == null) { $others = Service::find() ->where([ 'parent_id' => $model->id ]) ->with( [ 'services.language.alias', 'language.alias', ] ) ->all(); if (empty($others)) { $others = Service::find() ->where( [ 'parent_id' => null, 'status' => true, ] ) ->with( [ 'services.language.alias', 'language.alias', ] ) ->all(); } } elseif ($model->level == 1) { $others = Service::find() ->where([ 'parent_id' => $model->parent_id ]) ->with( [ 'services.language.alias', 'language.alias', ] ) ->all(); } else { $others = Service::find() ->where( [ 'parent_id' => ( new Query() )->select('parent_id') ->from('service') ->where([ 'id' => $model->parent_id ]), ] ) ->with( [ 'services.language.alias', 'language.alias', ] ) ->all(); } # список цен для микроданных $prices = []; foreach ($model->prices as $kry => $price) { foreach ($price as $key2 => $val2) { if ($key2 == 'price') { $prices[] = $price[ $key2 ]; } } } $layoutMicrodata=(count($model->prices)>1)? [ 'context' => 'http://schema.org/', 'type' => 'Product', 'name'=> "'{$model->language->attributes['title']}'", 'offers' => [ '@type'=> 'AggregateOffer', 'lowPrice'=> "'".min($prices)."'", 'highPrice'=> "'".max($prices)."'", 'priceCurrency'=> 'UAH' ] ] :[ 'type'=>'Product', 'name'=> "'{$model->language->attributes['title']}'", 'offers'=> [ '@type'=> 'Offer', 'priceCurrency'=> 'UAH', ] ]; if (count($model->prices) <= 1 && isset($prices)) { if (!empty($prices)) $layoutMicrodata['offers']['Price'] = "'" . max($prices) . "'"; } $microdata=new MicrodataFabric(); $pageMicrodata=$microdata::createJsonFromProduct($layoutMicrodata)->toJson(); $model->body = str_replace('[[prices]]', $this->renderPartial('_prices', ['prices' => $model->prices]), $model->body); return $this->render('view', [ 'model' => $model, 'others'=> $others, 'microdata'=>$pageMicrodata ]); } public function findModel($id) { $model = Service::find() ->where( [ 'id' => $id, 'status' => true, ] ) ->with( [ 'language.alias', 'prices' => function (ActiveQuery $query) { $query->where([ 'status' => true ]) ->with('language') ->orderBy('sort'); }, 'comments' => function (ActiveQuery $query) { $query->where([ 'status' => true ]); }, 'questions' => function (ActiveQuery $query) { $query->where([ 'status' => true ]) ->with('doctor'); }, 'packages' => function (ActiveQuery $query) { $query->with( [ 'image', 'language.alias', ] ) ->where([ 'status' => true ]); }, ] ) ->one(); if (empty($model)) { throw new NotFoundHttpException('Model not found'); } return $model; } }