0

jquery ui ウィジェットの星評価を使用しています。クエリがエコーした後、すべての星が一緒に表示されます (クエリに 2 つ以上のレビューがある場合は間違った量ですが、クエリに 1 つのレビューしかない場合はすべて正しいです)。

コードは次のとおりです。

この関数は、最初に数字の 1 を配列に割り当てて、どの星が満たされているかを認識します。

  function get_stars ($rating) {
    if( $rating == 0 ) $rating = 1;
    $ratings_array = array_fill (1, 5, 0);
    for ($index=(int)$rating; $index>0; $index--) {
      $ratings_array[$index] = 1;
    }
    return $ratings_array;
  }

エコーしてphpmyadminで直接試して、動作することを確認したクエリ:

select r.reviews_id, rd.reviews_text, r.reviews_rating, r.date_added, r.customers_name from reviews r join reviews_description rd on rd.reviews_id = r.reviews_id where r.products_id = '40' and rd.languages_id = '1' and reviews_status = '1' order by r.reviews_id DESC

2行を出力します。想定どおりの 5 列: reviews_id reviews_text reviews_rating date_added customers_name

クエリを使用した完全な while ループと、エコーされるテーブルを次に示します。

                <table border=0 cellspacing=0 cellpadding=0><tbody>
<?php
    if (SPECIFICATIONS_MAX_REVIEWS > '0') {
      $reviews_count_query_raw = "
        select
          count(*) as count
        from
          " . TABLE_REVIEWS . "
        where
          products_id = '" . (int) $_GET['products_id'] . "'
          and reviews_status = '1'
      ";
      // print 'Count Query: ' . $reviews_count_query_raw . '<br>';
      $reviews_count_query = tep_db_query ($reviews_count_query_raw);
      $reviews = tep_db_fetch_array ($reviews_count_query);

      $reviews_query_average_raw = "
        select
          (avg(reviews_rating)) as average_rating
        from
          " . TABLE_REVIEWS . "
        where
          products_id = '" . (int) $_GET['products_id'] . "'
          and reviews_status = '1'
      ";
      // print 'Average Query: ' . $reviews_query_average_raw . '<br>';
      $reviews_query_average = tep_db_query ($reviews_query_average_raw);
      $reviews_average = tep_db_fetch_array ($reviews_query_average);
      $reviews_stars = $reviews_average['average_rating'];

      $reviews_query_raw = "
        select
          r.reviews_id,
          rd.reviews_text,
          r.reviews_rating,
          r.date_added,
          r.customers_name
        from
          " . TABLE_REVIEWS . " r
          join " . TABLE_REVIEWS_DESCRIPTION . " rd
            on rd.reviews_id = r.reviews_id
        where r.products_id = '" . (int) $_GET['products_id'] . "'
          and rd.languages_id = '" . $languages_id . "'
          and reviews_status = '1'
        order by r.reviews_id DESC
      ";
      // print $reviews_query_raw . '<br>';
      $reviews_query = tep_db_query( $reviews_query_raw );
      $num_rows = tep_db_num_rows( $reviews_query );
    echo $reviews_query_raw;
      if ($num_rows > 0) {
        $row = 0;
        while ($reviews = tep_db_fetch_array ($reviews_query)) {
          if ($row < SPECIFICATIONS_MAX_REVIEWS) {
            $row++;
            $date_added = tep_date_short ($reviews['date_added']);
// Show product reviews
?>
                      <tr>
                        <td class="main">

<?php 

                    $rating = get_stars($reviews['reviews_rating']);
                    echo  tep_draw_radio_field ('rating', '1', $rating[1], 'class="star" disabled="disabled"') .
                    ' ' . tep_draw_radio_field ('rating', '2', $rating[2], 'class="star" disabled="disabled"') .
                    ' ' . tep_draw_radio_field ('rating', '3', $rating[3], 'class="star" disabled="disabled"') .
                    ' ' . tep_draw_radio_field ('rating', '4', $rating[4], 'class="star" disabled="disabled"') .
                    ' ' . tep_draw_radio_field ('rating', '5', $rating[5], 'class="star" disabled="disabled"') .
                      sprintf (TEXT_REVIEW_BY, tep_output_string_protected ($reviews['customers_name']) ) .  ', ' .
                          tep_date_long ($reviews['date_added']);

?>
                        </td>
                      </tr>
                      <tr>
                        <td valign="top" class="main">
<?php
            echo tep_break_string (tep_output_string_protected ($reviews['reviews_text']), 60, '<br>') . ( (strlen ($reviews['reviews_text']) >= 100) ? '<br>' : '') .
                                   '... &nbsp; &nbsp;' .
                                   '<a href="' . tep_href_link (FILENAME_PRODUCT_REVIEWS_INFO, 'products_id=' . $product_info['products_id'] . '&reviews_id=' . $reviews['reviews_id']) . '">' .
                                   'Read Full Review</a>';
?>
                        </td>
                      </tr>
<?php
           } // if ($row
         } // while ($reviews
?>
                      <tr>
                        <td><?php echo tep_draw_separator ('pixel_trans.gif', '100%', '10'); ?></td>
                      </tr>
<?php
       } // if ($num_rows
     } // if (SPECIFICATIONS_MAX_REVIEWS

?>
                      <tr>
                        <td><?php echo tep_draw_separator ('pixel_trans.gif', '100%', '10'); ?></td>
                      </tr>
                    </tbody></table>
<?php

最終結果は次のようになります。

http://i.imgur.com/LQyGtHG.png

1 つのレビューは 5 つ星で、もう 1 つのレビューは 2 つ星です。したがって、それは開始の正しい量でさえありませんが、それらを一緒にマージすることでもあります。

ただし、この場合、2 つ星のアクティブなレビューが 1 つしかない場合は、完全に機能します。

http://i.imgur.com/zipoGqR.png

これがウィジェットです: http://www.fyneworks.com/jquery/star-rating/

4

0 に答える 0