Blogger Post Clap Count System On Firebase
ဒါကတော့ Blogger Post တခုချင်းစီအတွက် Clap 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
Count=number0
- Collection ID နေရာမှာ
saveကိုနှိပ်- Rules ကိုနှိပ်
- အောက်က code ကို copy ယူ၍ထည့်ပါ
rules_version = '2';
service cloud.firestore {
match /databases/{database}/documents {
match /posts/{postId} {
allow read, write: if true;
}
match /{document=**} {
allow read, write: if false;
}
}
}
- 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='wrap-center'>
<div class='post' expr:data-post-id='data:post.id'>
<button aria-label='Clap' class='claps_button'>
<!-- Clap SVG icon -->
<svg class='clap-icon' fill='currentColor' viewBox='0 0 33 33'><path d='M28.86 17.342l-3.64-6.402c-.292-.433-.712-.729-1.163-.8a1.124 1.124 0 0 0-.889.213c-.63.488-.742 1.181-.33 2.061l1.222 2.587 1.4 2.46c2.234 4.085 1.511 8.007-2.145 11.663-.26.26-.526.49-.797.707 1.42-.084 2.881-.683 4.292-2.094 3.822-3.823 3.565-7.876 2.05-10.395zm-6.252 11.075c3.352-3.35 3.998-6.775 1.978-10.469l-3.378-5.945c-.292-.432-.712-.728-1.163-.8a1.122 1.122 0 0 0-.89.213c-.63.49-.742 1.182-.33 2.061l1.72 3.638a.502.502 0 0 1-.806.568l-8.91-8.91a1.335 1.335 0 0 0-1.887 1.886l5.292 5.292a.5.5 0 0 1-.707.707l-5.292-5.292-1.492-1.492c-.503-.503-1.382-.505-1.887 0a1.337 1.337 0 0 0 0 1.886l1.493 1.492 5.292 5.292a.499.499 0 0 1-.353.854.5.5 0 0 1-.354-.147L5.642 13.96a1.338 1.338 0 0 0-1.887 0 1.338 1.338 0 0 0 0 1.887l2.23 2.228 3.322 3.324a.499.499 0 0 1-.353.853.502.502 0 0 1-.354-.146l-3.323-3.324a1.333 1.333 0 0 0-1.886 0 1.325 1.325 0 0 0-.39.943c0 .356.138.691.39.943l6.396 6.397c3.528 3.53 8.86 5.313 12.821 1.353z' fill-rule='evenodd'/>
</svg>
</button>
<span class='claps'>0</span>
</div>
</div>
- </body>ရှာပါ။တွေ့ပြီဆိုရင်အောက်က css & sdk & js code ကို copy ယူ၍အဲဒီ</body> အပေါ်ကနေထည့်ပါ။
<style>
:root {
--clap-size: 36px;
--clap-color: #ff8c42;
--clap-active-scale: 1.2;
--clap-duration: 180ms;}
.claps_button {display: inline-flex;align-items: center;justify-content: center;background: white;border: 1px solid #41B375;border-radius: 999px;padding: 8px;cursor: pointer;transition: transform 0.15s ease, box-shadow 0.2s ease;}
.claps_button:hover {box-shadow: 0 4px 12px rgba(0, 0, 0, 0.1);transform: translateY(-1px);}
.clap-icon {width: var(--clap-size);height: var(--clap-size);color: var(--clap-color);transition: transform var(--clap-duration) ease, filter var(--clap-duration) ease;will-change: transform, filter;}
.claps {display: inline-block;align-items:center;justify-content:center; padding:5px;color:#444;transition: transform 0.2s ease, color 0.2s ease;}
.claps_button.clicked .clap-icon {transform: scale(var(--clap-active-scale));filter: drop-shadow(0 3px 8px rgba(255, 140, 66, 0.4));}
.claps_button.clicked + .claps {color: var(--clap-color);transform: translateY(-3px);}
@media (max-width: 480px) {
:root {
--clap-size: 28px;}
.claps {
font-size: 14px;}
}
.wrap-center{display:flex;justify-content:center}
</style>
<script type='module'>
//<![CDATA[
import { initializeApp } from "https://www.gstatic.com/firebasejs/12.3.0/firebase-app.js";
import { getFirestore, doc, getDoc, setDoc, updateDoc, increment } from "https://www.gstatic.com/firebasejs/12.3.0/firebase-firestore.js";
const firebaseConfig = {
apiKey: "Your_API_Key_Here",
authDomain: "Your_AuthDomain_Here",
projectId: "Your_ProjectId_Here",
storageBucket: "Your_StorageBucket_Here",
messagingSenderId: "hYour_MessagingSenderId_Here",
appId: "Your_AppId_Here",
measurementId: "Your_MeasurementId_Here"
};
const app = initializeApp(firebaseConfig);
const db = getFirestore(app);
document.querySelectorAll(".post").forEach(async post => {
const postId = post.dataset.postId;
const button = post.querySelector(".claps_button");
const display = post.querySelector(".claps");
if (!postId) return;
const ref = doc(db, "posts", postId);
const snap = await getDoc(ref);
if (snap.exists()) {
display.innerText = "+" + snap.data().count;
} else {
await setDoc(ref, { count: 0 });
display.innerText = "+0";
}
button.addEventListener("click", async () => {
await updateDoc(ref, { count: increment(1) });
const updatedSnap = await getDoc(ref);
display.innerText = "+" + updatedSnap.data().count;
button.classList.add("is_clicked");
setTimeout(() => button.classList.remove("is_clicked"), 800);
});
});
//]]>
</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 - measurementId:
Your_MeasurementId_Here
