Вставка рекламы после n-го абзаца

Здравствуйте, подскажите как можно вставить рекламный блок в теле статьи, например после 2 или 3 абзаца от начала статьи?
MatrixID
27 августа 2015, 06:51
modx.pro
7
6 714
0

Комментарии: 20

Василий Наумкин
27 августа 2015, 09:55
+4
2 варианта:
1. Вставить прямо в теле статьи вызов чанка\сниппета вручную, если автор текста понимает, что делает и разрешены теги в контенте.
2. Написать простенький фильтр вывода, который будет вставлять вызов чего надо через n тегов p в тексте, и вызывать контент примерно так:
[[*content:advertising]]
    Максим Кузнецов
    27 августа 2015, 10:32
    +1
    Как вариант — при помощи jquery:
    — допустим, мы отмеряем абзацы исключительно тегами p. Тогда, обернув поле контента статьи в контейнер с id=«articleBody», дописываем скрипт:

    <script type="text/javascript">
    	$("#articleBody p:eq(3)").after('<div>Рекламный блок!</div>');
    	//вы можете менять порядковый номер абзаца, после которого нужно вставить рекламу при помощи аргумента eq(число). Отсчет в нем начинается с 0.
    </script>
      MatrixID
      27 августа 2015, 12:10
      0
      А если рекламный блок тоже javascript, как в таком случае быть?
      Блок адсенса хочу вывести таким образом.
        Максим Кузнецов
        27 августа 2015, 13:49
        +1
        Приложите код рекламного блока — помогу адаптировать.
        Если он также вставляется методами javascript'a — то проблем со вставкой в желаемое место не возникнет.
          MatrixID
          28 августа 2015, 16:33
          0
          код адсенса:
          <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
          <!-- adaptiv_article -->
          <ins class="adsbygoogle"
               style="display:block"
               data-ad-client="ca-pub-XXXXXXXXXXXXXXXX"
               data-ad-slot="XXXXXXXXXX"
               data-ad-format="auto"></ins>
          <script>
          (adsbygoogle = window.adsbygoogle || []).push({});
          </script>
            Максим Кузнецов
            28 августа 2015, 16:48
            +1
            <script type="text/javascript" src="https://code.jquery.com/jquery-latest.min.js"></script>
            <script type="text/javascript">
            	$(document).ready(function(){
            		$("#articleBody p:eq(3)").after('<ins class="adsbygoogle" style="display: block;" data-ad-client="ca-pub-XXXXXXXXXXXXXXXX" data-ad-slot="XXXXXXXXXX" data-ad-format="auto"></ins>');
            	});
            </script>
            <script src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
            <script>
            	$(document).ready(function(){
            		(adsbygoogle = window.adsbygoogle || []).push({});
            	});
            </script>
              alexandr
              11 декабря 2017, 12:09
              0
              Здравствуйте! А возможен ли такой вариант, но только для рекламного блока яндекс, а не гугл?
          Владимир Ульяновский
          28 августа 2015, 20:09
          -1
          Может просто вывести чанк с рекламным блоком? Не не выход?
          Ганин Роман
          27 августа 2015, 13:09
          +1
        Николай
        29 августа 2015, 16:54
        5
        +1
        Делал очень давно, сейчас бы сделал по другому, но что есть, то есть )

        Сниппет adsense
        <?php
        //спустя сколько символов искать перенос строки и вставлять рекламу?
        $nu = 3800;
        //Код рекламы
        $adsense = <<<HTML
        <div class="sense">
        <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
        
        <ins class="adsbygoogle"
             style="display:inline-block;width:728px;height:90px"
             data-ad-client="ca-pub-1233335915169539"
             data-ad-slot="2233378009"></ins>
        <script>
        (adsbygoogle = window.adsbygoogle || []).push({});
        </script></div>
        HTML;
        $a = preg_replace('@([^^]{'.$nu.'}.*?)(\r?\n\r?\n|</p>)@', "\\1$adsense\\2", trim($content), 1);
        return $a;
        Вызов (в шаблоне вместо [[*content]])
        [[adsense? &content=`[[*content]]`]]
          Борис И
          19 декабря 2015, 11:31
          0
          Спасибо, все работает.
            Борис И
            31 января 2016, 15:11
            0
            Здравствуйте. Подскажите, как вставить 2 рекламных блока после разного количества символов, например после 1 блок после 300 символов, 2 блок после 1000 символов
              brioni
              21 июля 2016, 13:06
              0
              Привет. Получилось вставить 2 рекламных блока?
                Борис И
                21 июля 2016, 19:55
                1
                +1
                Точно уже не помню, как то так, но будет некорректно считать после скольки символов всталять рекламу
                <?php
                //спустя сколько символов искать перенос строки и вставлять рекламу 1?
                $nu = 3800;
                //Код рекламы
                $adsense = <<<HTML
                <div class="sense">
                <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
                
                <ins class="adsbygoogle"
                     style="display:inline-block;width:728px;height:90px"
                     data-ad-client="ca-pub-1233335915169539"
                     data-ad-slot="2233378009"></ins>
                <script>
                (adsbygoogle = window.adsbygoogle || []).push({});
                </script></div>
                HTML;
                $a = preg_replace('@([^^]{'.$nu.'}.*?)(\r?\n\r?\n|</p>)@', "\\1$adsense\\2", trim($content), 1);
                
                //спустя сколько символов искать перенос строки и вставлять рекламу 2?
                $nu1 = 5400;
                //Код рекламы
                $adsense1 = <<<HTML
                <div class="sense">
                <script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
                
                <ins class="adsbygoogle"
                     style="display:inline-block;width:728px;height:90px"
                     data-ad-client="ca-pub-1233335915169539"
                     data-ad-slot="2233378009"></ins>
                <script>
                (adsbygoogle = window.adsbygoogle || []).push({});
                </script></div>
                HTML;
                $a1 = preg_replace('@([^^]{'.$nu1.'}.*?)(\r?\n\r?\n|</p>)@', "\\1$adsense1\\2", trim($a), 1);
                return $a1;
                  brioni
                  21 июля 2016, 20:04
                  0
                  Принцип понятен, спасибо!
                    brioni
                    13 апреля 2018, 14:45
                    0
                    Привет. Что исправить, чтобы вставка была после тега /p?
                    Сейчас рекламный блок вставляется перед закрывающим тегом /p, в результате чего в валидаторе HTML получаем ошибку и лишние теги, тк скрпит не оборачивается тегами p.
                brioni
                29 ноября 2016, 13:45
                0
                Привет. Куда здесь вставить
                </blockquote>
                , чтобы делал вставку блока после цитаты?
                Сейчас вставляет только после абзаца
                </p>
                .
                  Дмитрий
                  21 августа 2017, 12:28
                  0
                  Спасибо за метод, все работает. А как сделать что бы вставка была не после 3800 символов, а после скажем 3-го img А то у меня контента по разному может 1000 символов, а может и 5000 быть, а картинок всегда штук 10. Заранее спасибо!)
                  Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                  20