In this tutorial, we’ll dive into an exciting feature for your Wix site by integrating the Wix Realtime API. This case study shows how to implement a dynamic "heart" or "like" system where users can click on an icon to express their appreciation for items, and the count is updated in real-time across different views, such as the logged-in user and incognito window.
What We'll Be Creating
We’ll build a heart count system where:
Users can click on an icon (heart) to like an item.
The number of hearts is displayed in real-time across the site, even for users not logged in.
The heart count updates dynamically for both repeaters and item pages.
We’ll ensure this functionality works seamlessly for both logged-in users and those browsing in incognito mode.
Step 1: Understanding the Basics
Our first goal is to track how many people have clicked the heart icon on a specific item. We will use Wix's real-time API to ensure that whenever a user likes or unlikes an item, the changes are reflected in real-time across the site.
For example:
When you click the heart icon, it recalculates and updates the heart count for all visitors.
This feature works for both logged-in users and anonymous visitors in incognito windows.
Step 2: Setting Up the CMS Collection
Before we jump into the code, let’s refresh your memory on the CMS collection we’re using. The collection stores details about the items, including which users have clicked the heart and the total heart count.
Members Field: Stores the IDs of users who have liked the item.
Heart Count: Keeps track of the total number of likes.
Ensure that your collection has these fields in place before proceeding.
Step 3: Setting Up the Dynamic Page
We’ll begin by adding an item page to display the heart icon and its current count.
Add a Dynamic Page: This will allow us to display different items dynamically.
Copy the Heart Icon and Counter: From the repeater page, copy the heart icon and heart count text element to your dynamic page.
Style Adjustments: Adjust the icon and text styles as needed to ensure visibility.
Step 4: Connecting to the CMS
Now, let's connect the heart count text element to the CMS so that it dynamically reflects the total number of likes for each item.
Connect the text element displaying the count to the "Heart Count" field in the CMS.
Key Features of the Code:
Real-Time Updates: We use subscribe to listen for updates on the heartChannel. When a user clicks the heart icon, the total heart count updates in real-time across all sessions.
Authentication Check: Only logged-in users can like an item. If not logged in, the user is prompted to log in.
Dynamic Data: The code pulls data from the CMS, such as the heart count and the array of users who have already liked the item.
Publishing Messages: When a user likes or unlikes an item, the updated heart count is published to the real-time channel, ensuring instant updates across all views.
Step 6: Linking the Repeater to the Dynamic Page
To enhance navigation, we link the heart icons on the repeater page to their respective dynamic item pages. This ensures that when a user clicks on a heart in the repeater, they are directed to the item’s detail page where they can also like the item.
Step 7: Testing the Feature
Once you've set everything up:
Test the heart count feature by liking/unliking items in both logged-in and incognito modes.
Verify that the heart count updates in real-time on all relevant views.
Final Thoughts
Now you know how to implement a real-time heart count system on your Wix site! This feature adds interactivity and real-time engagement for users, whether they are logged in or browsing anonymously. If you have any questions or want to see more tutorials like this, leave a comment, subscribe, and smash the like button!
Code
Leave a comment (0)
Thanks for leaving a comment🎉
ahmed
May 19, 2024
wix form data
Hi i need your help also in wix form submission
the problem is that some fields are generated when $w.onReady(function () { like day & date and when i choose the student name i get the phone number from database .
and the form save only the field u fill it by ur self like input or dropdown
Reply
Walter Odibi
January 20, 2000
bromar
Sep 29, 2023
Love the tutorial!!!
You are truly great at creating these instructional videos!! Thank you! I am having trouble figuring out . . 'the triggered email' . . it is not being sent to the user submitting the form, the form and the email to the admin works great. . Could you point me to where this might have already been addressed? or any other help? On a second note. .the submit button success/failure message will go back to the default message once it's connected to the data set(I couldn't figure that out either. )
Reply
Walter Odibi
January 20, 2000
kaan
Jun 4, 2023
wishlist and rating system
hello sir I try today 2 hours but not working if you want I pay money can you do this 2 ( wishlist and rating star) system please I send to you invaid
Reply
Walter Odibi
January 20, 2000
Hi there, you can contact me here using the in-app chatbox
Waqas
Apr 16, 2023
Triggered Email Backend
Hi mate please can you send email by backend
Reply
Walter Odibi
January 20, 2000
Hi Waqas, there isn't a backend code for this tutorial. The emails will be sent from the client-side.
Ghan
Dec 29, 2022
Great Tutorial
Hi !
First of all, I want to thank you for your great tutorials, they helped us a lot with the coding.
But I still need your help, if you don't mind. I have based on Save Calculated Field using Wix Data Hooks Codes, to code my form . but the problem is I don't know why the code only reads the computation for "week2" computation and not the "weeks"
here is the code
I also did a separate column in the dataset where the chosen datas for both fields will be placed.
$w.onReady (() => {
$w("#Person").onChange(() => {
$w("#weeks").onChange(() => {
$w("#week2").onChange(() => {
let person = Number($w("#Person").value);
let weeks = Number($w("#weeks").value);
let week2 = Number($w("#week2").value);
$w("#totalLabel").show();
$w("#totalLabel").text = `"${String(weeks * Number(person))}페소"`; //DESIGN YOUR MESSAGE
$w("#totalLabel").text = `"${String(week2 * Number(person))}페소"`; //DESIGN YOUR MESSAGE
});
});
});
});
Reply
Walter Odibi
January 20, 2000
Hi there, thanks for your comment. I see why this is a problem. The onChange() function seems wrong in combination.
To combine onChangeFunctions use this method
$w("#Person, #weeks, #weeks2").onChange(() => {
//code here
});
Walter
Aug 8, 2022
More Details? Watch video
Hi, you can click here to watch the video https://www.youtube.com/watch?v=9bx7-nBeZ5c
Reply
Walter Odibi
January 20, 2000
Walter
Jul 11, 2022
For you
📺 WATCH THE VIDEO https://www.youtube.com/watch?v=AgPJEU8wpp0
Reply
Walter Odibi
January 20, 2000
Walter Odibi
Apr 18, 2022
Awesome Feature
This tutorial shows you how to display views on your Wix repeater.
📺WATCH VIDEO HERE https://www.youtube.com/watch?v=Iz7SdaCSdXg
Reply
Walter Odibi
January 20, 2000
Walter Odibi
Apr 18, 2022
Amazing tutorial
This amazing tutorial will show you how to a comment section to your WIX dynamic page.
📺WATCH VIDEO HERE https://www.youtube.com/watch?v=f8-vJQFNZ_c
Reply
Walter Odibi
January 20, 2000
Walter Odibi
Apr 10, 2022
Great Feature🎉
This amazing tutorial will show you how to add a visitor view counter to your WIX dynamic page.
🚩MORE TUTORIALS https://www.wixgenius.com/wix-tutorials
Reply
Walter Odibi
January 20, 2000