Developed with love by KnpLabs Hire us for your project!
82

KnpDisqusBundle

by KnpLabs

A Symfony bundle to fetch and render disqus comments via their API. Your SEO other-half will love it.

KnpDisqusBundle

If you use Disqus on your website for comments, you know that it's no good for SEO − as the comments are loaded dynamically via javascript.

This bundle will fetch the comments using Disqus API so that you can include them in your page… before replacing the comment div by the Disqus javascript widget.

This way you benefit from both the javascript widget and the robot friendly comments.

Build Status

knpbundles.com

Requirements

Installation

With composer, run:

php composer.phar require knplabs/knp-disqus-bundle:dev-master

Register the bundles in your AppKernel:

$bundles = array(
    //...
    new Knp\Bundle\DisqusBundle\KnpDisqusBundle(),
    //...
);

SSO authentication (optional)

If you want to manage authentication through Disqus SSO mechanism, you have to add the application secret key in the configuration and pass user information (id, username, email) which will compose the HMAC payload from it, as well as specific login/logout service information to the helper. Make sure to setup your Disqus forum to use SSO and allow for local domains (for development purposes). More details hereunder.

Configuration

config.yml

knp_disqus:
    api_key: %knp_disqus.api_key%
    secret_key: %knp_disqus.secret_key% # optional, for SSO auth only
    forums:
        lorem:
            shortname: %knp_disqus.lorem.shortname%
            cache: my_cache_for_lorem # cache template key, usage described below
        ipsum:
            shortname: %knp_disqus.ipsum.shortname%

my_cache_for_lorem:
    # If you setup up an cache, you should also configure cache provider, which will be used automatically
    # ...

parameters.yml

knp_disqus.api_key:    YOUR_PUBLIC_API_KEY
knp_disqus.secret_key: YOUR_SECRET_API_KEY # optional, for SSO auth only
# Insert your disqus shortname
# it's the unique identifier for your website as registered on Disqus
knp_disqus.lorem.shortname: "dolor-sid"
# you can also register more than one forum
knp_disqus.ipsum.shortname: "amet"

Usage:

In your Twig template:

{{ knp_disqus_render('dolor-sid', {'identifier': '/december-2010/the-best-day-of-my-life/', 'limit': 10}) }}

You can also show comments for specific language:

{{ knp_disqus_render('amet', {'identifier': '/december-2010/the-best-day-of-my-life/', 'language': 'de_formal'}) }}

To use SSO auth, pass sso.user information in the parameters to tell Disqus which user is logged in. Pass a user with an empty id to force Disqus to logout user, respectively to tell Disqus no user is logged in through SSO. Add information regarding your SSO Authentication service (login/logout urls, icon, etc.) in the sso.service parameter. See Disqus SSO documentation for more information.

{{ knp_disqus_render(
    'dolor-sid',
    {
        'identifier': '/december-2010/the-best-day-of-my-life/',
        'limit': 100,
        'sso': {
            'user': {
                'id' : 'test',
                'username' : 'John Doe',
                'email': 'john.doe@example.com',
            },
            'service': {
                'name': 'MyAuthServiceProvider',
                'icon': 'http://example.com/favicon.png',
                'button': 'http://example.com/images/samplenews.gif',
                'url': 'http://example.com/login/',
                'logout': 'http://example.com/logout/',
                'width': '400',
                'height': '400'
            }
        }
    },
    'KnpDisqusBundle::list.html.twig' )
}}

Or in Controller:

public function myPageAction()
{
    // ...

    $comments = $this->get('knp_disqus.request')->fetch('dolor-sid', array(
        'identifier' => '/december-2010/the-best-day-of-my-life/',
        'limit'      => 10, // Default limit is set to max. value for Disqus (100 entries)
    //    'language'   => 'de_formal', // You can fetch comments only for specific language
    ));

    return $this->render('LoremIpsumBundle:Lorem:myPage.html.twig', array(
        'comments' => $comments,
    ));
}

Adding a Callback for New Comments

If you want a JavaScript function to be called when a new comment is added
(e.g. to trigger some Analytics), first, create a global JavaScript function
somewhere (i.e. one that is attached to the windows object):

window.onNewComment = function(comment) {
    console.log(comment);
}

Next, pass the function name when rendering:

{{ knp_disqus_render('dolor-sid', {
    'identifier': '/december-2010/the-best-day-of-my-life/',
    'limit': 10,
    'newCommentCallbackFunctionName': 'onNewComment'
}) }}

Enjoy!

Copyright (c) 2011-2012 KnpLabs, http://KnpLabs.com

The MIT license

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is furnished
to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
THE SOFTWARE.
knp_disqus:
api_key: ~ # Required
secret_key:
base_url:
debug: ~
forums:

# Prototype
shortname:
shortname: ~
cache: ~
  • Merge pull request #49 from BorisCharriere/issue#48.supportSymfony4
    By web-flow, 2 years ago
  • add php 7.2 in travis build and support php>= 5.5 in comoser json and symfony version >=2.8
    By bcharriere, 2 years ago
  • update travis build for php >= 5.5 and symfony >= 2.8
    By bcharriere, 2 years ago
  • fix travis build for php7.1
    By bcharriere, 2 years ago
  • support for symfony 4
    By bcharriere, 2 years ago
  • Merge pull request #44 from sauls/master
    By web-flow, 3 years ago
  • - proper registration of knp_disqus_render twig function for twig 1 and 2
    By sauls, 3 years ago
  • - phpunit 4.8 version
    By sauls, 3 years ago
  • - phpunit 4.8 version
    By sauls, 3 years ago
  • - phpunit 4.8 version
    By sauls, 3 years ago
  • - phpunit support for multiple versions on require-dev
    By sauls, 3 years ago
  • - Twig 2 support
    By sauls, 3 years ago
  • - Added phpunit 4.8 as required dev dependency
    By sauls, 3 years ago
  • - Fix for twig extension using twig 2.x version
    By sauls, 3 years ago
  • Merge pull request #42 from KnpLabs/3.0-sf-tweaks
    By web-flow, 4 years ago
  • tweaking to only allow 2.3 and higher, remove framework-bundle duplication
    By weaverryan, 4 years ago
  • Merge pull request #41 from esmiz/master
    By web-flow, 4 years ago
  • duplicated sf framework bundle
    By esmiz, 4 years ago
  • require routing
    By esmiz, 4 years ago
  • added routing
    By esmiz, 4 years ago
  • + phpunitbridge
    By esmiz, 4 years ago
  • just pimple
    By esmiz, 4 years ago
  • updated require-dev
    By esmiz, 4 years ago
  • prefer lowest
    By esmiz, 4 years ago
  • phpunit bridge
    By esmiz, 4 years ago
  • added prefer stable
    By esmiz, 4 years ago
  • travis conf modification
    By esmiz, 4 years ago
  • new version of .travis.yml
    By esmiz, 4 years ago
  • Symfony 3 compatibility
    By esmiz, 4 years ago
  • Updating the error slightly
    By weaverryan, 5 years ago