Пока сырое решение для реализации "мне нравится"

Пока сырое решение для реализации

Как всегда писал под конкретную ззадачу, как всегда на скорую руку, и как всегда с присутствием говнокода. Для того чтобы по-нормальному переписать скрипт "мне нравится" для Modx Evolution как всегда не хватает времени) 

Выкладывю что есть, если кто загорится желанием перепсать его - пожалуйста, только не забудьте меня указать) Я ща просто на пиар работаю)))

Итак. Сниппет Like

<?php
// "Сниппет мне нравится"
// Автор: Алексей Либер, сайт: http://liber.pro
if ($pageID=='') $pageID=$modx->documentObject['id']; $curl = $modx->makeUrl($modx->documentObject['id']); $modx->regClientScript("<script type='text/javascript'>$('.like-dislike-btn').click(function(){ $.ajax({ type:\"POST\", url:\"".$curl."\", data:'act='+$(this).attr('what')+'&pageID=".$pageID."', success: function(result){ var data = $(result).find('#ld').html(); $('#ld').html(data); } }); });</script>"); $table = $modx->getFullTableName('rate'); $sql='CREATE TABLE IF NOT EXISTS '.$table.' ( `id` INT(11) NOT NULL AUTO_INCREMENT, `id_item` INT(11) NOT NULL, `ip` VARCHAR(25) NOT NULL, `rate` INT(1) NOT NULL, `dt_rated` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`) );'; $rs = $modx->db->query($sql); $user_ip = $_SERVER['REMOTE_ADDR']; $dislike_count_user = $modx->db->getValue('SELECT COUNT(*) FROM '.$table.' WHERE ip = "'.$user_ip.'" and id_item = "'.$pageID.'" and rate = 2 '); $like_count_user = $modx->db->getValue('SELECT COUNT(*) FROM '.$table.' WHERE ip = "'.$user_ip.'" and id_item = "'.$pageID.'" and rate = 1 '); extract($_POST); if($act == 'like'): if(($like_count_user == 0) && ($dislike_count_user == 0)){ mysql_query('INSERT INTO '.$table.' (id_item, ip, rate )VALUES("'.$pageID.'", "'.$user_ip.'", "1")'); } if($dislike_count == 1){ mysql_query('UPDATE '.$table.' SET rate = 1 WHERE id_item = '.$pageID.' and ip ="'.$user_ip.'"'); } endif; if($act == 'dislike'): if(($like_count == 0) && ($dislike_count == 0)){ mysql_query('INSERT INTO '.$table.' (id_item, ip, rate )VALUES("'.$pageID.'", "'.$user_ip.'", "2")'); } if($like_count == 1){ mysql_query('UPDATE '.$table.' SET rate = 2 WHERE id_item = '.$pageID.' and ip ="'.$user_ip.'"'); } endif; $like = $modx->db->getValue('select count(*) from '.$table.' where `id_item`='.$pageID.' and rate =1'); $dislike = $modx->db->getValue('select count(*) from '.$table.' where `id_item`='.$pageID.' and rate =2'); $rate = 14+($like-$dislike); $voted = $modx->db->getValue('select count(*) from '.$table.' where `id_item`='.$pageID.' and ip ="'.$user_ip.'"'); $chunk = $modx->parseChunk('likeTpl', array( 'like' => $like, 'dislike' => $dislike, 'rate'=>$rate), '' ); $tpl = explode('<hr>',$chunk); if ($voted) return $tpl[1]; else return $tpl[0]; ?>

 Чанк likeTpl, плейсхолдеры [ +like+], [ +dislake+], [ +rate+]

<span id="ld" style="margin-left:20px;"><a what="like"  class="like-dislike-btn"><i class="fa fa-thumbs-up" ></i></a>  </span>
<hr>
<span id="ld" style="margin-left:20px;"><i class="fa fa-thumbs-up" style="color:#008fd5"></i> понравилось:  (вы уже голосовали)</span>

Пример вызова: [ ! Like? &pageId=`115` ! ]

comments powered by HyperComments