Тема: Ajax-vote для Strawberry 1.1.1 MySQL

Ajax - голосование за новость.

Оговорюсь сразу, что разработка базировалась на описаной здесь http://strawberry.goodgirl.ru/forum/topic/646/ Stark, но так как пришлось частично переписать файл stars.php и чутка prototype.js , а файл ajax.php переписать целиком, выложил как отдельную разработку.

Скрипт работает с БД движка, а значит все голосования сделаные в версии Stark, будут потеряны, а голосования сделаные стандартным способом, т.е. с занесением в БД будут отображаться корректно. Импорт голосований из файлов мне делать в ломы, да и глупо, так как там идёт привязка  путём занесения IP голосовавшего в файл. В этой версии учёт оценок ведётся как и в самой Strawberry, т.е. через куки. А это в означает, что все голосования сделаные до установки скрипта будут учтены.

Установка:

Ajax-vote for Strawberry 1.1.1 MySQL

Установка скрипта:

1) Копируем файлы из архива:
-В корень сайта(в папку с вашим index.php)
   prototype.js 
   stars.php
   ajax.php
   папку img, c файлами:
   star_e_small.gif
   star_f_small.gif
   star_o_small.gif

2) Открываем главный файл вашего сайта - index.php
и перед тегом </head> пишем:

<script language="javascript" type="text/javascript" src="prototype.js"></script>

3) В шаблонах новостей (в файлах active.tpl и full.tpl), в месте где вы бы хотели видеть звездочки вставляете этот код

<? include 'stars.php'; ?>

Для запрета на голосование не авторизированым или незарегеным советую в шаблоне применять конструкцию:

<? if ($tpl['if-logged']) { include 'stars.php';} ?> 

Вэтом случае возможность голосовать будет только у авторизированого пользователя.

Для отображения результата голосований без возможности голосовать можно использовать функцию:

 function Votes ($sum, $vot) {
        $val = @round($sum/ $vot);
        $i = 0;
        while($i < $val)
        {
            echo "<img src=img/star_f_small.gif border=0 align=\"top\">";
            @$i++;
        }

        while($i < 5)
        {
           echo "<img src=img/star_e_small.gif border=0 align=\"top\">";
           $i++;
        }
        }

Вызывая её  Votes($row['rating'], $row['votes']) или  Votes($tpl['post']['rating'], $tpl['post']['votes'])

P.S. Функцию можно вставиь в файл rating.php находящемся в папке plugins и тогда она будет доступна в любом месте вашего шаблона.

Демонстрацию работы скрипта можно смотреть здесь http://samizdatt.net на главной приведена работа без возможности голосования, но с выводом оценок, голосование возможно лишь при просмотре полного текста публикации.

Если будут вопросы спрашивайте, постараюсь на них ответить. Скрипты в приаттаченом архиве ajax-vote.zip

2 дня, 17 часов и 17 минут спустя:

Сорри, забыл кое-что написать, т.е. когда отлаживал скрипт на локале думал добавить, но извиняюсь забыл. Вставьте в ajax.php  8-ой и 9-той строками

$pid = intval($pid);
$rid = intval($rid);

На всякий пожарный, а то вдруг кто попробует приинжектить запрос вражеский, сам не копался насколько это возможно, но как говориться бережёного бог бережёт.

Отредактировано w1a9 (05 Jun 2009 14:47:02)

Post's attachments

ajax-vote.zip 9.58 kb, 487 downloads since 2009-04-24 

2

Re: Ajax-vote для Strawberry 1.1.1 MySQL

Спасибо. Очень понравилось smile

"Бог умер" (с) Ницше
"Ницше умер" (с) Бог

Re: Ajax-vote для Strawberry 1.1.1 MySQL

prototype.js конфликтует с cute.js
Если Vote сунуть в Full.tpl то при просмотре приходит полный пи***ц, когда загрузка доходит до формы комментариев. Зависает браузер и начинает глючить комп.
Есть выход? roll

Re: Ajax-vote для Strawberry 1.1.1 MySQL

dMark, а если не засовывать его в шаблон, а выводить отдельным блоком?

5

Re: Ajax-vote для Strawberry 1.1.1 MySQL

Strawberry 1.1.1 MySQL

Все работает, но не пойму, как подключить функцию просмотра результатов, и как ее вызвать на странице полной новости? После голосования скрипт сообщает об ошибке.
Помогите пожалуйста!