alt

Когда человеку тяжело,
это часто означает,
что он идёт к успеху.

alt


Вывод рекламы Adsense в середине статьи.

Категория: Скрипты php Просмотров: 776 Коментариев: 0 Дата: 2017-01-05 Добавил: admin

 Вывод рекламы Adsense  в середине статьи

Написав сайт на Фреймворке CodeIgniter, я захотел разместить рекламу GoogleAdsense. В целом если размещать рекламу в начале и в конце статьи то проблем не возникает, вставляем код рекламы перед и после вывода переменной, содержащей оформленный текст статьи, и вуаля: все четко, реклама появилась. Но у меня тогда возник вопрос, а если у меня статья достаточно большая, то почему бы не вставить блок с рекламой в середину статьи. Применив все известный стандартный подход поиска информации – «шуршания» по интернету, нечего особого не нашел для CodeIgniter. Ну раз так, тогда давай мудрить.

Первое с чего мы начнем - это получим массив с материалом (статьей). Как правило, запрос делается в контроллере.

PHP
$data['main_info_reclama'] = $this->materials_model->get($material_id); 

Затем передаем в созданную библиотеку массив с материалом.

PHP
$data['main_info'] = $this->reclama_lib->reclama($data['main_info_reclama']); 

Ну, и наконец, создадим нашу библиотеку reclama_lib которая и будет определять место, соответствующее середине нашей статьи, и вычислять место для размещения кода рекламы. Суть работы данной библиотеки заключается в следующем: любая статья состоит из параграфов, списков, таблиц ну и т.д. без разницы. Мы будем считать сначала параграфы (теги <P>), а затем будем искать закрывающейся тег таблицы и/или списка (или др.), чтобы НЕ «влепить» нашу рекламу, например, в таблицу.

Использовать будем следующие функции:

  • preg_match_all – Производит поиск по строке и не прерывает поиск после первого нахождения заданного элемента.
  • preg_match – Производит поиск по строке и прерывает поиск после первого нахождения заданного элемента, т.е. мы не найдем все вхождения, а лишь только первое.
  • substr_replace – Заменяет часть строки.
  • Round - Округляем значение.
PHP
class Reclama_lib
    {    
            protected $reclama_center = 'Здесь сгенерированный код Вашей рекламы';
                               
             protected $reclama_bottom = '<p style="text-align:center"> Здесь сгенерированный код Вашей рекламы </p>';
                                                      
           public function vstavka_v_kontse(&$array)
                {                
                    //Для вставки рекламы в конце
                   //в конец строки конкатенируем переменную с кодом рекламы                                     
                   $array['main_text'] = $array['main_text'].$this->reclama_bottom;
                  }
                
            public function reclama($reclama)
                {                     
                        $CI = &get_instance();
    
                    $data['main_info'] = $reclama;
                      // var_dump( $data['main_info']);  
                                     
                    //если массив пуст сразу выход из функции
                    if(empty($data['main_info']))
                        {
                            return $data['main_info'];
                        }
                        
                        $matches_p = array(); //хранит результат работы функции preg_match_all. Работает по маске   "/<p>/"                                 
                        $matches_ul = array(); //Работает по маске "/(<\/UL>)/i"
                        $matches_table = array();//Работает по маске "/<table>/"
                        $matches_p_bottom = array(); //теги P после середины
                        $offset_m = 0; //задает смещение ноль в стоке
                        $mean_tag = 0;//номер тега, который находится в середине (количество тегов делим на два)
                        $teg_num  = 6; //количество тегов, после которого ставить рекламу
                       
                        //$tags_count - получаем число тегов Р - открывающих
                        $tags_count = preg_match_all("/<p>/",$data['main_info']['main_text'],$matches_p,PREG_OFFSET_CAPTURE,0);
                        //echo $tags_count;
                        //var_dump($matches_p);
    
                        $mean_tag = round($tags_count/2);//номер тега, который находится в середине (количество тегов делим на два)
                        
                        //проверяем: пустая ли переменная
                        if (!empty($tags_count))
                            {
                            //Тегов меньше шести
                            if($tags_count <= $teg_num)
                                {
                                   //Для вставки рекламы в конце 
                                 $this->vstavka_v_kontse($data['main_info']);
                                                            
                                }
                                //тегов больше шести
                                else
                                    {
                                        //ищу закрытый тег </table>
                                        $tags_count_table = preg_match("/(<\/table>)/i",$data['main_info']['main_text'],$matches_table,PREG_OFFSET_CAPTURE,$matches_p[0][$mean_tag-1][1]);
                                        
                                        //если закрывающий тег не найден
                                        if(empty($tags_count_table))
                                            {
                                               //Вставка в середине материала не попавшая в таблицу
                                                $data['main_info']['main_text']= substr_replace($data['main_info']['main_text']," <br/>".$this->reclama_center." <p>",$matches_p[0][$mean_tag-1][1],3);
							//Вставка рекламы и в конце если деленное количество тегов /2 больше 6
                                                if($mean_tag > $teg_num)
                                                    {
                                                        //вставка в конец материала
                                                        $this->vstavka_v_kontse($data['main_info']);
                                                    }
                                            }
                                            //Закрывающий тег таблице найден
                                            else
                                                {
                                                    //считаем количество открывающих Р от позиции таблице
                                                    $tags_count_p_bottom = preg_match_all("/<p>/",$data['main_info']['main_text'],$matches_p_bottom,PREG_OFFSET_CAPTURE,$matches_table[0][1]);
                                                    
                                                    if(empty($tags_count_p_bottom))
                                                        {
                                                            $this->vstavka_v_kontse($data['main_info']);
                                                          
                                                        }
                                                        else
                                                            {
                                                                //тегов после таблицы меньше шести
                                                                if($tags_count_p_bottom < $teg_num)
                                                                    {
                                                                        //в конец строки вставляем рекламу
                                                                        $this->vstavka_v_kontse($data['main_info']);
                                                                        
                                                                      
                                                                    }
                                                                    //тегов после таблицы больше шести
                                                                    else
                                                                        {
                                                                           //Вставка рекламы в середине материала, не попавшая в таблицу
                                                                           $data['main_info']['main_text']= substr_replace($data['main_info']['main_text']," </table> <br/>".$this->reclama_center,$matches_table[0][1],8);
                                                                        
                                                                            $this->vstavka_v_kontse($data['main_info']);
                                                                            
                                                                        }
                                                             
                                                             
                                                             }
                                               
                                                }
                                    
                                    }
                        
                            
                            }
    
                            return $data['main_info'];
                             
            }
                        
    }

Функция vstavka_v_kontse (&$array) Отрабатывает только тогда, когда в строке найдено меньше 6 тегов “P”, таким образом, понимаем что статья маленькая и ставим рекламу только в конце. Значение тегов можно изменять в переменной $teg_num = 6; //номер тега после которого ставить рекламу.

Можно так же, к примеру, всю статью заключать в тег <ul> </ul> и после этого в функции vstavka_v_kontse (&$array) искать последний тег </ul>

PHP
//Поиск всех закрывающихся тегов /UL, используя регулярные выражения  "/(<\/UL>)/i".
$tags_count_ul = preg_match_all("/(<\/UL>)/i",$data['main_info']['main_text'],$matches_ul,PREG_OFFSET_CAPTURE,0);
//Заменяем часть строки, - подсовываем код с рекламой.
$data['main_info']['main_text']= substr_replace($data['main_info']['main_text']," </ul> <br/>".$ reclama_center,$matches_ul[1][$tags_count_ul-1][1],5);

В основную функцию можно добавить и новые условия для других тегов, в которые не должна попадать реклама. Но в целом для решения моей задачи этого было достаточно.

На этом все, если у кого то есть свои идеи предлагайте возможно она интересней.


Просмотреть демо: Демо

Скачать исходник: Скачать



Добавить комментарий:


Ваше имя

Текст комментария


Введите буквы с учетом регистра:





Апдейты

Популярное Свежие записи

Облако тегов