Jump to content
  • Sky
  • Blueberry
  • Slate
  • Blackcurrant
  • Watermelon
  • Strawberry
  • Orange
  • Banana
  • Apple
  • Emerald
  • Chocolate
  • Charcoal
aperpen

[MOD] Respuestas en comentarios como en T! v4

Recommended Posts

Hola amigos, les traigo un MOD que consiste en respuestas en los comentarios como en T!.
El MOD está hecho para los comentarios que tengan el mismo diseño que la v4, no necesariamente tiene que ser el tema default
 
¿Que trae el MOD?
- Respuestas en comentarios.
- Citas en respuestas de otros comentarios.
- Automatizado con JS
 
1) Abren el funciones.js de themes/TUTEMA/js y buscan:

 case '1': //OK
$("#nuevos").slideUp(1);
     $('#preview').remove();
     /*textarea.attr('title', 'Escribir un comentario...').val('');
     onblur_input(textarea);*/
$('#nuevos').html(h.substring(3)).slideDown('slow', function () {
$('#no-comments').hide('slow');
getUrls(gget('postid'));
$('.miComentario').html('<div class="emptyData">Tu comentario fue agregado correctamente </div>');
              
});
     // SUMAMOS
     var ncomments = parseInt($('#ncomments').text());
     $('#ncomments').text(ncomments + 1);
                            //$('#btnsComment').attr({'disabled':''});
                            // POR SI HABIA ERROR
                            //$('.miComentario .error').html('');
     break;
     }
                $('#loading').fadeOut(350);                                 
     //
     $('.miComentario #gif_cargando').hide();
                mydialog.close();
     }
        });
    },

 
Abajo añaden:

 resp: function(id){
    $('#'+id).removeAttr('style');
  var textarea = $('#bodys_comm_'+cid);
textarea.focus();
 },
 
 nuevos: function(mostrar_resp, comentarionum, cid){
        // EVITAR FLOOD
        $('#btnssComment').attr({'disabled':'disabled'});
        //
     var textarea = $('#bodys_comm_'+cid);
     var text = textarea.val();
        // VACIO o DEFAULT
     if(text == '' || text == textarea.attr('title')){
     textarea.focus();
            $('#btnssComment').attr({'disabled':''});
     return;
     }else if(text.length > 1500){
     alert("Tu comentario no puede ser mayor a 1500 caracteres.");
     textarea.focus();
            $('#btnssComment').attr({'disabled':''});
     return;
     }
        // IMAGEN
     $('.resp #gif_cargando').show();
     var auser = $('#ausers_post').val();
var respuesta = $('#respuesta_'+cid).val();
        $('#loading').fadeIn(250);                                 
     $.ajax({
     type: 'POST',
     url: global_data.url + '/comentario-agregar.php',
     data: 'comentario=' + encodeURIComponent(text) + '&postid=' + gget('postid') + '&mostrar_resp=' + mostrar_resp + '&auser=' + auser + '&respuesta=' + respuesta,
     success: function(h){
     switch(h.charAt(0)){
     case '0': //Error
     $('.resp .error').html(h.substring(3)).show('slow');
                        $('#btnssComment').attr({'disabled':''});
     break;
     case '1': //OK
$("#nuevoss_"+cid).slideUp(1);
     $('#preview').remove();
     /*textarea.attr('title', 'Escribir un comentario...').val('');
     onblur_input(textarea);*/
$('#nuevoss_'+cid).html(h.substring(3)).slideDown('slow', function () {
$('.especial3').attr('class', 'especial1');
$('#nuevoss_'+cid+' .especial1 .comentario-post .comment-box').attr('style', 'width: 698px!important;');
$('#no-comments').hide('slow');
getUrls(gget('postid'));
$('.resp').attr("style", "margin-left: 131px!important; width: 701px!important;");
$('.resp').html('<div class="emptyData">Tu comentario fue agregado correctamente </div>');
              
});
     // SUMAMOS
     var ncomments = parseInt($('#ncomments').text());
     $('#ncomments').text(ncomments + 1);
                            //$('#btnsComment').attr({'disabled':''});
                            // POR SI HABIA ERROR
                            //$('.miComentario .error').html('');
     break;
     }
                $('#loading').fadeOut(350);                                 
     //
     $('.resp #gif_cargando').hide();
                mydialog.close();
     }
        });
    },

 
2) Abren el c.posts.php de inc/class y buscan:

c.* FROM u_miembros AS u LEFT JOIN p_comentarios AS c ON u.user_id = c.c_user WHERE c.c_post_id = \''.(int)$post_id.'\'

 
Y al lado añaden:

 AND c.c_resp = \'0\' 

 
Quedaría algo asi:

c.* FROM u_miembros AS u LEFT JOIN p_comentarios AS c ON u.user_id = c.c_user WHERE c.c_post_id = \''.(int)$post_id.'\' AND c.c_resp = \'0\' 

 
Luego buscan:

$return['data'][$i]['votado'] = $votado;

 
Abajo añaden:

$return['data'][$i]['respuestas'] = $this->getRespuestas((int)$comment['cid']);

 
En ese archivo busca:

function getLastComentarios(){
global $tsUser, $tsCore;
//
$query = mysql_query('SELECT cm.cid, cm.c_status, u.user_name, u.user_activo, u.user_baneado, p.post_id, p.post_title, p.post_status, c.c_seo FROM p_comentarios AS cm LEFT JOIN u_miembros AS u ON cm.c_user = u.user_id LEFT JOIN p_posts AS p ON p.post_id = cm.c_post_id LEFT JOIN p_categorias AS c ON c.cid = p.post_category '.($tsUser->is_admod && $tsCore->settings['c_see_mod'] == 1 ? '' : 'WHERE p.post_status = \'0\'  AND cm.c_status = \'0\' AND u.user_activo = \'1\' && u.user_baneado = \'0\'').' ORDER BY cid DESC LIMIT 10');
if(!$query) die(mysql_error());
$data = result_array($query);
 
//
return $data;
}

 
Abajo añade:

 function getRespuestas($comment_id){
global $tsCore, $tsUser;
//
$start = $tsCore->setPageLimit($tsCore->settings['c_max_com']);
$query = mysql_query('SELECT u.user_name, u.user_activo, u.user_baneado, c.* FROM u_miembros AS u LEFT JOIN p_comentarios AS c ON u.user_id = c.c_user WHERE c.c_resp = \''.(int)$comment_id.'\' '.($tsUser->is_admod ? '' : 'AND c.c_status = \'0\' AND u.user_activo = \'1\' && u.user_baneado = \'0\'').' ORDER BY c.cid LIMIT '.$start);
// COMENTARIOS TOTALES
$return['num'] = mysql_num_rows(mysql_query('SELECT cid FROM p_comentarios WHERE c_resp = \''.(int)$comment_id.'\' '.($tsUser->is_admod ? '' : 'AND c_status = \'0\'').''));
//
$comments = result_array($query);
 
 
// PARSEAR EL BBCODE
$i = 0;
foreach($comments as $comment){
// CON ESTE IF NOS AHORRAMOS CONSULTAS 
if($comment['c_votos'] != 0){
   $query = mysql_query('SELECT voto_id FROM p_votos WHERE tid = \''.(int)$comment['cid'].'\' AND tuser = \''.$tsUser->uid.'\' AND type = \'2\' LIMIT 1');
$votado = mysql_num_rows($query);
 
} else $votado = 0;
 
// BLOQUEADO
   $return['block'] = mysql_num_rows(mysql_query('SELECT bid, b_user, b_auser FROM `u_bloqueos` WHERE b_user = \''.(int)$comment['c_user'].'\' AND b_auser = \''.$tsUser->uid.'\' LIMIT 1'));
 
   //
$return['data'][$i] = $comment;
$return['data'][$i]['votado'] = $votado;
$return['data'][$i]['c_html'] = $tsCore->parseBadWords($tsCore->parseBBCode($return['data'][$i]['c_body']), true);
$i++;
}
//
return $return;
}

 
Para acabar en ese archivo busca:

 if(mysql_query('INSERT INTO `p_comentarios` (`c_post_id`, `c_user`, `c_date`, `c_body`, `c_ip`) VALUES (\''.(int)$post_id.'\', \''.$tsUser->uid.'\', \''.$fecha.'\', \''.$comentario.'\', \''.$_SERVER['REMOTE_ADDR'].'\')')) {

 
Y lo reemplazas por:

 if(mysql_query('INSERT INTO `p_comentarios` (`c_post_id`, `c_user`, `c_date`, `c_body`, `c_ip`, `c_resp`) VALUES (\''.(int)$post_id.'\', \''.$tsUser->uid.'\', \''.$fecha.'\', \''.$comentario.'\', \''.$_SERVER['REMOTE_ADDR'].'\', \''.(int)$_POST['respuesta'].'\')')) {

 
3) Hacen esta SQL en su BD:

ALTER TABLE  `p_comentarios` ADD  `c_resp` INT( 11 ) NOT NULL DEFAULT  '0';

 
4) Por último reemplacen el p.comentario.ajax.tpl de themes/TUTEMA/t.php_files por este: https://www.mediafire.com/?aj6foqw23lyqg8f
Hagan backup de su archivo original primero!
 
Caps:
7y1gW.png
7y1kb.png
 
Demo: http://programu.net/posts/phpost/128/-MOD-Respuestas-en-comentarios-como-en-T-v4.html#comments
User: demo
Pass: demo1234
 
Saludos :)

Edited by aperpen
  • Like 15

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

  • Similar Content

    • By Miguel92
      Pedido: [Mod] Imagen de cabecera en comunidades
      Por: @fellomix
       
      Una segunda forma de poder hacerlo!
       
      1 -  Ejecutar esta consulta
      ALTER TABLE `c_comunidades` ADD `c_headercom` VARCHAR(255) NOT NULL AFTER `c_nombre_corto`; 2 -  Buscar en c.comunidades.php en la función nueva_comunidad()
                      'fecha' => time(),                 'nombre' => $tsCore->setSecure($tsCore->parseBadWords($_POST['nombre']), true),                 'ncorto' => $tsCore->setSeo($tsCore->setSecure($_POST['ncorto'], true)),
      y debajo agregamos
                      'headercom' => $tsCore->setSecure($tsCore->parseBadWords($_POST['headercom']), true),
      un poco más abajo buscamos
                  // Insertamos             if(db_exec(array(__FILE__, __LINE__), 'query', 'INSERT INTO c_comunidades (c_autor, c_nombre, c_nombre_corto,
      y le agregamos a lado 
                   c_headercom,
      un poquito más abajo de
                      VALUES (                     \''.$tsUser->uid.'\',                     \''.$dato['nombre'].'\',                     \''.$dato['ncorto'].'\',
      agregamos
                          \''.$dato['headercom'].'\',
      Luego buscamos la función editar_comunidad($comid)
                          'pais' => $tsCore->setSecure($_POST['pais']),                         'desc' => $tsCore->setSecure($_POST['descripcion']),                     'color' => $tsCore->setSecure($_POST['back_color']),
      y debajo pegamos
                          'headercom' => $tsCore->setSecure($_POST['headercom']),
      más abajo buscamos 
                          c_acceso = \''.(int)$dato['acceso'].'\',                     c_permisos = \''.$dato['permisos'].'\',
      y debajo pegamos
       
                         c_headercom = \''.$dato['headercom'].'\',             
      3 - Después buscamos en c.crear_left.tpl
          <div class="item_form clearfix">         <label>Categoría</label>         <select name="categoria" id="ShowCats" class="required" onChange="com.subcat()" tabindex="3">             <option value="0">Selecciona una categoría</option>             {foreach from=$tsCats item=c}             <option value="{$c.cid}" {if $tsDato.c_categoria == $c.cid}selected="selected"{/if}>{$c.c_nombre}</option>             {/foreach}         </select>     </div>
      y debajo o arriba pegamos (se me olvido quitar los required, ya que no es obligatorio)
          <div class="item_form clearfix">         <label>Cabecera!</label>         <input type="text" name="headercom" tabindex="10" maxlength="180" size="60" class="required input_text https" placeholder="URL de portada (debe tener https://)" pattern="https://.*" value="{$tsDato.c_headercom}">         <small class="mg-lt">Solo admitirá los https!</small>     </div> 4 - Después buscamos c.com_info.tpl [línea 24 y 25]
      <div class="ver_com_info">     <div class="vci_left floatL">
      y la reemplazamos por
      <div class="ver_com_info" style="background-image: url({$tsCom.c_headercom});">     <div class="opacity">     <div class="vci_left floatL">
      luego debajo de la línea 61 agregaremos un 
          </div> 5 -  Por último agregaremos esto a comunidades.css
      .ver_com_info {     padding: 0; } .headercom {      background-position: center center;     background-size: cover;     background-repeat: no-repeat; } .opacity {     padding: 20px 8px;     background-color: rgba(255,255,255,.6); }  
    • By Miguel92
      Bueno dice N°2 porque a la N°1 la tengo que adaptar a la default ya que tenia class de bootstrap!
       

      si no se ve clic
       
      1) Crean un archivo llamado panel.js y agregan esto dentro
       
      2) En extras.css agregan esto
       
      3) Ahora crearemos un archivo llamado head_usuario.tpl y lo colocaremos en sections y dentro agregaremos
      la parte del st-panel-footer la pueden sacar no hay problema
       
      4) Ahora en la misma carpeta sections buscamos main_footer.tpl y agregaremos esto arriba de </body>
      {include file='sections/head_usuario.tpl'} <script src="{$tsConfig.js}/panel.js" type="text/javascript"></script>  
      5) Para los iconos descarguen esto → ICONOS FUENTES  ← y lo descomprimen en css
       
      6) Busquen en main_header.tpl y debajo de
      <link href="{$tsConfig.tema.t_url}/extras.css" rel="stylesheet" type="text/css" /> colocan
      <link rel="stylesheet" href="{$tsConfig.css}/iconfont.css">  
      y eso sería todo
       
      En el caso que haya error avísenme!
      Esta es la N°1
       
      si no se ve clic
      Ver panel N°2 ir a Demo32.hol.es
      Usuario: Demo
      Pass: demouser
    • By Rhuan
      Hola, este complemento podría considerarse en realidad una "plantilla" para el anterior RChat que publiqué ya que la mayor parte del funcionamiento es el mismo.
       
      Para instalar este chat no es necesario tener el anterior RChat y si lo tienes también puedes instalarlo sin problemas, los archivos se sobrescribirán.
       
       
      Actualización
      06/03/2015 a las 18:00 - Descarga actualizada: se ha corregido un fallo en el instalador que evita que aparezca el icono de los emoticonos. 08/03/2015 a las 22:10 - Descarga actualizada: se añadió seguridad adicional para evitar el flood. 09/03/2015 a las 23:15 - Descarga actualizada: ahora se muestran todos los emoticonos y se pueden agregar desde el chat.  
      Más capturas

        Caja de emoticonos abierta.
       

      Lista de moderación.
       

      Eliminar mensajes (onmouseover).
       

      Suspender usuario (onmouseover).
       
       
      Características
      Color de nick aleatorio como en grupos de WhatsApp. Suspender usuario por nick y por mensaje. Ver/editar/eliminar usuarios suspendidos. Borrar mensajes individualmente o todos de un usuario. Agrupar mensajes seguidos del mismo usuario. Mensajes propios diferenciados (alineado a la derecha en verde) BBCodes: [b], [i], [u], [br], [url], [color]. Imágenes y URLs automáticas. Censuras globales. Emoticonos globales a través de censuras. Antiflood, suspende durante 2 horas. El antiflood no afecta al staff. Diseño separado para funcionar con cualquier plantilla. Agregar emoticonos desde el chat. Selector de emoticonos.  
      Descarga
       
      Para Risus 1.2 o superior: rchat_whatsapp_1.2.zip
       
       
      Instrucciones
       
      Subir el directorio "install" a la raíz y acceder desde el navegador a http://www.tuweb.com/install/index.php
    • By Altffenser
      Hola, traigo esta pequeña modificación, es un dialogo de confirmación para cerrar sesión. Utilizo el plugin "mydialog" que trae por default el script por lo que no hará falta nada más. Este MOD lo vi hace años, lo publicó un usuario llamado mega-lucas ((o algo así (aún mantengo su V5 ))
       
      Instrucciones.
      1. Abrir el archivo acciones.js y al ultimo del archivo colocar:
      /* Logout confirm by Altffenser */ function open_logout_box() { mydialog.show(); mydialog.title('Cerrar sesión'); mydialog.body('Estas a punto de salir de tu cuenta. <b>¿Seguro que deseas continuar?</b>'); mydialog.buttons(true, true, 'Cerrar sesión', 'logout_by_now()', true, false, true, 'No, permanecer aquí', 'close', true, true); mydialog.center(); } function logout_by_now(){ $(function (){ window.location.href = global_data.url + "/login-salir.php"; }); } 2. Abrir el archivo head_menu.tpl y buscar:
      <li class="logout"> <a href="{$tsConfig.url}/login-salir.php" style="vertical-align: middle" title="Salir"> <span class="systemicons logout"></span> </a> </li> a) Reemplazar por:
      <li class="logout"> <a href="#" onclick="open_logout_box();" style="vertical-align: middle" title="Salir"> <span class="systemicons logout"></span> </a> </li>  
      ¡Has terminado!
       
      Con eso lo tendrán, ahora cada que den clic en "salir"; primero aparecerá un dialogo como este:
       

       
      Es muy sencillo el MOD pero a mi parecer, se ve bien Saludos
       
  • Recently Browsing   0 members

    No registered users viewing this page.

  • Patrocinador



  • ×