tenemos un sitio web donde tenemos lista una gran cantidad de eventos, y quisiera agregar que los debates de cada uno de los eventos.

Así que quería usar disqus, y comprobado. Resulta que el uso de variables globales para configurar la instancia.

como;

var disqus_shortname = '';

var disqus_identifier = '';

var disqus_url = '';

Esto plantea un problema para nosotros, cuando no se desea utilizar el mismo identificador, sino más bien un lugar único por disqus instancia. traté de hacer a cada instanciación + configuración en iframes, pero que realmente jodido de ie8. hay una manera mejor de hacerlo?

Por lo que, en suma; varias instancias de disqus en una página. cómo?
ha alguien se hace?

Gracias

8 Comentarios

  1. 21

    Nos hemos enfrentado a un problema similar y enviado por correo electrónico Disqus acerca de esto. Se confirmó que, por defecto, que sólo admite una Disqus módulo por página.

    Cuando se navega por Disqus JS documentación, encontré una solución que podría funcionar para usted por carga y descarga de la Disqus módulos a medida que el usuario interactúa con el sitio:

    DISQUS.reset({
      reload: true,
      config: function () {  
        this.page.identifier = "newidentifier";  
        this.page.url = "http://example.com/#!newthread";
      }
    });

    http://docs.disqus.com/help/85/

    La exacta aplicación dependería de su sitio, pero esto debe darle un bloque de construcción para empezar. Por ejemplo, si el evento que la información esté disponible mediante la ampliación de un área de contenido, usted puede cargar el Disqus módulo cada vez que alguien se amplía el contenido del evento.

    • Se esta trabajando todavía? Ellos han cambiado mucho en el año 2012
    • No lo he utilizado personalmente últimamente, pero notaron que la gente todavía votación esta respuesta como de tarde. Así que yo supongo que es todavía trabajando para algunos?
    • «[…] No es posible hacer en una manera limpia utilizando la versión de 2012 […] se echa de menos la DISQUS.método reset () [ … ]. Usted debe cambiar a la versión anterior para utilizar el método reset () [ … ] » – mystrd.a/artículos/varios-disqus-hilos-en-uno-página
  2. 17

    Escribí un artículo acerca de esto, lo encontrará aquí. http://mystrd.at/articles/multiple-disqus-threads-on-one-page/

    En esencia, si estás bien con la visualización de un único módulo en un momento y mediante una especie de «mostrar comentarios» de control, usted puede hacerlo de la siguiente manera (usando WordPress y jQuery como un ejemplo, pero se puede ajustar el contenido de los identificadores basados en sus necesidades). En un post de bucle, insertar un control adicional para cada uno de ellos:

    <a onclick="loadDisqus(jQuery(this), '<?= $id ?> <?= $post->guid ?>', '<? the_permalink() ?>');">
       Show comments
    </a>

    Después usted necesita una función genérica que se va a utilizar esos parámetros post y volver a cargar Disqus en la demanda. Cuenta que la versión de 2012 de Disqus no tiene el método reset (), sin embargo, y por lo tanto esto no va a funcionar con ella.

    //global vars used by disqus
    var disqus_shortname = 'yoursiteshortnameindisqus';
    var disqus_identifier; //made of post id &nbsp; guid
    var disqus_url; //post permalink
    
    function loadDisqus(source, identifier, url) {
        if (window.DISQUS) {
            jQuery('#disqus_thread').appendTo(source.parent()); //append the HTML to the control parent
    
            //if Disqus exists, call it's reset method with new parameters
            DISQUS.reset({
                reload: true,
                config: function() {
                    this.page.identifier = identifier;
                    this.page.url = url;
                }
            });
        } else {
            //insert a wrapper in HTML after the relevant "show comments" link
            jQuery('<div id="disqus_thread"></div>').insertAfter(source);
            disqus_identifier = identifier; //set the identifier argument
            disqus_url = url; //set the permalink argument
    
            //append the Disqus embed script to HTML
            var dsq = document.createElement('script');
            dsq.type = 'text/javascript';
            dsq.async = true;
            dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
            jQuery('head').appendChild(dsq);
        }
    };

    Aparte de esto, creo que habría que recurrir al uso de iframes. Una solución de este tipo con Ruby como un ejemplo se describe aquí – http://blog.devinterface.com/2012/01/how-to-insert-more-disqus-box-in-single-page/

    • Aunque esto, en teoría, puede responder a la pregunta, sería preferible para incluir las partes esenciales de la respuesta aquí, y proporcionar el enlace de referencia.
    • Bueno, voy a tratar de ampliar la respuesta.
    • Gracias @mystrdat, inspirado por tu respuesta, he creado inlineDisqussions. Espero que ayudaría a nadie.
    • Hey, buen trabajo!
    • También inspirado por tu respuesta, hice un pequeño ejemplo de cómo he puesto en práctica. github.com/timothyshaw/jquery-disqus
  3. 1

    Que necesitaba usar Disqus de una aplicación GWT, por lo que necesitaba para resolver el problema de la carga de los hilos en la demanda como virtual las páginas de la aplicación se han cambiado.

    Una pequeña cantidad de la ingeniería inversa y la experimentación me llevó a construir una clase de utilidad (abajo).

    Las ideas principales son:

    1. Hay un indocumentados global parámetro llamado disqus_container_id
      lo que le permite poner los comentarios en donde quieras. Si eso no funciona en algunos
      versión futura, mi reserva de que iba a ser para establecer temporalmente el id de destino
      elemento disqus_thread, agregar los comentarios y, a continuación, cambiar a la identificación original.
    2. Ya que este estaba siendo desarrollado para GWT utilizando JSNI, necesitaba establecer el mundial
      los parámetros en la ventana original del contexto, accesible a través de $wnd. He cambiado
      el valor predeterminado de Disqus código de inserción en consecuencia. No me había dado cuenta antes de que todos los mundiales
      variables en la Ventana de objetos, pero he aprendido algo nuevo.
    3. Puede volver a utilizar el mismo recipiente, Disqus parece claro el contenido cuando
      activarlo.
    4. Esto deja un montón de copias de la etiqueta de script en el DOM. Tal vez sería una buena
      idea para limpiar estas demasiado, una vez que han sido utilizados. Alternativamente, podría hacer algunos
      más experimentos con la DISQUS.reset método descrito en otras respuestas.

    Extraer sólo la información crucial para alguien usando JS en su propio, esto debería permitir que usted mantenga un Disqus hilo en cualquier lugar que te gusta:

    function loadComments(container_id, shortname, identifier, developer) {
        //CONFIGURATION VARIABLES
        window.disqus_container_id = container_id;
        window.disqus_developer = developer ? 1 : 0;
        window.disqus_shortname = shortname; //required
        if (identifier) window.disqus_identifier = identifier;
    
        //DON'T EDIT BELOW THIS LINE
        (function() {
           var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
           dsq.src = 'http://' + shortname + '.disqus.com/embed.js';
           (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
        })();
    }

    Y aquí está el completo GWT clase de utilidad. Sólo he aplicado los parámetros que he necesitado hasta ahora.

    import com.google.gwt.user.client.Element;
    import com.google.gwt.user.client.Random;
    import com.google.gwt.user.client.ui.Widget;
    
    public class Disqus {
    
        public static boolean developer = false;
        public static String shortname;
    
        public static void showComments(Widget where, String identifier) {
            showComments(where.getElement(), identifier);
        }
    
        public static void showComments(Element where, String identifier) {
            if (shortname == null)
                throw new IllegalArgumentException(
                          "You must specify the disqus shortname before displaying comments");
    
            //Store the original id of the target element
            String id = where.getId();
            if (id == null) {
                id = "disqus-" + Integer.toHexString(Random.nextInt());
                where.setId(id);
            }
    
            //Update the id temporarily
            where.setId("disqus_thread");
    
            //Load the comments
            loadComments(id, shortname, identifier, developer);
        }
    
        private static native void loadComments(String container_id, String shortname, String identifier, boolean developer) /*-{
            //CONFIGURATION VARIABLES
            $wnd.disqus_container_id = container_id;
            $wnd.disqus_developer = developer ? 1 : 0;
            $wnd.disqus_shortname = shortname; //required
            if (identifier) $wnd.disqus_identifier = identifier;
    
            //TODO
            //disqus_url
    
            //disqus_title
    
            //disqus_category_id
    
            //DON'T EDIT BELOW THIS LINE (sorry, I've edited it anyway)
            (function() {
                var dsq = $doc.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
                dsq.src = 'http://' + shortname + '.disqus.com/embed.js';
                ($doc.getElementsByTagName('head')[0] || $doc.getElementsByTagName('body')[0]).appendChild(dsq);
            })();
        }-*/;
    }
    • Hay alguna forma podemos cargar el formulario, junto con los comentarios?
    • Al menos para mí, el formulario de comentarios está incrustado junto con los comentarios – el código de arriba es el mismo que el original Disqus código de inserción, pero se invoca varias veces para cargar diferentes conjuntos de comentarios.
  4. 1

    Tente isso:

    <div class="showDisqus" data-title="MyTitle" data-id="1" data-url="mysite.com/mypost">Show Comments</div>
    
    $('.showDisqus').on('click', function(){   //click event of the show comments button
        var this_ = $(this);
            disqus_shortname = 'your_shortname',
            title = $(this).attr('data-title'),
            identifier = parseFloat($(this).attr('data-id')),
            url = $(this).attr('data-url');
    
        if (window.DISQUS) {
    
            DISQUS.reset({ //Remove the old call
              reload: false,
              config: function () {
              this.page.identifier = window.old_identifier;
              this.page.url = window.old_url;
              this.page.title = window.old_title;
              }
            });
            $('.showDisqus').show();
            $('#disqus_thread').remove();
    
            $('<div id="disqus_thread"></div>').insertAfter(this_);
    
            setTimeout( function() { //Creates a new call DISQUS, with the new ID
                DISQUS.reset({
                  reload: true,
                  config: function () {
                  this.page.identifier = identifier;
                  this.page.url = url;
                  this.page.title = title;
                  }
                });
                window.old_identifier = identifier;
                window.old_url = url;
                window.old_title = title;
            });
    
        } else {
    
            var disqus_identifier = parseFloat(identifier),
                disqus_title = title,
                disqus_url = url;
    
            $('<div id="disqus_thread"></div>').insertAfter(this_);
    
            (function() {
                var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
                dsq.src = '//' + disqus_shortname + '.disqus.com/embed.js';
                (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
            })();
    
            setTimeout( function() { //Sorry, there must be a better way to force the ID called correctly
                DISQUS.reset({
                  reload: true,
                  config: function () {
                  this.page.identifier = identifier;
                  this.page.url = url;
                  this.page.title = title;
                  }
                });
            },500);
    
            window.old_identifier = identifier;
            window.old_url = url;
            window.old_title = title;
    
        }
        $(this).fadeOut();  //remove the show comments button
    });
    • Por favor, utilice el inglés cuando se contesta a una pregunta.
    • Gracias @Pedro Soares. Funciona para m.
  5. 1

    Me itera a través de las soluciones anteriores, y ninguno funcionó fuera de la caja. La comprobación a través de la fuente, me empedradas de este, el cual trabaja. No está lejos, pero hace toda la diferencia parece.

    <script type="text/javascript">
    var disqus_shortname  = 'superchocolate',
        disqus_identifier = 'default',
        disqus_title      = 'I Heart Chocoloate',
        disqus_config     = function(){
            this.language = 'en';
        };
    
    
    (function() {
        var dsq = document.createElement('script'); dsq.type = 'text/javascript'; dsq.async = true;
        dsq.src = 'http://' + disqus_shortname + '.disqus.com/embed.js';
        (document.getElementsByTagName('head')[0] || document.getElementsByTagName('body')[0]).appendChild(dsq);
    })();
    
    
    
    function loadDisqus( identifier, url, title )
    {
        DISQUS.reset({
            reload: true,
            config: function ()
            {
                this.page.identifier = identifier;
                this.page.url        = url;
                this.page.title      = title;
                this.language        = 'en';
            }
        });
    }
    </script>

    En el marcado, poner la norma:

    <div id="disqus_thread"></div>

    Y, a continuación, en su haga clic en acciones, es bastante sencillo. Yo tenía un miembro llamado ‘datos’ que me estaba volviendo de una llamada AJAX.

    loadDisqus( 'ugc-' + data.id,  location.protocol+'//'+location.hostname + "/ugc-submission-" + data.id + "/", data.title );

    Esto funcionó para mí, la solución de un problema en el código anterior que había comentarios similares que se transmite entre varios subprocesos.

    Estoy mostrando mi Disqus hilo en un modal de Bootstrap, que yo llamo loadDisqus antes de la llamada a $(el).moda («show») y es perfecta.

    • Hay alguna forma podemos cargar el formulario, junto con los comentarios?
  6. 0

    Sé que esta pregunta es muy viejo, pero como me he encontrado con el mismo problema que he encontrado una solución que funcionó bastante bien para mí.

    Actualmente tengo una página – vamos a llamarlo Álbum – que enumera una serie de imágenes pertenecientes a ese álbum.

    Clic sobre una imagen se abrirá un cuadro con la imagen actual y un especial de la barra lateral que se obtiene a través de ajax actual de la información de la imagen, tales como título, fecha, autor, comentarios, etc.. (Muy similar a facebook visor de imágenes/sidebar comentarios)

    Quería que los usuarios puedan comentar sobre el principal de la página del álbum, sino también en la imagen específica que se están viendo en el interior de la caja de luz de la barra lateral.

    Gracias a algunas funciones de devolución de llamada que pertenecen a la caja de luz, uno se ejecute siempre lightbox fue abierto, el cual he usado para cambiar el nombre de temporarly el div ‘disqus_thread’ en la principal página de álbum para algo más.

    Otro de devolución de llamada se ejecuta cada vez que usted cambia las imágenes en el interior de la caja de luz – lo que me permitió volver a cargar la barra lateral de información sobre la imagen en la que he incluido un nuevo disqus_thread div y un javascript forzando un disqus_reset.

    Y el otro de devolución de llamada que se ejecuta cuando el álbum se cierra, que me permite cambiar el nombre del álbum comentario div volver a disqus_thread y forzar a otro reset.

    Entonces, para resumir, la página principal contiene los comentarios para el álbum, cuando haga clic en una imagen que me cambie el nombre original div a algo más. A continuación, algunos de la información que se recopila a través de AJAX, que contiene un nuevo disqus_thread div. Puedo usar DISQUS.restablecer y los comentarios de carga en la caja de luz. Cuando cierro la caja de luz me cambie el nombre original div volver a disqus_thread y forzar a otro reset.

    Espero que ayude a alguien!

  7. -3

    Usted podría cargar cada instancia en la a través de un iframe. Usted podría tener en la página barras de desplazamiento, aunque… puaj.

    • Si lees el post, se puede ver que esto es algo que ya han probado.
    • De todos modos, terminamos simplemente poner en páginas separadas. Como se puede ver en http://www.java.no

Dejar respuesta

Please enter your comment!
Please enter your name here