Exemple #1
0
 /**
  * Ищет рекламный блок по его номеру и возвращает код для втавки на страницу
  *
  * @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 : '';
 }
Exemple #2
0
 /**
  * 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;
 }
Exemple #3
0
 /**
  * Вставка рекламных материалов в текст статьи
  *
  * Рекламные материалы задаются в базе данных в таблице '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;
 }
Exemple #4
0
 /**
  * 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.');
     }
 }