Votos con Emojis [Beta]

Perfil del autor

Iniciado por Miguel92
En Plugins Más de 3 meses


Público Privacidad
Normal Tipo
5 Respuestas
70 Visitas
3 Puntos
Miguel92 Fundador 180 14
Topics 27
Respuestas 95
Miguel92 Fundador
Más de 3 meses
Bueno como dice el titulo es beta, aunque sirve bien...
Fue realizado de esta manera hasta que se pueda mejorar y luego haré un post para retirar lo que seria los votos por puntos, ya que agregando esto existirían 2 sistemas de votos "puntos" y "emojis"

Captura:
Votos con Emojis [Beta]

Pero no me salió como quería, sigan los siguientes pasos:
1 - Ejecutan esta consulta
CREATE TABLE `sistema_votos` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `id_post` int(11) NOT NULL,
  `id_usuario` int(11) NOT NULL,
  `tipo` varchar(20) NOT NULL,
  PRIMARY KEY (`id`),
  KEY `id_post` (`id_post`),
  KEY `id_usuario` (`id_usuario`),
  KEY `tipo` (`tipo`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

2 - Abren inc/php/ajax/ajax.posts.tpl y buscan
'posts-votar' =>  array('n' => 2, 'p' => ''),
debajo agregan
'posts-votos' => array('n' => 2, 'p' => ''),
más abajo buscan
case 'posts-votar':
//<--
echo $tsPosts->votarPost();
//-->
break;
y agregan
case 'posts-votos':
// <--
echo $tsPosts->VotosPorEmoji();
// -->
break;

3 - Ahora en inc/class/c.posts.php buscan
      // TAGS
$postData['post_tags'] = explode(",", $postData['post_tags']);
y arriba agregaremos [NOTA: Esto es lo que no me gusto como ha quedado, lo quiero reducir para que no sean tantas líneas]      
// ME GUSTA
$megusta = db_exec(array(__FILE__, __LINE__), 'query', "SELECT COUNT(tipo) FROM sistema_votos WHERE id_post = {$postData['post_id']} AND tipo = 'megusta'");
$postData['megusta'] = db_exec('fetch_row', $megusta);
// LO AMO
$loamo = db_exec(array(__FILE__, __LINE__), 'query', "SELECT COUNT(tipo) FROM sistema_votos WHERE id_post = {$postData['post_id']} AND tipo = 'loamo'");
$postData['loamo'] = db_exec('fetch_row', $loamo);
// SIN PALABRAS
$sinpalabras = db_exec(array(__FILE__, __LINE__), 'query', "SELECT COUNT(tipo) FROM sistema_votos WHERE id_post = {$postData['post_id']} AND tipo = 'sinpalabras'");
$postData['sinpalabras'] = db_exec('fetch_row', $sinpalabras);
// WTF
$wtf = db_exec(array(__FILE__, __LINE__), 'query', "SELECT COUNT(tipo) FROM sistema_votos WHERE id_post = {$postData['post_id']} AND tipo = 'wtf'");
$postData['wtf'] = db_exec('fetch_row', $wtf);
// LO ODIO
$loodio = db_exec(array(__FILE__, __LINE__), 'query', "SELECT COUNT(tipo) FROM sistema_votos WHERE id_post = {$postData['post_id']} AND tipo = 'loodio'");
$postData['loodio'] = db_exec('fetch_row', $loodio);
luego abajo de todos arriba de la última llave '}' agregan
   /** NUEVO SISTEMA DE VOTACIÓN POR EMOJIS **/
public function VotosPorEmoji() {
global $tsCore, $tsUser;
$postVoto = array(
'tipo' => $tsCore->setSecure($_POST['tipo']),
'usuario' => intval($_POST['user_key']),
'postid' => intval($_POST['postid']),
); 
# Comprobamos que el usuario no haya votado anteriormente
$q = db_exec('fetch_row', db_exec(array(__FILE__, __LINE__), 'query', "SELECT id_usuario FROM sistema_votos WHERE id_post = {$postVoto['postid']} AND id_usuario = {$tsUser->uid}"));
$dato = $q[0];
if($dato == NULL && $dato != $tsUser->uid) {
if(db_exec(array(__FILE__, __LINE__), 'query', "INSERT INTO sistema_votos (id_post, id_usuario, tipo) VALUES ('{$postVoto['postid']}', '{$postVoto['usuario']}', '{$postVoto['tipo']}')")) {
return '1: Gracias por tu voto. | ' . $postVoto['tipo'];
}
} else return '0: Ya votaste.';
}

4 - Ahora van a su theme/js/funciones.js y abajo de todos agregan
$(document).ready(function() {
$("ul.emojis li a").click(function(e) {
e.preventDefault(); 
var voto = $(this).data("voto"),
usuario =  $(this).data("user"),
objeto = $(this).closest("li").find(".count").text(); 
votar(voto, usuario, objeto); 
});
});
function alerta(mensaje,modo) {
$("body").append("<div class='mensaje position-fixed bottom-3 left-3 rounded flat py-2 px-4 bg-" + modo + "'>" + mensaje + "</div>");
$('.mensaje').fadeOut(8000, function(){ 
$(this).remove(); 
});
}
function votar(tipo, usuario, objeto) {
$.ajax({
method: "POST",
url: global_data.url + '/posts-votos.php',
data: 'tipo=' + tipo + '&user_key=' + usuario + '&postid=' + gget('postid'),
success: function(h) {
switch (h.charAt(0)) {
case '0': //Error
alerta(h.substring(3), "danger");
break;
case '1': //OK
h = h.split('|');
alerta(h[0].substring(3), "success");
objeto = parseInt(objeto);
$('a[data-voto='+h[1]+'] > .count').text(objeto + 1);
break;
}
}
})
}

5 - Ahora en hoja de estilo que sea global como "estilo.css" agregan, lo pueden editar a su manera ya que lo uso con un framework, pueden usar bootstrap tranquilamente
/** Sistema de votos por emojis **/
/* PUEDEN AGREGAR SUS ESTILOS A SU MANERA SI QUIEREN */
.emojis {
}
.emojis li {
margin-right: 10px;
filter: grayscale(100%);
transition: filter .2s ease-in-out;
}
.emojis li:hover,
.emojis li:hover .tooltip{
filter: grayscale(0%);
transition: filter .4s ease-in-out;
}
.emojis li .smile {
font-size: 26px;
line-height: 20px;
}
.emojis .count {
position: relative;
background: var(--success);
border-radius: 5px;
margin-top: 8px;
margin-left: 26px;
line-height: 18px;
padding: 0 10px;
font-size: 12px;
height: 18px;
color: #FFF
}

6 - En templates/m.posts_metadata.tpl o donde quieran agregan
El enlace git-paso-6 ya que me da problemas no agrega todo el código por alguna razón

3 puntos
5
Loading...

¿Como comentar?

Para poder comentar necesitas estar Registrado.


Si ya eres miembro ingresa a tu cuenta.