Рейтинг материалов и сортировка по рейтингу

VladimirREAL33rus
02.08.2012
2535
Давайте представим себе простую систему голосования, которая предоставляет посетителям сайта возможность ГОЛОСОВАТЬ или НЕ ГОЛОСОВАТЬ за материал. Чем больше голосов у материала, тем выше он в списке выдачи поиска материалов созданного нами типа контента. Сейчас я постараюсь рассказать, как делал эту систему.Сначала я создал в базе данных joomla таблицу из трех колонок Num, id, click. Num – это порядковый номер записи в таблице, который автоматически записывается в ячейку для каждой новой записи. id – идентификатор материала, которому соответствует запись таблицы. click – кол-во нажатий на кнопку “ГОЛОСОВАТЬ”, т.е кол-во голосов за материал. Вся работа системы выполняется с помощью одного поля free text, размещенного во вкладке content конструктора форм и типов контента. Для того, что бы код, приведенный ниже, работал так, как мне нужно я использовал компонент sourcerer. Он позволяет вставлять любой HTML код ( включая CSS или JavaScript ) прямо в материалы.
<form method="post">
<button name="but" type="buttom">КНОПКА</button>
</form>

<?php
if(isset($_POST['but'])) //условие, благодаря которому код в скобках выполняется только после нажатия на кнопку.
{
$id=JRequest::getInt('id'); //переменной $id присваивается значение id материала.

$conn = mysql_connect("localhost", "root", ""); //соединение

mysql_select_db("joomla"); //c базой данных joomla

$r = mysql_query("SELECT * FROM hsh19_golosa WHERE id LIKE '$id'"); // поиск по таблице hsh19_golosa записи с id

$num_r = mysql_num_rows($r); if($num_r===0) //если нет такой записи
{
mysql_query ("INSERT INTO hsh19_golosa (id, click) VALUES ('$id', '1')"); //добавляем её
}
while ($row=mysql_fetch_array ($r)) { $n = $row['click']; //присваиваем переменной $n значение кол-ва голосов.
}
$k = $n+1; // прибавляем 1 голос к общему кол-ву и присваиваем сумму переменной

$k mysql_query('UPDATE hsh19_golosa SET click='.$k.' WHERE click='.$n.' and id='.$id); // изменяем кол-во голосов

mysql_close($conn); //закрываем соединение
}
?>
Далее я сделал поле по аналогии Arcticle id и добавил его в конструктор во вкладке order.
2scr
1scr
Конечно система не закончена: любой желающий может крутить счетчики сколько душе угодно Моя основная задача отражена в заголовке и я её по своему выполнил

Комментарии  

# Ivan Здорово! Все так просто! Хотя способ с таким вот подключением к базе (настройками в коде) мне не нравится. Может кто подскажет альтернативу?
Мне для похожих целей - регистрация расхода топлива при записи формы (документа полетов).

У Вас недостаточно прав для добавления комментариев. Для того, чтобы оставить свой комментарий необходимо зарегистрироваться на сайте.