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', '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; } }