/** * Ищет рекламный блок по его номеру и возвращает код для втавки на страницу * * @return string */ public function run() { /** @var Advert $advert */ if (!$this->block_number) { return ''; } $advert = Advert::findOne(['block_number' => $this->block_number]); return $advert ? $advert->code : ''; }
/** * Creates data provider instance with search query applied * * @param array $params * * @return ActiveDataProvider */ public function search($params) { $query = Advert::find(); $dataProvider = new ActiveDataProvider(['query' => $query]); $this->load($params); if (!$this->validate()) { // uncomment the following line if you do not want to return any records when validation fails // $query->where('0=1'); return $dataProvider; } $query->andFilterWhere(['id' => $this->id, 'block_number' => $this->block_number, 'category' => $this->category, 'approve' => $this->approve, 'on_request' => $this->on_request]); $query->andFilterWhere(['like', 'title', $this->title])->andFilterWhere(['like', 'code', $this->code])->andFilterWhere(['like', 'location', $this->location])->andFilterWhere(['like', 'replacement_tag', $this->replacement_tag]); return $dataProvider; }
/** * Вставка рекламных материалов в текст статьи * * Рекламные материалы задаются в базе данных в таблице 'advert'. Они могут иметь 3 варианта расположения: * bottom (под текстом статьи), top (над текстом статьи) и inside (в середине текста статьи), а также выводиться * в любом месте статьи при помощи тэга подстановки, указываемого в виде произвольной строки (напр. [yandex]) или * конструкцией вида [advert-<block_number>] (где block_number - номер рекламного блока), если не указан строковый * тэг подстановки. * * @param $post * @return mixed */ protected function insertAdvert($post) { $adverts = Advert::find()->where(['approve' => 1])->asArray()->all(); if (is_null($adverts)) { return $post; } foreach ($adverts as $advert) { // Если реклама запрещена на уровне статьи, присваиваем рекламному коду пустую строку // чтобы тег рекламы, если он есть, не оставался на странице, а заменялся на пустую строку if ($post->allow_ad == 0) { $advert['code'] = ''; } if (!$advert['replacement_tag']) { $advert['replacement_tag'] = 'none'; } if ($advert['location'] != 'various') { if ($advert['replacement_tag'] != 'none' && strstr($post->full, "[{$advert['replacement_tag']}]")) { $post->full = str_replace("[{$advert['replacement_tag']}]", $advert['code'], $post->full); } else { if ($advert['replacement_tag'] == "none" && strstr($post->full, "[advert-{$advert['block_number']}]")) { $post->full = str_replace("[advert-{$advert['block_number']}]", $advert['code'], $post->full); } else { if ($advert['location'] == "inside") { if (!$advert['on_request']) { $dlina_full = strlen($post->full); $seredina_full = round($dlina_full / 2); $diapazon_start = $seredina_full - 100; $diapazon_finish = $seredina_full + 100; $perv_chast = substr($post->full, 0, $diapazon_start - 1); $sred_chast = substr($post->full, $diapazon_start, 201); $vtor_chast = substr($post->full, $diapazon_finish + 1); $pos_tochka = strpos($sred_chast, "."); $sred_1 = substr($sred_chast, 0, $pos_tochka); $sred_2 = substr($sred_chast, $pos_tochka + 1); $post->full = $perv_chast . $sred_1 . '.<br />' . $advert['code'] . '<br>' . $sred_2 . $vtor_chast; } } else { if ($advert['location'] == "top") { $post->full = $advert['code'] . "<br>" . $post->full; } else { if ($advert['location'] == "bottom") { $post->full = $post->full . "<br>" . $advert['code']; } } } } } } } //return $post; }
/** * Finds the Advert model based on its primary key value. * If the model is not found, a 404 HTTP exception will be thrown. * @param string $id * @return Advert the loaded model * @throws NotFoundHttpException if the model cannot be found */ protected function findModel($id) { if (($model = Advert::findOne($id)) !== null) { return $model; } else { throw new NotFoundHttpException('The requested page does not exist.'); } }