Laravel - создание виджета Disqus

воскресенье, 13 января 2019 06:57:15, написал Admin

С помощью arrilot/laravel-widgets создадим свой виджет для комментариев Disqus

Вообще тем кто хочет супер быстро и просто развернуть Disqus ко всем страницам сайта - посмотрите здесь: https://github.com/yajra/laravel-disqus

Но у меня это расширение не получилось использовать. Мои комменты привязаны к идентификаторам. А в расширении идет привязка на абсолютный урл. Поэтому пришлось сделать свой виджет.

Ставим расширение https://github.com/arrilot/laravel-widgets

composer require arrilot/laravel-widgets

Выполняем

php artisan make:widget DisqusWidget

Код App\Widgets\DisqusWidget

<?php

namespace App\Widgets;

use Arrilot\Widgets\AbstractWidget;

class DisqusWidget extends AbstractWidget
{
    /**
     * The configuration array.
     *
     * @var array
     */
    protected $config = [
        'page_id' => ''
    ];

    /**
     * Treat this method as a controller action.
     * Return view() or other content to display.
     */
    public function run()
    {
        return view('widgets.disqus_widget', [
            'config' => $this->config,
        ]);
    }
}

Дальше займемся конфигом. Выполним

touch config/disqus.php

- для создания конфига под комментарии. Впишем туда shortname 

<?php
return [
    'shortname' => env('DISQUS_SHORTNAME', ''),
];

В .env добавим нашу переменную

DISQUS_SHORTNAME=your_short_name;

Займемся вью нашего виджета. Про сам Disqus подробнее здесь: https://help.disqus.com/installation/universal-embed-code

Мы же пишем в widgets.disqus_widget такой код:

<div id="disqus_thread"></div>
<script>
    /**
     *  RECOMMENDED CONFIGURATION VARIABLES: EDIT AND UNCOMMENT
     *  THE SECTION BELOW TO INSERT DYNAMIC VALUES FROM YOUR
     *  PLATFORM OR CMS.
     *
     *  LEARN WHY DEFINING THESE VARIABLES IS IMPORTANT:
     *  https://disqus.com/admin/universalcode/#configuration-variables
     */

    var disqus_config = function () {
        // Replace PAGE_URL with your page's canonical URL variable
        //  this.page.url = PAGE_URL;

        // Replace PAGE_IDENTIFIER with your page's unique identifier variable
        this.page.identifier = '{{ $config['page_id'] }}';
    };


    (function() {  // REQUIRED CONFIGURATION VARIABLE: EDIT THE SHORTNAME BELOW
        var d = document, s = d.createElement('script');

        // IMPORTANT: Replace EXAMPLE with your forum shortname!
        s.src = 'https://'+'{{ config('disqus.shortname') }}'+'.disqus.com/embed.js';

        s.setAttribute('data-timestamp', +new Date());
        (d.head || d.body).appendChild(s);
    })();
</script>
<noscript>
    Please enable JavaScript to view the
    <a href="https://disqus.com/?ref_noscript" rel="nofollow">
        comments powered by Disqus.
    </a>
</noscript>

Вызов виджета во вью:

        @widget('DisqusWidget', ['page_id' => route('blog.show', ['slug'=> $article->slug], false)]);

Laravel Disqus Laravel
  

Поделиться статьей с друзьями:

  

Комментарии к статье