Blogger Post Like And Dislike Count System On Firebase
ဒါကတော့ Blogger Post တခုချင်းစီအတွက် Like and Dislike Count System တခုကိုဖန်တီးပြသပေးမှာဖြစ်ပါတယ်။အသုံးပြုလိုသူများအောက်ကလုပ်ဆောင်ပုံအဆင့်ဆင့်ကိုလိုက်ပါလုပ်ဆောင်လိုက်ရုံဖြင့်ကိုယ်တိုင်ကိုယ်ကျဖန်တီးပြီးသားဖြစ်သွားမှာပါ။အောက်တွင်အကြံပြုချက်များသတိပေးချက်များလဲအနည်းငယ်ပါဝင်ပါလိမ့်မည်။အသုံးပြုသူတယောက်စီတိုင်းရဲ့အကြိုက်ချင်းမတူနိုင်သောကြောင့်အချို့အပိုင်းများအားချန်လှပ်ထားခဲ့သည်။
စတင်တည် ဆောက်ရန်အတွက် အောက်က link ကိုနှိပ်ပါ။
- https://firebase.google.com
- Get started in console (or) Go to console ကိုနှိပ်
- Create a new Firebase project ကိုနှိပ်
- Project name ကိုကြိုက်နှစ်သက်သလိုရေးပါ
Continueကိုနှိပ်Continueကိုနှိပ်Continueကိုနှိပ်- Select an account ကိုနှိပ်
- Create a new account ကိုနှိပ်
- firebase project name ထည့်ပေးပါ
saveကိုနှိပ်- l accept the Google Analytics terms ကိုအမှန်ခြစ်
Create Projectကိုနှိပ်Continueကိုနှိပ်- ➕ Add app ကိုနှိပ်
- </> ကိုနှိပ်
- My Web app နေရာမှာ project name ထည့်ရေးပေးပါ
- Also set up Firebase Hosting for this app ကိုအမှန်ခြစ်ပါ
- မိမိ project name မှန်မမှန်စစ်ဆေး ပေးပါ
Register appကိုနှိပ်- Use a <script> tag ရွေး
- Copy အိုင်ကွန်ကိုနှိပ်၍အဲဒီ SDK Code တွေကို copy ကူးယူထားပါ။ copy ကူးယူထား သော code များကိုတ နေရာတွင်ခဏမှတ်သားထားပါ။အရေးကြီးသည်ထို code များသည်မိမိ Template တွင်ထည့်သွင်းအသုံးပြုရမဲ့ code များဖြစ် သော ကြောင့်ပါ
Nextကိုနှိပ်Nextကိုနှိပ်Continue to consoleကိုနှိပ်- Menu ဘားကိုနှိပ်
- Build ကိုနှိပ်
- Firestore Database ကိုနှိပ်
Create Databaseကိုနှိပ်Nextကိုနှိပ်Nextကိုနှိပ်- Start in test mode ရွေး
- Create ကိုနှိပ်
- + Start collection ကိုနှိပ်
- Collection ID နေရာမှာ
postsအဖြစ်သတ်မှတ်၍ရေးပါNextကိုနှိပ်
- Document ID နေရာမှာ
postIdအဖြစ်သတ်မှတ်၍ရေးပါ။အောက်ကပုံစံအတိုင်း Field ကိုသတ်မှတ်၍ရေးပါ။- FieldTypeValue
- like=
number0 dislike=number0
- like=
- + Add field ကိုနှိပ်၍ dislike အတွက် field အသစ်ဖန်တီးပါ
- Collection ID နေရာမှာ
saveကိုနှိပ်- Rules ကိုနှိပ်
- အောက်က code များထဲမှကြိုက်နှစ်သက်ရာကို copy ယူ၍ထည့်ပါ
Normal(ပုံမှန်)အကန့်အသန့်မရှိ vote ပေးစေချင်ရင်
Local storage user IDဖြင့်ကန့်သတ်ခြင်း(user တစ်ဦးကိုတစ်ကြိမ်သာ vote လုပ်ခွင့် ပေးစေချင်ရင်)
Authentication သုံး၍ Firebase Login ဖြင့်သာ vote လုပ်စေချင်ရင်လဲလုပ်လို့ရပါသည်။လုပ် ဆောင်ရန်အဆင့်ဆင့်ကိုလမ်းညွှန်ပြသပေးနိုင်ပါသည်။
rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /posts/{postId} { allow read: if true; allow create, update: if request.resource.data.keys().hasOnly(["likes", "dislikes"]) && request.resource.data.likes is int && request.resource.data.dislikes is int && request.resource.data.likes >= 0 && request.resource.data.dislikes >= 0; allow delete: if false; } } }rules_version = '2'; service cloud.firestore { match /databases/{database}/documents { match /posts/{postId} { allow read: if true; allow create: if request.resource.data.keys().hasOnly(["likes","dislikes","voters"]); allow update: if request.resource.data.keys().hasOnly(["likes","dislikes","voters"]); } } } - Publish ကိုနှိပ်
- Data ကိုနှိပ်ပါ။ပြီးပြီ။HTML-CSS-JavaScript code များထည့်သွင်းရန်အသုံးပြုမည့် blog site သို့သွားပါ
- dashboard ထဲက Theme ကိုနှိပ်
- HTML🔻ကိုနှိပ်
- <data.post.body/> ရှာပါ(သတိ - template တခုနှင့်တစ်ခုမတူသဖြင့် <data.post.body/> သည်တခုထက်ပို၍ရှိနိုင်သည်။နောက်ဆုံး <data.post.body/> အောက်တွင် အောက်က code ကို copy ယူ၍ထည့်ပါ
<div class='like-dislike' expr:data-post-id='data:post.id'>
<button class='like-btn'><i class='fa fa-thumbs-up'/> <span class='like-count'>0</span></button>
<button class='dislike-btn'><i class='fa fa-thumbs-down'/> <span class='dislike-count'>0</span></button>
</div>
- </body>ရှာပါ။တွေ့ပြီဆိုရင်အောက်က css & sdk code ကို copy ယူ၍အဲဒီ</body> အပေါ်ကနေထည့်ပါ။
<style>
.like-dislike {display: flex;justify-content: center;cursor: pointer;gap: 12px;margin-top: 15px;}
.like-dislike button {background: #f5f5f5;border: 2px solid #ddd;border-radius: 25px;padding: 8px 16px;font-size: 18px;cursor: pointer;transition: all 0.3s ease;display: flex;align-items: center;gap: 6px;}
.like-dislike button:hover { background: #e9e9e9;border-color: #bbb;}
.like-btn {color: #2e7d32;}
.like-btn:hover {background: #c8e6c9;}
.dislike-btn {color: #c62828;}
.dislike-btn:hover {background: #ffcdd2;}
.like-count, .dislike-count {font-weight: bold;}
</style>
<script src='https://www.gstatic.com/firebasejs/9.23.0/firebase-app-compat.js'/>
<script src='https://www.gstatic.com/firebasejs/9.23.0/firebase-firestore-compat.js'/>
<script>
//<![CDATA[
const firebaseConfig = {
apiKey: "Your_API_Key_Here",
authDomain: "Your_Name_Here",
projectId: "Your_ProjectId_Here",
storageBucket: "Your_Link_Here",
messagingSenderId: "Your_Id_Here",
appId: "Your_App_Id_Here"
};
// Initialize Firebase
firebase.initializeApp(firebaseConfig);
const db = firebase.firestore();
//]]></script>
- </body>ရှာပါ။တွေ့ပြီဆိုရင်အောက်က js code များထဲကမှကြိုက်နှစ်သက်ရာကို copy ယူ၍အဲဒီ</body> အပေါ်ကနေထည့်ပါ။
- Normal(ပုံမှန်)အကန့်အသန့်မရှိ vote လုပ်စေချင်ရင်
- Localstorage User ID ဖြင့်ကန့်သတ်ခြင်း(user တစ်ဦးကိုတစ်ကြိမ်သာ vote လုပ်ခွင့်ပြုခြင်း
<script>//<![CDATA[
document.addEventListener("DOMContentLoaded", () => {
const postContainer = document.querySelector(".like-dislike");
if (!postContainer) return;
const postId = postContainer.getAttribute("data-post-id");
const postRef = db.collection("posts").doc(postId);
const likeBtn = postContainer.querySelector(".like-btn");
const dislikeBtn = postContainer.querySelector(".dislike-btn");
const likeCountEl = postContainer.querySelector(".like-count");
const dislikeCountEl = postContainer.querySelector(".dislike-count");
postRef.onSnapshot((doc) => {
if (doc.exists) {
likeCountEl.textContent = doc.data().likes || 0;
dislikeCountEl.textContent = doc.data().dislikes || 0;
} else {
likeCountEl.textContent = 0;
dislikeCountEl.textContent = 0;
}
});
likeBtn.addEventListener("click", () => {
db.runTransaction((t) => {
return t.get(postRef).then((doc) => {
if (!doc.exists) {
t.set(postRef, { likes: 1, dislikes: 0 });
} else {
t.update(postRef, { likes: (doc.data().likes || 0) + 1 });
}
});
}).catch((err) => console.error("Like error:", err));
});
dislikeBtn.addEventListener("click", () => {
db.runTransaction((t) => {
return t.get(postRef).then((doc) => {
if (!doc.exists) {
t.set(postRef, { likes: 0, dislikes: 1 });
} else {
t.update(postRef, { dislikes: (doc.data().dislikes || 0) + 1 });
}
});
}).catch((err) => console.error("Dislike error:", err));
});
});
//]]>
</script>
<script>//<![CDATA[
function getUserId() {
let id = localStorage.getItem("likeUserId");
if (!id) {
id = "uid-" + Math.random().toString(36).substr(2, 9);
localStorage.setItem("likeUserId", id);
}
return id;
}
const postDiv = document.querySelector(".like-dislike");
const postId = postDiv.getAttribute("data-post-id");
const postRef = db.collection("posts").doc(postId);
function handleVote(type) {
const userId = getUserId();
db.runTransaction((t) => {
return t.get(postRef).then((doc) => {
let data = doc.data() || { likes: 0, dislikes: 0, voters: {} };
if (data.voters , data.voters[userId]) {
throw "Already voted";
}
if (type === "like") {
data.likes++;
} else {
data.dislikes++;
}
data.voters[userId] = true;
t.set(postRef, data);
});
}).catch((err) => console.log(err));
}
postRef.onSnapshot((doc) => {
if (doc.exists) {
const data = doc.data();
document.querySelector(".like-count").textContent = data.likes || 0;
document.querySelector(".dislike-count").textContent = data.dislikes || 0;
}
});
document.querySelector(".like-btn").addEventListener("click", () => handleVote("like"));
document.querySelector(".dislike-btn").addEventListener("click", () => handleVote("dislike"));
//]]></script>
အောက်မှာပြသထားသောနေရာများတွင်မိမိ firebase console မှ copy ကူးယူထားသော SDK code များဖြင့်အစားထိုးပါ။ပြီးပြီ။
- apiKey:
Your_API_Key_Here - authDomain:
Your_Name_Here - projectId:
Your_ProjectId_Here - storageBucket:
Your_Link_Here - messagingSenderId:
Your_Id_Here - appId:
Your_App_Id_Here
