возможно есть орфографические ошибки, забейте, я торопился.
Сразу скажу, читать долго, но написано мной в легкой форме, к восприятию кошерный более чем. Не велосипед конечно, но идея на мой взгляд не совсем тухлая, и польза для визуального поиска лучшего материала на сайте, как не как полезная, требования минимальные, нагрузки не какой. Читаем, отписываемся и предлагаем свой алгоритм, мне нужны только расчеты. и чучуть php кода для функции старения индекса, об этом ниже.
Предыстория:
В данный момент на больничном, суть не очень важна, но срок больничного почти 2 месяца, времени появилось много, сутками без сна сидел за компом, ковырялся в разных тематиках, то и се смотрел, вчера устал сильно, спать не охота, а от компа тошнит, решил посмотреть фильм, набрал в поиске что посмотреть, везде хрен знает что пишут, толком не смог определиться и лег спать, пока засыпал, в связи с этим придумал такую штуку для эльки, назовем эту штуку двояка "Индекс Внимания-Полезности-Важности" о как, даже трояка, сократим пусть будет "Индекс ВПВ" по трем первым буквам желаемого результата. Этот индекс будет представлять из себя число в низу каждой новости, типа рейтинга на хабре, но создаваться он будет не за счет прямого влияния людей (плюсы или минусы ставить), а автоматически основываясь на 4 аргументах.. Концепция схожа чем то с таргетингом у рекламы яндекса, собираем, суммируем, делаем выводы, выводим результат. Ну это я конечно в грубой форме, у нас не то количество аргументов и не та польза.
Для вывода "Индекс ВПВ", у нас есть 3 аргумента, есть еще 4 но работать с датами я не умею по этому его в щет не берем,(если поможите, то и его добавим, он кстати будет супер полезен) благодаря этим аргументам мы и будем создавать наш "Индекс ВПВ" контента, формироваться он должен исходя из наших аргументов, при чем сам, автоматически, что собственно и будет, не каких баз данных и мега супер пупер скриптов, одна простая математика и калькулятор, реализацию я уже придумал, единственное что мы не сможем делать, это манипулировать этим индексом, или можем (я в php нуб) точно не скажу.
Аргументы у нас будут с весом, это нужно для вывода конечного результата, вес это значение аргумента по отношению к другим, чем жирнее вес аргумента, тем больше его % влияет на обще значению.
1 аргументПросмотры новости - их обычно много, по этому они будут нести легкий вес.
2 аргумент Коментарии - обычно, что бы написать комментарий нужно приложить усилие, да и повод написать что то тоже должен быть и зависит от важности или от качество контента.
3 аргумент Рейтинг от голосования - ну нажать на рейт бар не сложно, возьмем за среднию тяжесть
4 аргумент Дата публикации до реального времени это аргумент составляет роль регулирующего органа для компенсации быстрого роста значения, а значит веса аргумента с малым весом. Все позже объясню конкретней.
Тупой пример алгоритма для объяснения принципа
((1 аргумент(легкий вес)=10 просмотрам новости) / на 100 к примеру) =0.1
((2 аргумент(большой вес)=5 коментариям) / на 30 к примеру) =0,1666666666666667
((3 аргумент(средний вес)=7 оценка рейтинга / на 56 к примеру = 0,125
теперь все это плюсуем
1 аргумент+2 аргумент+3 аргумент=1.285 (сумма 3 аргументов)
4 аргумент(дата публикации)= реальное время(2013 07 2 6 ) - (2013 07 2 4 )дата публикации
4 аргумент=2 (разница во времени)
теперь создаем принцип старения, а в итоге уменьшаем "Индекс ВПВ" за счет прошедшего времени.
1.285 (сумма 3 аргументов) / делим на 2 (разница во времени) = 0,6425 наш "Индекс ВПВ"
вот и все, алгоритм мега грубый, тупо для примера, я попробовал написать максимально простым и понятным языком, для таких же как и я простых людей) которые с неба в точных науках звезд не хватали))).
php реализация, с датами работать не могу, по этой причине без старения,
в файле templates/Uniel/Classes/UserNews.php
есть вывод новости, я просто добавил его туда, от стандартного немного отличается, я внес свои изменения
вот что добавил 'indexvpv'=>'<div class="indexvpv" title="Индекс ВПВ, рассчитывается очень мудрено.">'.$indexvpv=(Strings::CutindexStr($totalindex=(($v['reads']/468)+$v['comments']+$v['r_total']),4)).'</div>',
Strings::CutindexStr у меня другой, точки мешали, клонировал функцию без точек. (...)
выделил куда поставил
$T->$tpl(array(
'top'=>array(
# 'published'=>sprintf(static::$lang['noleng'],Eleanor::$Language->Date($v['date'],'fdt')),
'category'=>isset($data['cats'][$v['_cat']]) ? sprintf(static::$lang['noleng'],'<a href="'.$data['cats'][$v['_cat']]['_a'].'">'.$data['cats'][$v['_cat']]['t'].'</a>') : false,
# 'comments'=>$lc($v['comments'],'<a href="'.$v['_url'].'#comments">'.$v['comments'].'</a>'),
# 'author'=>'<div class="avtor">'.sprintf(static::$lang['noleng'],$v['author_id'] ? '<a href="'.Eleanor::$Login->UserLink($v['author'],$v['author_id']).'" rel="author">'.$v['author'].'</a>' : $v['author']).'</div>',
),
'bottom'=>array(
'author'=>'<div class="author" title="Автор публикации">'.sprintf(static::$lang['noleng'],$v['author_id'] ? '<a href="'.Eleanor::$Login->UserLink($v['author'],$v['author_id']).'" rel="author">'.$v['author'].'</a>' : $v['author']).'</div>',
'published'=>'<div class="date" title="Дата публикации">'.sprintf(static::$lang['noleng'],Eleanor::$Language->Date($v['date'],'fdt')).'</div>',
#'reads'=>'<div class="viev">'.sprintf(static::$lang['noleng'],$v['reads']).'</div>',
'comments'=>'<div class="comments" title="Комментарии">'.sprintf(static::$lang['noleng'],'<a href="'.$v['_url'].'#comments">'.$v['comments'].'</a>').'</div>',
'yoindex'=>'<div class="indexvpv" title="Индекс ВПВ, расчитывается очень мудрено.">'.$indexvpv=(Strings::CutindexStr($totalindex=(($v['reads']/468)+$v['comments']+$v['r_total']),4)).'</div>',
#'readmore'=>$v['_readmore'] ? '<a href="'.$v['_url'].'#more">'.static::$lang['readmore'].'</a>' : false,
#'readmore'=>$v['_readmore'] ? '<a href="'.$v['_url'].'#more">'.static::$lang['readmore'].'</a>' : false,
#'voting'=>'<div class="voting">'.$v['voting'] ? ' <a href="'.$v['_url'].'#voting">'.static::$lang['voting'].'</a>' : false.'</div>',
#'status'=>$status,
'rating'=>Eleanor::$vars['publ_rating'] ? static::Rating($k,$v['_canrate'],$v['r_total'],$v['r_average'],0,$marks,false) : false,
#'edit'=>$v['_aedit'] ? Eleanor::$Template->EditDelete($v['_aedit'],$v['_adel']) : false,
),
'title'=>$v['_readmore'] ? '<a href="'.$v['_url'].'">'.$v['title'].'</a>'.($v['_hastext'] ? ' <a href="#" data-id="'.$k.'" data-more="#more-'.$k.'" class="getmore"></a>' : '') : $v['title'],
'text'=>Strings::CutStr($v['announcement'],150).($v['_hastext'] ? '<div id="more-'.$k.'" style="display:none"></div>' : '').($ntags ? '<div class="tags">'.sprintf(static::$lang['tags_'],rtrim($ntags,', ')).'</div>' : ''),
));
итог
http://floomby.ru/s2/KYN6tT
Надеюсь все внятно объяснил, теперь прошу помощи для формирования оптимального алгоритма и php решения для старения, я не знаю как дату перевести в целое число, искал пару примеров, но мне сервер все время 70 год показывает, с синтаксисом php мало знаком, да и не нужен он мне больно, я и без него на хлеб с маслом зарабатываю.
Оптимальный алгоритм, это числа на что делить, при каком условии, как делить или умножать, что бы в итоге получалось оптимальное вычисление с учетом всех факторов.
Спасибо за внимание.