Resulta que hoy, a la hora de responder un comentario en la entrada anterior, me he dado cuenta de que no iba el botón responder. Justamente ayer había leído un comentario en Oloblogger, y ya me temía lo peor.

Me fijé, echando un ojo a la consola de Firebug, en que el problema es la variable “baseUri” del javascript de los nuevos comentarios. Sin embargo, en un blog de pruebas funcionaban perfectamente. Husmeando con la plantilla, me di cuenta de que el código tenía una estructura diferente. Usaba otro tipo de datos para hallar la variable.

He probado poniendo esa función en este blog y funciona perfectamente, por ahora. Para arreglarlo tenéis que buscar con artilugios expandidos <b:includable id='threaded_comment_js' var='post'>. Debajo debería haber dos scripts: Uno es <script async='async' expr:src='data:post.commentSrc' type='text/javascript'/>, y otro es un script normal, <script type='text/javascript'>**CONTENIDO**</script>.

Pues bien, lo que nos interesa es ese contenido. Dejadlo vacío y en su lugar cambiadlo por:

Mostrar/ocultar código
(Doble click para copiar)


(function() {
var items = <data:post.commentJso/>;
var msgs = <data:post.commentMsgs/>;
var config = <data:post.commentConfig/>;

// <![CDATA[
var cursor = null;
if (items && items.length > 0) {
cursor = parseInt(items[items.length - 1].timestamp) + 1;
}

var bodyFromEntry = function(entry) {
if (entry.gd$extendedProperty) {
for (var k in entry.gd$extendedProperty) {
if (entry.gd$extendedProperty[k].name == 'blogger.contentRemoved') {
return '<span class="deleted-comment">' + entry.content.$t + '</span>';
}
}
}
return entry.content.$t;
}

var parse = function(data) {
cursor = null;
var comments = [];
if (data && data.feed && data.feed.entry) {
for (var i = 0, entry; entry = data.feed.entry[i]; i++) {
var comment = {};
// comment ID, parsed out of the original id format
var id = /blog-(\d+).post-(\d+)/.exec(entry.id.$t);
comment.id = id ? id[2] : null;
comment.body = bodyFromEntry(entry);
comment.timestamp = Date.parse(entry.published.$t) + '';
if (entry.author && entry.author.constructor === Array) {
var auth = entry.author[0];
if (auth) {
comment.author = {
name: (auth.name ? auth.name.$t : undefined),
profileUrl: (auth.uri ? auth.uri.$t : undefined),
avatarUrl: (auth.gd$image ? auth.gd$image.src : undefined)
};
}
}
if (entry.link) {
if (entry.link[2]) {
comment.link = comment.permalink = entry.link[2].href;
}
if (entry.link[3]) {
var pid = /.*comments\/default\/(\d+)\?.*/.exec(entry.link[3].href);
if (pid && pid[1]) {
comment.parentId = pid[1];
}
}
}
comment.deleteclass = 'item-control blog-admin';
if (entry.gd$extendedProperty) {
for (var k in entry.gd$extendedProperty) {
if (entry.gd$extendedProperty[k].name == 'blogger.itemClass') {
comment.deleteclass += ' ' + entry.gd$extendedProperty[k].value;
}
}
}
comments.push(comment);
}
}
return comments;
};

var paginator = function(callback) {
if (hasMore()) {
var url = config.feed + '?alt=json&v=2&orderby=published&reverse=false&max-results=50';
if (cursor) {
url += '&published-min=' + new Date(cursor).toISOString();
}
window.bloggercomments = function(data) {
var parsed = parse(data);
cursor = parsed.length < 50 ? null
: parseInt(parsed[parsed.length - 1].timestamp) + 1
callback(parsed);
window.bloggercomments = null;
}
url += '&callback=bloggercomments';
var script = document.createElement('script');
script.type = 'text/javascript';
script.src = url;
document.getElementsByTagName('head')[0].appendChild(script);
}
};
var hasMore = function() {
return !!cursor;
};
var getMeta = function(key, comment) {
if ('iswriter' == key) {
var matches = !!comment.author
&& comment.author.name == config.authorName
&& comment.author.profileUrl == config.authorUrl;
return matches ? 'true' : '';
} else if ('deletelink' == key) {
return config.baseUri + '/delete-comment.g?blogID='
+ config.blogId + '&postID=' + comment.id;
} else if ('deleteclass' == key) {
return comment.deleteclass;
}
return '';
};

var replybox = null;
var replyUrlParts = null;
var replyParent = undefined;

var onReply = function(commentId, domId) {
if (replybox == null) {
// lazily cache replybox, and adjust to suit this style:
replybox = document.getElementById('comment-editor');
if (replybox != null) {
replybox.height = '250px';
replybox.style.display = 'block';
replyUrlParts = replybox.src.split('#');
}
}
if (replybox && (commentId !== replyParent)) {
document.getElementById(domId).insertBefore(replybox, null);
replybox.src = replyUrlParts[0]
+ (commentId ? '&parentID=' + commentId : '')
+ '#' + replyUrlParts[1];
replyParent = commentId;
}
};

var hash = (window.location.hash || '#').substring(1);
var startThread, targetComment;
if (/^comment-form_/.test(hash)) {
startThread = hash.substring('comment-form_'.length);
} else if (/^c[0-9]+$/.test(hash)) {
targetComment = hash.substring(1);
}

// Configure commenting API:
var configJso = {
'maxDepth': config.maxThreadDepth
};
var provider = {
'id': config.postId,
'data': items,
'loadNext': paginator,
'hasMore': hasMore,
'getMeta': getMeta,
'onReply': onReply,
'rendered': true,
'initComment': targetComment,
'initReplyThread': startThread,
'config': configJso,
'messages': msgs
};

var render = function() {
if (window.goog && window.goog.comments) {
var holder = document.getElementById('comment-holder');
window.goog.comments.render(holder, provider);
}
};

// render now, or queue to render when library loads:
if (window.goog && window.goog.comments) {
render();
} else {
window.goog = window.goog || {};
window.goog.comments = window.goog.comments || {};
window.goog.comments.loadQueue = window.goog.comments.loadQueue || [];
window.goog.comments.loadQueue.push(render);
}
})();
// ]]>

Por ahora a mí me ha valido, lo que no sé es hasta cuando, ya que se ve que a blogger le gusta jugar con sus comentarios.

Actualización: Me he dado cuenta de que Karla tenía en Compartidísimo la solución desde ayer. Por eso, para ofrecer algo diferente, para quien le interese, explicaré lo mejor que pueda el motivo del fallo (que tampoco tiene tanto misterio).

Antes, estas eran las variables:


var items = <data:post.commentJso/>;
var msgs = <data:post.commentMsgs/>;
var postId = '<data:post.id/>';
var feed = '<data:post.commentFeed/>';
var authorName = '<data:post.author/>';
var authorUrl = '<data:post.authorUrl/>';
var blogId = '<data:top.id/>';
var baseUri = '<data:post.commentBase/>';
var maxThreadDepth = '<data:post.commentMaxThreadDepth/>';

Ahora, sólo hay estas:


var items = <data:post.commentJso/>;
var msgs = <data:post.commentMsgs/>;
var config = <data:post.commentConfig/>;

El problema es que blogger ha suprimido las últimas 7 variables antiguas (o al menos la de “baseUri”), para agruparlas en <data:post.commentConfig/>, por lo que al estar eliminada devolvía una cadena vacía o extraña que se cargaba los comentarios.

Menos mal que en la plantilla de mi blog de pruebas tenía el script nuevo…

34 pensamientos en “Solucionar los problemas con los comentarios anidados en blogger

  1. Imagen de SidV el dijo:

    Que mas decir… que GRACIAS!

    He llegado a tu blog por la queja que pusiste en el foro de ayuda de Blogger, donde la verdad son un desastre para ayudar los mismos empleados de google/blogger que ni ayudan realmente, y tu tienes la solución ;)

    GRACIAS de nuevo!!!

  2. Imagen de Master_AS el dijo:

    Hola

    Me gustaría saber cómo has arreglado el formato de fecha en los nuevos comentarios anidados.

    También cómo se puede resaltar el comentario del autor del blog como tú has hecho.

    Gracias.

    • Imagen de Emilio Cobos Álvarez el dijo:

      Lo cierto es que no estoy usando los comentarios anidados estándar de blogger, si no estos comentarios. Así, se pueden editar completamente desde la plantilla.

      Sobre lo de la cinta del autor, puedes probar a insertarla vía Javascript. Podrías probar a agregar una clase a los comentarios del autor, y luego añadirle la cinta (con jQuery sería algo así: $('.author-comment > .comment-block .comment-header').append('El código de tu cinta'))

      La cinta está creada con esta herramienta.

      El css que te dan va encima de </b:skin> y el html va (entre comillas y en una sola línea) donde he puesto "El código de tu cinta"

      Recuerda reemplazar en el código de la cinta "<!– ribbon text goes here –>" por el texto que quieras (autor,etc)

      Es posible que tengas algún problema para posicionarla. De ser así, comenta aquí y yo te ayudaré a hacerlo.

  3. Imagen de Negocios rentables el dijo:

    Me ha encantado el sitio pero sabes, tengo problemas para suscribirme al sitio me aparece un error, sera problema mi o directamente de la web? Si sabes como corregirlo te lo agradeceria, ya que no quiero perderme ningun tema que se publique.Bendiciones desde Argentina amigos!

    • Imagen de Emilio Cobos Álvarez el dijo:

      Al pasar con IE la consola en tu blog he visto varios errores. El primero está relacionado con @font-face (google fonts). El otro está relacionado con prototype (algún efecto tal vez), pero es posible que venga como consecuencia del primero. Prueba si funciona con sin google web-fonts (pon los links entre <!– y –>).
      Si no, revisa qué efectos con scriptaculous o acciones con prototype no funcionan en IE.

      Si sigue habiendo problemas, vuélvete a pasar y seguiré buscando ;)

      Finalmente, como otra opción, considera incluir estos comentarios.

  4. Imagen de Jorge el dijo:

    Es genial que haya quien logre solucionar estos problemas que nos vuelven un poco locos a todos.

    En mi caso, el problema está en que curiosamente el desplegable "Comentar como" no se rellena en IE, pero sí en Firefox. Me lo habían dicho ya antes, pero como yo sí lo veía, pensaba que era porque tenían una versión antigua. Pero ayer probé en un IE 9 y en mi blog "Sin miedo a la verdad" no se rellena ese desplegable. Sin embargo, en los otros dos que tengo, sí. ¿Sabes por qué podría ocurrir esto?

    • Imagen de Emilio Cobos Álvarez el dijo:

      Es muy extraño. Lo acabo de ver y en tu blog no funciona, como bien dices. Aún así, en este sí, por ejemplo. He revisado el HTML y lo que pasa es que simplemente no cargan las opciones, no están.

      No obstante, no puedo ayudarte en eso :S. Ese iframe viene de la página de blogger y no lo podemos editar, ni siquiera mínimamente.

    • Imagen de Jorge el dijo:

      Una pena. Pero gracias de todas formas. No sé, a lo mejor reviso la plantilla de los otros blogs y copio lo que tenga pinta de ser de los comentarios al que da problemas, a ver qué ocurre…

  5. Imagen de Helena el dijo:

    ¡Hola Emilio!

    He intentando poner los comentarios en mi blog conforme los tienes tú, según tus indicaciones, pero se me descuadran dos cosillas que no sé si me podrás solucionar:
    – En primer lugar cuando le doy a responder un comentario, aparece sobre un fondo azul ¿no se podría quitar y que esté en blanco como el resto?
    – Por otra parte la fecha, que me aparece totalmente pegada a la numeración del comentario, ¿cómo puedo darle una pequeña separación?

    Luego, abusando de tu amabilidad, quería preguntarte otra cosilla que no tiene relación con los comentarios, pero creo que está relacionado con el sistema de numeración de páginas que comentaste en otra entrada.

    La cuestión es que en cada página del blog me aparece un número de entradas distintas. En la primera página salen 4, en la segunda 9, en la tercera 6, cuando según la configuración deberían salir 10. Esas entradas que faltan (en la primera página son 6, en la segunda 1 y en la tercera 4), se pierden y sólo se puede acceder a ellas a través del Archivo. No se ven en la cronología lógica del blog aunque sí en el archivo. No sé si me he explicado bien…

    Disculpa por el tostón. Un saludo y muchísimas gracias

    • Imagen de Emilio Cobos Álvarez el dijo:

      Nativamente en blogger es imposible, ya que blogger no te deja editar su base de datos. En este blog yo mismo creé dos tablas, una con los comentarios y número de votos, y otra con los votantes (para evitar votos dobles), pero en blogger no es posible.

      La única opción viable que se me ocurre (aunque ralentizaría mucho la carga de la página), sería mediante iframes (un iframe cuya src sería una url de un script PHP propio a la que pasaras la ID del comentario). Pero llevaría mucho tiempo hacerla… Aunque quien sabe ;) si me queda algo de tiempo libre se puede intentar…

      O tal vez lo mismo, pero cargar el contenido vía ajax (que ralentizaría la página un pelín menos)…

  6. Imagen de FranFran el dijo:

    ¡Muchas gracias!, me tenía bien afligida el no poder los comentarios de mis lectores ya que el botón había dejado de funcionar, pero ahora todo esta bien otra vez =)

    ¡Gracias!

  7. Imagen de Carlos el dijo:

    No me ha funcionado, ya habia visto un post como este en ciudadblogger pero creo que esta desactualizado porque google ha actualizado de nuevo la plataforma para los mensajes anidados y no he podido dar con la solucion a mi problema, en el mes de mayo los comentarios anidados me iban de maravilla hasta que entro la nueva actualizacion y se me hecho todo a perder,.
    saludos.

  8. Imagen de Santiago WessSantiago Wess el dijo:

    Muchisimas gracias, la verdad le estaba sufriendo mucho para solucionar este problemilla, intente lo de varias paginas pero ninguna me resultaba hasta que llegue aqui :D gracias!

  9. Imagen de Miguel el dijo:

    Hola Emilio,
    enhorabuena por tu Blog porque es muy interesante. Quería preguntarte, yo utilizo los comentarios de Blogger (tengo unos 3000 y pico) pero encuentro problemas últimamente. Por ejemplo, si tienes un usuario de Google+, hasta que no te “logas”, no puedes dejar comentarios y si escribes un comentario y luego te “logas” el comentario se pierde. ¿Qué puedo hacer?, ¿qué sistema de comentarios recomiendas (y no perder los de Blogger que ya uso).

    Un saludo!!!

  10. Imagen de MARIA DE LAS MERCEDES el dijo:

    Hola! Mi problema es el siguiente….tengo una plantilla modificada y la cuestión es que después del comentario 200 no me aparecen ya más. Probé con la paginación que propone oloblogger (http://www.oloblogger.com/2012/01/una-solucion-para-la-paginacion-de.html) , la instalé, no me saltó ningún error, pero no me aparece o no sé si la instalé bien o era la solución correcta….no soy experta en esta cosas pero si entrás a está página dentro de mi blog: http://asesoramientoconsorcios.blogspot.com.ar/p/libro-de-visitas.html verás que al llegar al comentario 155 no se cargan más!!! Tengo un hermoso estilo de comentarios y me rehuso a dejarlos de lado por este problema….¿me podrías ayudar? saludos!

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Puedes usar las siguientes etiquetas y atributos HTML:<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre data-language=""> <ul> <ol> <li>
Para poner código usa <pre data-language="[lenguaje]"><code>[código]</code></pre>, y no olvides escapar el HTMl.