This tutorial shows you how you can capture and display ratings of your items from your visitors. You will set up a Ratings Display element to display the current average rating and the total number of ratings. Then using a Ratings Input element, you'll capture your visitor's rating, calculate the new average rating and total number of ratings, and then update the collection and the Ratings Display element with the new values.
You'll need a collection with items you want to let your visitors rate and a page with a dataset connected to that collection.
This tutorial has 3 parts:
This section covers what you need to prepare in your collection and what you need to do in your page in the editor.
This section has 2 parts. The first part shows you how to add the event handler to the Ratings Input element. The second part has the actual code that you can copy and paste onto your page.
An event handler adds code that only runs when your visitor performs a certain action. In our code, we used the "onChange" event, so that the rating is saved when our visitor makes their selection in the Ratings Input.
To add the event handler:
Select your Ratings Input.
In the Properties & Events panel, click the "onChange" event handler.
The code for the event handler is added to the bottom of your page code. The image below shows what it looked like on our page.
First we read the current item from the dataset. Then we define variables called average
, count
and total
, and set their values to be the item's current average rating, number of ratings, and the sum of all the ratings.
We define a variable called newRating
and set its value to be the rating selected by the user in the Ratings Input.
const newRating = Number($w('#ratingsInput1').value);
Next we calculate the updated average rating and save it to a variable called newAverageLong
. We then round the results to 1 decimal place and assign it to the variable newAvergeShort
.
Now we save the new average rating, sum of all the ratings, and total number of ratings to the current item. We include code to deal with errors should they occur.