Instalar Disqus para comentarios utilizando KnpDisqusBundle

Instalar Disqus en Symfony2 para crear y organizar debates con los comentarios de las páginas de una aplicación

Disqus es un aplicación que permite crear discusiones con los comentarios que los visitantes dejan en las páginas o entradas de un sitio web. Para ello es necesario instalar un código JavaScript, aunque en este artículo explico cómo instalar KnpDisqusBundle, que permite que los comentarios aparezcan en tu web/blog en forma de texto. Esto es importante ya que con una instalación normal de Disqus, los comentarios no pueden ser leídos por los robots de los buscadores y es mejor que puedan leerse para un mejor posicionamiento en buscadores.

Lo primero que hay que hacer es registrar una aplicación en Disqus. Es necesario que en settings añadas tu dominio en el apartado Domains. Una vez la hayas creado, Disqus te proporciona una Public Key, que después añadiremos en nuestra configuración de KnpDisqusBundle.

El primer paso es instalar el bundle a través de composer:

composer require knplabs/knp-disqus-bundle:dev-master

Registramos el bundle en el AppKernel:

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

En el archivo config.yml, añadimos lo siguiente:

knp_disqus:
    api_key: %knp_disqus.api_key%
    secret_key: %knp_disqus.secret_key% # opcional, para identificación SSO
    forums:
        lorem:
            shortname: %knp_disqus.lorem.shortname%

Desde la documentación oficial de KnpDisqusBundle tienes alguna opción más, pero en este artículo sólo explico la instalación sencilla. Entre otras opciones está la autentificación SSO.

En el archivo parameters.yml:

knp_disqus.api_key:    YOUR_PUBLIC_API_KEY
knp_disqus.secret_key: YOUR_SECRET_API_KEY # opcional, para autentificación SSO
# Identificador único de usuario en Disqus:
knp_disqus.lorem.shortname: "usuario"

Yo tuve algún que otro problema al utilizar diferentes archivos de parámetros para diferentes entornos de trabajo (dev y prod). Aunque indicara estos datos en ambos archivos, a la hora de limpiar la caché, sólo identificaba los parámetros desde el archivo del entorno de desarrollo, por lo que al limpiar la caché en producción (php app/console cache:clear --env=prod) daba un error de que faltaban parámetros por determinar. La opción más sencilla fue nombrar directamente en config.yml los datos de mi api_key, secret_key y shortname, sin hacer referencia a los datos del archivo parameters.

En tu plantilla de Twig añade:

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

En el identificador, que por defecto ponen "/december-2010/the-best-day-of-my-life/", puedes poner el slug de la página donde se creará la discusión. Además de esto, si tienes los parámetros tanto en prod como en dev, para que las discusiones no se inicien desde el localhost (ya que se van añadiendo en tu panel de administración de Disqus todas las URL incluidas las del localhost) puedes añadir if app.environment == 'prod' en la plantilla:

{% if app.environment == 'prod' %}
{{ knp_disqus_render('diegotham', {'identifier': posts.slug, 'limit': 10}) }}
{% endif %}

Así sólo se activarán las discusiones en el entorno de producción.

Puedes cambiar el idioma de los comentarios, moderar comentarios y discusiones y algunas personalizaciones más en el panel de administración de Disqus, al que podrás acceder cuando haces login en Disqus.com.