Как разместить скрипт в динамическом абзаце - PullRequest
0 голосов
/ 23 октября 2018

У меня есть google adsense скрипт, который я могу разместить в разных позициях на моей странице.

У меня также есть тело текст, где описание каждого post есть, и я хочу знать, как я могу добавить сценарий AdSense динамически в основной текст моих сообщений?( Google предложил разместить его после второго абзаца ).

Я использую laravel, и так я получаю часть своего тела от каждого сообщения

{!! $post->body !!}

Пример кода Google AdSense:

<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
<ins class="adsbygoogle"
  style="display:block"
  data-ad-client="ca-pub-6565454545454774"
  data-ad-slot="548855465655"
  data-ad-format="auto"
  data-full-width-responsive="true"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script>

Есть идеи?

Обновление

single post function

//single post
public function single($slug)
{
        $post = Post::where('slug', $slug)->where('publish', '=', 'y')->firstOrFail();

        $post->addPageView();

        $previous = Post::where('slug', '<', $post->slug)->max('slug');

        $next = Post::where('slug', '>', $post->slug)->min('slug');

        $products = Product::all()->where('status', 'enable')->random(3);

        $categories = PostCategory::all();

        $settings = Setting::all();

        $author = AuthorInfo::where('user_id', $post->user->id)->first();

        return view('front.singlepost', compact('post', 'previous', 'next', 'products','categories', 'settings','author'));
}

1 Ответ

0 голосов
/ 23 октября 2018

У меня не было возможности проверить это, однако вы можете создать accessor (в данном случае getBodyWithAdsenseAttribute), который будет создавать измененную версию содержимого тела и включать содержимое AdSense после * 1003.* 2-й абзац:

В вашем файле Post модели:

public function getBodyWithAdsenseAttribute()
{
    $javascript = '<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>
    <ins class="adsbygoogle"
      style="display:block"
      data-ad-client="ca-pub-6565454545454774"
      data-ad-slot="548855465655"
      data-ad-format="auto"
      data-full-width-responsive="true"></ins>
    <script>
    (adsbygoogle = window.adsbygoogle || []).push({});
    </script>';

    $paragraphs  = explode('</p>', $this->body); // Explode current body field
    $new_content = ''; // Variable for new content
    $count       = 1; // Set count for adding new content

    foreach ($paragraphs as $paragraph) {
        $new_content .= $paragraph;

        if ($count == 2) {
            $new_content .= $javascript;
        }

        $count++;
    }

    return $new_content;
}

Здесь мы храним все данные AdSense в переменной $javascript.

Затем мы explode() содержимое body закрываем тегом </p>, создавая массив из содержимого.

Используя foreach(), мы воссоздаем содержимое bodyподсчитывает, находится ли он после 2nd экземпляра тега </p>.Если это так, мы добавляем контент $javascript к новому контенту.

Наконец, мы возвращаем весь контент.Это можно использовать в блейде, как показано ниже:

{!! $post->bodyWithAdsense !!}

Примечание : потребуется дополнительный код для отката в случае, если есть только один абзац, или если вообще нет содержимого тела.

...