как пересчитать php varaible и отправить обратно через ajax - PullRequest
1 голос
/ 23 марта 2020

Для системы голосования с плоскими файлами я использую это php (в index.php) для подсчета подсчетов:

$rating_file = 'rating/'.$file_id.'.txt'; // path to text rating_file that stores counts
$all_lines = file($rating_file, FILE_IGNORE_NEW_LINES);

foreach($all_lines as $line) {
    list($item, $num) = explode('||', $line);
    $count[$item] = $num;
}
if(array_sum($count) != 0){
    $avg = number_format(($count['star-1']*1 + $count['star-2']*2 + $count['star-3']*3 +    $count['star-4']*4 + $count['star-5']*5) / array_sum($count),2,'.','');
    $intVal = intval($avg);
    $round = ($avg - $intVal < .5) ? $intVal : round($intVal).'.5';
} 
else {
    $avg = $round = 0;
}

Мой html в index.php выглядит следующим образом:

<div class="rating" data-rating="<?php echo $round;?>">
    <div class="rating-stars float-left" data-id="<?php echo $file_id; ?>">
        <a href="#5" class="click-trigger star-5" data-value="star-5" title="Vote 5 stars">&#x2605 </a>
        <a href="#4" class="click-trigger star-4" data-value="star-4" title="Vote 4 stars">&#x2605 </a>
        <a href="#3" class="click-trigger star-3" data-value="star-3" title="Vote 3 stars">&#x2605 </a>
        <a href="#2" class="click-trigger star-2" data-value="star-2" title="Vote 2 stars">&#x2605 </a>
        <a href="#1" class="click-trigger star-1" data-value="star-1" title="Vote 1 star">&#x2605 </a>
    </div>
    <div class="rating-votes float-right">
        Avg: <?php echo $avg;?> Votes: <?php echo array_sum($count);?>
    </div>              
</div>

Я отправляю значение с ajax в php файл: counter.php

$('.click-trigger').on('click', function(e) {
    e.preventDefault();

    let $star = $(this);
    let $container = $star.closest('.rating-stars');
    $.ajax({
        url: 'counter.php',
        type: 'POST',
        data: { 
                value: $star.data('value'),
                file_id: $container.data('id')      
            },
        success: function(data){
            $container.next('.rating-votes').html(data);

        }
    });

});

Часть кода в counter.php

......
$round = ($avg - $intVal < .5) ? $intVal : round($intVal).'.5';

// sent back to page
echo 'Avg: '.number_format($avg,2,'.','').' Votes: '.array_sum($count); 

Для рефракции sh на html требуется новое значение переменной $round, которое находится в counter.php. Как я могу перефразировать sh код html (div со звездами) в index. php, не выполняя жесткую ссылку sh?

1 Ответ

1 голос
/ 23 марта 2020

Вы можете отправить весь div обратно index.php. Таким образом, ваш код в counter.php будет:

.....
$round = ($avg - $intVal < .5) ? $intVal : round($intVal).'.5';
?>
<!-- rating stars; send back to page index.php -->
<div class="rating" data-rating="<?php echo $round; ?>">
    <div class="rating-stars float-left" data-id="<?php echo $file_id; ?>">
        <a href="#5" class="click-trigger star-5" data-value="star-5" title="Vote 5 stars">&#x2605 </a>
        <a href="#4" class="click-trigger star-4" data-value="star-4" title="Vote 4 stars">&#x2605 </a>
        <a href="#3" class="click-trigger star-3" data-value="star-3" title="Vote 3 stars">&#x2605 </a>
        <a href="#2" class="click-trigger star-2" data-value="star-2" title="Vote 2 stars">&#x2605 </a>
        <a href="#1" class="click-trigger star-1" data-value="star-1" title="Vote 1 star">&#x2605 </a>
    </div>
    <div class="rating-votes float-right">
        Avg: <?php echo $avg; ?> Votes: <?php echo array_sum($count); ?>
    </div>              
</div>

А в вас success handler:

success: function(data){
            $container.closest('here your parent div of class .rating').html(data);                      
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...