За последние 24 часа нас посетили 19543 программиста и 1605 роботов. Сейчас ищут 985 программистов ...

Звездочный реетирг.

Тема в разделе "PHP для новичков", создана пользователем Sofia, 30 июл 2011.

  1. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Это $row['video_id'] , только с нотисом.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    sobachnik
    а что там в аяксовом звездочном рейтинге вобще делает цикл с ПОЛНОЙ выборкой из базы? я вот к чему :D
     
  3. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    969
    Симпатии:
    2
    итак, вчера пропал у меня интернет и включили только сегодня.

    Чего я добилась:
    Сделала все-же рейтинг именно так как хотела, вот код:
    PHP:
    1. <?
    2. $result = mysql_query("SELECT * FROM video") or die(mysql_error());
    3. while($row = mysql_fetch_array( $result ))
    4. {
    5.     if ($row['video_count'] > 0) {$res_rate = $row['video_rate'] / $row['video_count'];}
    6.  
    7.    
    8. echo "<table width=\"100%\" border=\"0\" cellspacing=\"0\" cellpadding=\"0\" align=\"center\">
    9.  <tr>
    10.    <td width=\"30\" align=\"right\">".$row['video_id']."</td>
    11.    <td align=\"center\">Проголосовали ".$row['video_count']." и фильм имеет ".$row['video_rate']." баллов</td>
    12.    <td width=\"30\" align=\"right\">&nbsp;</td>
    13.  </tr>
    14.  <tr>
    15.    <td colspan=\"3\"><div class=\"basic\" data=\"".$res_rate."_".$row['video_id']."\"></div></td>
    16.  </tr>
    17. </table>";
    18.        
    19. }
    20. ?>
    пояснение:
    условие if ($row['video_count'] > 0) {$res_rate = $row['video_rate'] / $row['video_count'];} вынуждена была создать, так как 0 на 0 не делится.

    обработчиком является файл jRating.php
    в котором я вставила следующий код:
    PHP:
    1. <?
    2. $sql = "update video set video_rate=video_rate+".$rate."  where video_id=".$id."";
    3.                 mysql_query( $sql);
    4.                 $sql = "update video set video_count=video_count+1  where video_id=".$id."";
    5.                 mysql_query( $sql);
    6. ?>
    где $rate это балл а $id это уникальный код соответственно, ну и в video_count добавление +1 колличество голосов.

    Теперь чтоб доделать звездочный реетинг, осталось реализовать еще 2 задачи:
    1. Разобраться чтоб голосовали всего 1 раз (я выбрала метод по IP так как с кукисами я не справлюсь точно)
    2. Все-же победить чтоб звездочный реетинг можно было устанавливать по центру, что самое сложное для меня, так как это правится именно в аяксе:

    Реетинг имеет класс basic, который в свою очередь выглядит так:
    [js]<script type="text/javascript">
    $(document).ready(function(){
    $('.basic').jRating();

    });
    </script>[/js]
    и находится в jRating.jquery.js в котором очень много ненужного кода... разбиралась пол ночи, но не разобралась, листаю книжку.

    Содержимое jRating.jquery.js:
    [js]/************************************************************************
    *************************************************************************
    @Name : jRating - jQuery Plugin
    @Revison : 2.1
    @Date : 26/01/2011
    @Author: Surrel Mickael (www.myjqueryplugins.com - www.msconcept.fr)
    @License : Open Source - MIT License : http://www.opensource.org/licenses/mit-license.php

    **************************************************************************
    *************************************************************************/
    (function($) {
    $.fn.jRating = function(op) {
    var defaults = {
    /** String vars **/
    bigStarsPath : 'jquery/icons/stars.png', // path of the icon stars.png
    smallStarsPath : 'jquery/icons/small.png', // path of the icon small.png
    phpPath : 'php/jRating.php', // path of the php file jRating.php
    type : 'big', // can be set to 'small' or 'big'

    /** Boolean vars **/
    step:false, // if true, mouseover binded star by star,
    isDisabled:false,
    showRateInfo: true,

    /** Integer vars **/
    length:5, // number of star to display
    decimalLength : 0, // number of decimals.. Max 3, but you can complete the function 'getNote'
    rateMax : 20, // maximal rate - integer from 0 to 9999 (or more)
    rateInfosX : -45, // relative position in X axis of the info box when mouseover
    rateInfosY : 5, // relative position in Y axis of the info box when mouseover

    /** Functions **/
    onSuccess : null,
    onError : null
    };

    if(this.length>0)
    return this.each(function() {
    var opts = $.extend(defaults, op),
    newWidth = 0,
    starWidth = 0,
    starHeight = 0,
    bgPath = '';

    if($(this).hasClass('jDisabled') || opts.isDisabled)
    var jDisabled = true;
    else
    var jDisabled = false;

    getStarWidth();
    $(this).height(starHeight);

    var average = parseFloat($(this).attr('data').split('_')[0]),
    idBox = parseInt($(this).attr('data').split('_')[1]), // get the id of the box
    widthRatingContainer = starWidth*opts.length, // Width of the Container
    widthColor = average/opts.rateMax*widthRatingContainer, // Width of the color Container

    quotient =
    $('<div>',
    {
    'class' : 'jRatingColor',
    css:{
    width:widthColor
    }
    }).appendTo($(this)),

    average =
    $('<div>',
    {
    'class' : 'jRatingAverage',
    css:{
    width:0,
    top:- starHeight
    }
    }).appendTo($(this)),

    jstar =
    $('<div>',
    {
    'class' : 'jStar',
    css:{
    width:widthRatingContainer,
    height:starHeight,
    top:- (starHeight*2),
    background: 'url('+bgPath+') repeat-x'
    }
    }).appendTo($(this));

    $(this).css({width: widthRatingContainer,overflow:'hidden',zIndex:1,position:'relative'});

    if(!jDisabled)
    $(this).bind({
    mouseenter : function(e){
    var realOffsetLeft = findRealLeft(this);
    var relativeX = e.pageX - realOffsetLeft;
    if (opts.showRateInfo)
    var tooltip =
    $('<p>',{
    'class' : 'jRatingInfos',
    html : getNote(relativeX)+' <span class="maxRate">/ '+opts.rateMax+'</span>',
    css : {
    top: (e.pageY + opts.rateInfosY),
    left: (e.pageX + opts.rateInfosX)
    }
    }).appendTo('body').show();
    },
    mouseover : function(e){
    $(this).css('cursor','pointer');
    },
    mouseout : function(){
    $(this).css('cursor','default');
    average.width(0);
    },
    mousemove : function(e){
    var realOffsetLeft = findRealLeft(this);
    var relativeX = e.pageX - realOffsetLeft;
    if(opts.step) newWidth = Math.floor(relativeX/starWidth)*starWidth + starWidth;
    else newWidth = relativeX;
    average.width(newWidth);
    if (opts.showRateInfo)
    $("p.jRatingInfos")
    .css({
    left: (e.pageX + opts.rateInfosX)
    })
    .html(getNote(newWidth) +' <span class="maxRate">/ '+opts.rateMax+'</span>');
    },
    mouseleave : function(){
    $("p.jRatingInfos").remove();
    },
    click : function(e){
    $(this).unbind().css('cursor','default').addClass('jDisabled');
    if (opts.showRateInfo) $("p.jRatingInfos").fadeOut('fast',function(){$(this).remove();});
    e.preventDefault();
    var rate = getNote(newWidth);
    average.width(newWidth);

    /** ONLY FOR THE DEMO, YOU CAN REMOVE THIS CODE **/
    $('.datasSent p').html('<strong>idBox : </strong>'+idBox+'<br /><strong>rate : </strong>'+rate+'<br /><strong>action :</strong> rating');
    $('.serverResponse p').html('<strong>Loading...</strong>');
    /** END ONLY FOR THE DEMO **/

    $.post(opts.phpPath,{
    idBox : idBox,
    rate : rate,
    action : 'rating'
    },
    function(data) {
    if(!data.error)
    {
    /** ONLY FOR THE DEMO, YOU CAN REMOVE THIS CODE **/
    $('.serverResponse p').html(data.server);
    /** END ONLY FOR THE DEMO **/


    /** Here you can display an alert box,
    or use the jNotify Plugin :) http://www.myqjqueryplugins.com/jNotify
    exemple : */
    if(opts.onSuccess) opts.onSuccess();
    }
    else
    {

    /** ONLY FOR THE DEMO, YOU CAN REMOVE THIS CODE **/
    $('.serverResponse p').html(data.server);
    /** END ONLY FOR THE DEMO **/

    /** Here you can display an alert box,
    or use the jNotify Plugin :) http://www.myqjqueryplugins.com/jNotify
    exemple : */
    if(opts.onError) opts.onError();
    }
    },
    'json'
    );
    }
    });

    function getNote(relativeX) {
    var noteBrut = parseFloat((relativeX*100/widthRatingContainer)*opts.rateMax/100);
    switch(opts.decimalLength) {
    case 1 :
    var note = Math.round(noteBrut*10)/10;
    break;
    case 2 :
    var note = Math.round(noteBrut*100)/100;
    break;
    case 3 :
    var note = Math.round(noteBrut*1000)/1000;
    break;
    default :
    var note = Math.round(noteBrut*1)/1;
    }
    return note;
    };

    function getStarWidth(){
    switch(opts.type) {
    case 'small' :
    starWidth = 12; // width of the picture small.png
    starHeight = 10; // height of the picture small.png
    bgPath = opts.smallStarsPath;
    break;
    default :
    starWidth = 23; // width of the picture stars.png
    starHeight = 20; // height of the picture stars.png
    bgPath = opts.bigStarsPath;
    }
    };

    function findRealLeft(obj) {
    if( !obj ) return 0;
    return obj.offsetLeft + findRealLeft( obj.offsetParent );
    };
    });

    }
    })(jQuery);[/js]
     
  4. rainarr

    rainarr Активный пользователь

    С нами с:
    20 ноя 2010
    Сообщения:
    276
    Симпатии:
    0
    это, простите, копипаст хД
     
  5. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    969
    Симпатии:
    2
    не могу добиться размещения реетинга по центру, сами звездочки смещаются... помогите плз, у меня уже сил нет.
     
  6. rainarr

    rainarr Активный пользователь

    С нами с:
    20 ноя 2010
    Сообщения:
    276
    Симпатии:
    0
    попробуй сохранить сайт браузером и выложить все что сохранится сюда
     
  7. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    969
    Симпатии:
    2
    а по другому div никак не сделать по центру? уже незнаю где что править :( как в css сделать по центру?
     
  8. rainarr

    rainarr Активный пользователь

    С нами с:
    20 ноя 2010
    Сообщения:
    276
    Симпатии:
    0
    я конешно хотел спросить совсем другое, но

    <div style="margin: 0 auto;"></div>
    <div style="text-align: center;"></div>

    попробуй то и то
     
  9. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    969
    Симпатии:
    2
    rainarr
    так тоже не работает к сожалению.
     
  10. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Sofia
    засунь див в див =)
     
  11. rainarr

    rainarr Активный пользователь

    С нами с:
    20 ноя 2010
    Сообщения:
    276
    Симпатии:
    0
    или
    table width="10%"
     
  12. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    969
    Симпатии:
    2
  13. rainarr

    rainarr Активный пользователь

    С нами с:
    20 ноя 2010
    Сообщения:
    276
    Симпатии:
    0
    у меня мозг взорвался, реально :DD

    что за style="test" ?
    То что я пишу - должно работать, проблема в правильном применении. А хтмл код я уже просил выложить, не ужели это так сложно что проще сделать видео и в нем показать хрен знает чо?
     
  14. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    969
    Симпатии:
    2
  15. rainarr

    rainarr Активный пользователь

    С нами с:
    20 ноя 2010
    Сообщения:
    276
    Симпатии:
    0
    ещё как важно. ибо не существует такого стиля "test"
     
  16. sobachnik

    sobachnik Старожил

    С нами с:
    20 апр 2007
    Сообщения:
    3.380
    Симпатии:
    13
    Адрес:
    Дмитров, МО
    Наверно, имелось ввиду class="test" :)
     
  17. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    969
    Симпатии:
    2
    а, ну да, class... сбили меня тоже с толку... конечно же class... всеравно не работает.
     
  18. rainarr

    rainarr Активный пользователь

    С нами с:
    20 ноя 2010
    Сообщения:
    276
    Симпатии:
    0
    работает, ну да ладно, удалюсь с темы :(
     
  19. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Sofia
    ссылку дай, без фаербага тут никак.
     
  20. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    969
    Симпатии:
    2
    rainarr ну как работает? покажи код как работает.
    igordata какую ссылку и куда, что такое фаербага?
     
  21. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Sofia
    уууууууу.... как все запущено...
     
  22. Sofia

    Sofia Активный пользователь

    С нами с:
    25 сен 2008
    Сообщения:
    969
    Симпатии:
    2
    блин, уже который день мучаюсь с этими звездочками, а они все никак не хотят по центру ставиться.
     
  23. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    злые звездочки! злые! *хнык*