Класс рейтинга

746
.
I'm the Cult of Personality...
Что-то я давненько ничего не пейсал.
Клас голосовань, ну там лайков дизлайков и прочей хрени. Пример в следующем посте.
<?php
/*
  * Клас голосовань
  * Автор: BoGdAn/ARMYbodya <armybodya@gmail.com>
  * Дата: 29 вересня 2014р
  * Написаний за допомогою мобільного телефону. Вибачте, без табуляції.
  */
class Vote {

var $col_vote_in_string;

function __construct($col_vote = 1) {
 $this->col_vote_in_string = $col_vote;
}

function add($id, $str, $cheng = 1) {
$arr = $this->string_to_array($str);
if($this->col_vote_in_string == 1) {
if(in_array($id, $arr)) { 
$arr_flip = array_flip($arr);
unset($arr_flip[$id]);
$arr = array_flip($arr_flip);
}
else 
$arr[] = $id;

return $this->array_to_string($arr);
}
 
$arr_p = array();
foreach($arr as $mas) 
if(in_array($id, $mas)) {
$noadd = 1;
$mas_flip = array_flip($mas);
unset($mas_flip[$id]);
$mas = array_flip($mas_flip);
$arr_p[] = $mas; 
}
else  
$arr_p[] = $mas;
if(!isset($noadd))
$arr_p[$cheng] = empty($arr_p[$cheng]) ? array($id) : $id;
return $this->array_to_string($arr_p);
}

function view($str) { 
$arr = $this->string_to_array($str);
if($this->col_vote_in_string == 1)
return count($arr);

$r_arr = array();
foreach($arr as $mas)
$r_arr[] = count($mas);
return $r_arr;
}

function in_vote($id, $str) { 
$arr = $this->string_to_array($str);
if($this->col_vote_in_string == 1)
if(in_array($id, $arr))
return 1;
else 
return 0;
$r_arr = array();
foreach($arr as $mas)
if(in_array($id, $mas))
$r_arr[] = 1;
else 
$r_arr[] = 0;
return $r_arr;
}

function uslist($str, $cheng = 1) {
$arr = $this->string_to_array($str);
if($this->col_vote_in_string == 1)
return $arr;
else 
return $arr[$cheng];
}

function array_to_string($arr) { 
if($this->col_vote_in_string == 1)
return implode(',', $arr);
$str = '';
$count = count($arr);
$i = 0;
foreach($arr as $v) {
$str .= implode(',' ,$v);
if(++$i != $count)
$str .= '|';
}
return $this->string($str);
}

function string_to_array($string) {
$string = $this->string($string);
if($this->col_vote_in_string === 1) {
if(empty($string)) return array();
return explode(',', $string); 
}
$arr = array();
$v = $string ? explode('|', $string) : array(); 
for($i = 0; $i <= ($this->col_vote_in_string-1); ++$i)
$arr[] = !empty($v[$i]) ? explode(',', $v[$i]) : array();
return $arr;
}

function string($string) {
$arr = array(',,' => '', ' ' => '', "\n" => '', "\r" => '');
if($this->col_vote_in_string == 1)
$arr['|'] = '';
return strtr($string, $arr);
}

}
.
I'm the Cult of Personality...
Результат можно писать не только в файл ;)
Временный пример http://haker.e3w.ru/code/?
<?php
include '../system/vote.php';

function getIP() { if(isset($_SERVER ['HTTP_X_FORWARDED_FOR' ])) return $_SERVER ['HTTP_X_FORWARDED_FOR' ]; if(isset($_SERVER['HTTP_X_REAL_IP' ])) return $_SERVER['HTTP_X_REAL_IP' ]; return $_SERVER['REMOTE_ADDR']; }
$ip = getIP(); 
$db = file('test_file_db.txt');
$like = new Vote(1); 
if(isset($_GET['like'])) {
$db[0] = $like->add($ip, $db[0])."\r\n";
file_put_contents('test_file_db.txt', implode('', $db));
header('Location: ./?'); 
exit;
}
$vote = new Vote(5);
if(isset($_POST['add']) && in_array(intval($_POST['vote']), array(1,2,3,4,5)) && !in_array(1, $vote->in_vote($ip, $db[1]))) {
$db[1] = $vote->add($ip, $db[1], $_POST['vote']-1)."\r\n";
file_put_contents('test_file_db.txt', implode('', $db));
header('Location: ./?');
exit;
}
echo 'Сподобалось: '.$like->view($db[0]).' ', $like->in_vote($ip,$db[0]) ? '<a href="?like">Більше не подобається(</a>' : '<a href="?like">Мені теж =)</a>';
echo '<hr />';
echo '<h2>Ви користуєтесь класом рейтингу від BoGdAn?</h2>';
$mas = $vote->view($db[1]);
echo '<form method="post">';
echo '<p><input type="radio" name="vote" value="1" /> Так, чудовий клас ('.$mas[0].')</p>';
echo '<p><input type="radio" name="vote" value="2" /> Так, але потрібно допрацювати ('.$mas[1].')</p>';
echo '<p><input type="radio" name="vote" value="3" /> Норм, але я напишу краще свій ('.$mas[2].')</p>';
echo '<p><input type="radio" name="vote" value="4" /> Клас потребує серйозних допрацювань ('.$mas[3].')</p>';
echo '<p><input type="radio" name="vote" value="5" /> Фуфло Мля, афтар редіско ('.$mas[4].')</p>';
echo '<p><input type="submit" name="add" value="ПРОКРИЧАТИ" /></p></form>';
.$mas[4].
.
The Fast, Secure and Professional - Yii2
Вместо var правильней будет public
.
I'm the Cult of Personality...
Rakovskiy, Ок. Спасибо, учту.
.
ValekS
Ей 25
# Rakovskiy (29.09.2014 / 19:01)
Вместо var правильней будет public
Это так сказать новый подход к ОПП появившийся в пхп5. Хотя в той же джаве так изначально было, не знаю зачем надо было это var придумывать... В пхп5 же решили всё сделать как в джаве, я бы даже сказал "слизать".
.
Блиносвёрт ?
комментарии лучше бы на русском или хотя бы англ, эти языки больше народа знает, чем украинский...
мне не понятно
.
ValekS
Ей 25
# Jane (29.09.2014 / 21:12)
комментарии лучше бы на русском или хотя бы англ, эти языки больше народа знает, чем украинский...
мне не понятно
Перевод спешл фо ю:
Класс голосований
Написан с помощью мобильного телефона. Извините что без табуляции.
.
Блиносвёрт ?

Написан с помощью мобильного телефона. Извините что без табуляции.

ох, это труд!
.
I'm the Cult of Personality...
Jane, Так учите украинский , мне русский только для этого и нужен .

Там нет коментариев, я писал с телефона, у меня симбиан, я даже такой класик без глюков написать не смог. А еслиб еще коменты, тел короче вырубился бы.

Пример есть, что не так, спрашываем...
.
BoGdAn, а у тебя только мобильник или и ПК есть?
Всего: 39