آموزش ساخت ابزار محاسبهگر میزان فیبر دریافتی از ترکیب روزانه خشکبار.
- محمد یاسر گنجی دوست
- No Comments
آموزش ساخت ابزار “محاسبهگر فیبر” برای سایت خشکبار: کدی که سلامت روده را میسنجد!
در دنیای تغذیه، فیبر (Fiber) دیگر یک کلمه خستهکننده نیست؛ بلکه کلید لاغری، سلامت قلب و درمان مشکلات گوارشی است. مشتری شما میداند که “انجیر” و “آلو” فیبر دارند، اما نمیداند چقدر؟ آیا خوردن ۳ عدد آلو کافی است؟ یا باید ۱۰ عدد بخورد؟
به عنوان یک طراح وب، اگر بتوانید ابزاری بسازید که کاربر در آن صبحانه و میانوعده خود را وارد کند و ببیند که “شما امروز فقط ۴۰٪ از نیاز فیبر خود را تأمین کردهاید”، یک نیاز ایجاد کردهاید. و بلافاصله راه حل را ارائه میدهید: “برای پر کردن ۶۰٪ باقیمانده، یک بسته چیپس سیب بخرید.”
در این راهنمای فنی، ما نحوه ساخت این ابزار تعاملی را با استفاده از HTML, CSS و JavaScript (بدون نیاز به افزونههای سنگین) یاد میگیریم.
فاز ۱: منطق و دادهها (The Data Core)
ما به دو چیز نیاز داریم:
-
هدف روزانه: طبق استاندارد جهانی، یک فرد بالغ روزانه به حدود ۳۰ گرم فیبر نیاز دارد.
-
دیتابیس میوهها: مقدار فیبر موجود در هر ۱۰۰ گرم میوه خشک.
ساختار داده (JSON):
const fiberData = {
"fig": { name: "انجیر خشک", fiber: 9.8, image: "fig-icon.png" }, // پادشاه فیبر
"prune": { name: "آلو خشک", fiber: 7.1, image: "prune-icon.png" },
"date": { name: "خرما", fiber: 6.7, image: "date-icon.png" },
"apricot": { name: "برگه زردآلو", fiber: 7.3, image: "apricot-icon.png" },
"apple": { name: "چیپس سیب (با پوست)", fiber: 8.7, image: "apple-icon.png" },
"raisin": { name: "کشمش", fiber: 3.7, image: "raisin-icon.png" },
"pear": { name: "گلابی خشک", fiber: 7.5, image: "pear-icon.png" }
};
(نکته: اعداد بر اساس ۱۰۰ گرم هستند).
فاز ۲: طراحی رابط کاربری (HTML Structure)
ما یک طرح ساده اما کاربردی میخواهیم:
-
انتخابگر میوه.
-
ورودی وزن (یا تعداد).
-
یک نوار پیشرفت (Progress Bar) که نشان دهد چقدر از هدف ۳۰ گرمی پر شده است.
<div class="fiber-calc-container">
<div class="header-box">
<h3>🌾 محاسبهگر فیبر روزانه</h3>
<p>آیا امروز به اندازه کافی فیبر خوردهاید؟ (هدف: ۳۰ گرم)</p>
</div>
<div class="input-area">
<label>میوه خشک را انتخاب کنید:</label>
<select id="fiber-product">
<option value="fig">انجیر خشک (بمب فیبر)</option>
<option value="prune">آلو بخارا (ضد یبوست)</option>
<option value="apple">چیپس سیب</option>
<option value="apricot">قیسی / زردآلو</option>
<option value="pear">گلابی خشک</option>
<option value="date">خرما</option>
<option value="raisin">کشمش</option>
</select>
<label>مقدار مصرف (گرم):</label>
<div class="input-group">
<input type="number" id="fiber-weight" value="50" placeholder="مثلاً ۵۰">
<button onclick="addFiberItem()" class="add-btn">افزودن +</button>
</div>
</div>
<ul id="added-items-list"></ul>
<div class="result-area">
<div class="progress-container">
<div class="progress-bar" id="fiber-bar" style="width: 0%;">0%</div>
</div>
<p class="status-text">مجموع فیبر دریافتی: <span id="total-fiber-display">0</span> گرم</p>
<div id="fiber-advice" class="advice-box" style="display:none;"></div>
</div>
</div>
فاز ۳: استایلدهی (CSS Styling)
بیایید به آن ظاهری سلامت و ارگانیک بدهیم (با استفاده از رنگ سبز).
.fiber-calc-container {
background: #fff; border: 1px solid #e0e0e0; border-radius: 12px;
padding: 20px; max-width: 500px; margin: 20px auto; font-family: 'Vazir', sans-serif;
box-shadow: 0 4px 12px rgba(0,0,0,0.05);
}
.header-box h3 { color: #2e7d32; margin-bottom: 5px; }
.header-box p { font-size: 13px; color: #666; }
.input-area select, .input-area input {
width: 100%; padding: 10px; margin-top: 5px; margin-bottom: 15px;
border: 1px solid #ccc; border-radius: 6px;
}
.add-btn {
background: #2e7d32; color: white; border: none; padding: 10px 20px;
border-radius: 6px; cursor: pointer; width: 100%; font-size: 16px;
}
.add-btn:hover { background: #1b5e20; }
#added-items-list {
list-style: none; padding: 0; margin: 20px 0; border-top: 1px dashed #eee;
}
#added-items-list li {
display: flex; justify-content: space-between; padding: 8px 0; border-bottom: 1px solid #f9f9f9; font-size: 14px;
}
.delete-btn { color: red; cursor: pointer; margin-right: 10px; font-weight: bold;}
.progress-container {
width: 100%; background-color: #e0e0e0; border-radius: 20px; margin-top: 20px; overflow: hidden;
}
.progress-bar {
height: 25px; background-color: #4caf50; text-align: center;
line-height: 25px; color: white; font-size: 12px; width: 0%; transition: width 0.5s;
}
.advice-box {
margin-top: 15px; padding: 10px; background: #fff3e0; border-radius: 8px;
border-right: 4px solid #ff9800; font-size: 13px; line-height: 1.6;
}
فاز ۴: مغز متفکر (JavaScript Logic)
این اسکریپت، لیست را مدیریت میکند و نوار پیشرفت را پر میکند.
<script>
const fiberDb = {
"fig": { name: "انجیر خشک", fiber: 9.8 },
"prune": { name: "آلو خشک", fiber: 7.1 },
"apple": { name: "چیپس سیب", fiber: 8.7 },
"apricot": { name: "قیسی", fiber: 7.3 },
"pear": { name: "گلابی خشک", fiber: 7.5 },
"date": { name: "خرما", fiber: 6.7 },
"raisin": { name: "کشمش", fiber: 3.7 }
};
let currentItems = [];
const DAILY_GOAL = 30; // گرم
function addFiberItem() {
const key = document.getElementById('fiber-product').value;
const weight = parseFloat(document.getElementById('fiber-weight').value);
if (!weight || weight <= 0) { alert("وزن را وارد کنید!"); return; }
const itemFiber = (fiberDb[key].fiber * weight) / 100;
currentItems.push({
name: fiberDb[key].name,
weight: weight,
fiber: itemFiber
});
updateUI();
}
function removeItem(index) {
currentItems.splice(index, 1);
updateUI();
}
function updateUI() {
// 1. آپدیت لیست
const listEl = document.getElementById('added-items-list');
listEl.innerHTML = "";
let totalFiber = 0;
currentItems.forEach((item, index) => {
totalFiber += item.fiber;
listEl.innerHTML += `<li>
<span>${item.name} (${item.weight}g)</span>
<span>${item.fiber.toFixed(1)}g فیبر <span class="delete-btn" onclick="removeItem(${index})">×</span></span>
</li>`;
});
// 2. آپدیت نوار پیشرفت
const percentage = Math.min((totalFiber / DAILY_GOAL) * 100, 100);
const bar = document.getElementById('fiber-bar');
bar.style.width = percentage + "%";
bar.innerText = Math.round(percentage) + "%";
// تغییر رنگ نوار بر اساس پیشرفت
if (percentage < 50) bar.style.backgroundColor = "#ff9800"; // نارنجی
else if (percentage < 100) bar.style.backgroundColor = "#4caf50"; // سبز
else bar.style.backgroundColor = "#2196f3"; // آبی (بیش از حد)
document.getElementById('total-fiber-display').innerText = totalFiber.toFixed(1);
// 3. پیام هوشمند (Smart Advice)
const adviceBox = document.getElementById('fiber-advice');
if (totalFiber === 0) {
adviceBox.style.display = 'none';
} else if (totalFiber < 15) {
adviceBox.style.display = 'block';
adviceBox.innerHTML = "⚠️ فیبر دریافتی شما کم است. پیشنهاد: <strong>۵ عدد انجیر خشک</strong> به لیست اضافه کنید تا ۱۰ گرم فیبر بگیرید. <a href='/product/fig'>خرید انجیر »</a>";
} else if (totalFiber < 30) {
adviceBox.style.display = 'block';
adviceBox.innerHTML = "✅ خوب پیش میروید! با افزودن کمی <strong>آلو خشک</strong>، به هدف روزانه میرسید. <a href='/product/prune'>خرید آلو »</a>";
} else {
adviceBox.style.display = 'block';
adviceBox.innerHTML = "🎉 عالی! شما نیاز فیبر روزانه خود را تأمین کردید. سلامت گوارش شما تضمین است.";
}
}
</script>
فاز ۵: استراتژی بازاریابی (چگونه این ابزار را پولساز کنیم؟)
این ابزار نباید فقط یک ماشین حساب باشد؛ باید “فروشنده” باشد.
۱. لینکدهی متنی (Contextual Links)
در پیام هوشمند (Smart Advice)، وقتی میگویید “انجیر بخور”، کلمه انجیر را به صفحه خرید محصول لینک دهید. (در کد بالا انجام شده است). این یعنی هدایت ترافیک به سمت خرید.
۲. استفاده در مقالات بلاگ
این ابزار را با شورتکد (Shortcode) در مقالاتی مثل “درمان یبوست با میوه خشک” یا “تغذیه سالمندان” قرار دهید. کاربر در حین خواندن مقاله، درگیر محاسبه میشود و نیاز به خرید در او ایجاد میگردد.
۳. اشتراکگذاری نتیجه
میتوانید دکمهای اضافه کنید که کاربر نتیجه (مثلاً: “من امروز ۱۰۰٪ فیبر بدنم را گرفتم!”) را در توییتر یا استوری اینستاگرام به اشتراک بگذارد.
بخش پرسش و پاسخ فنی (FAQ)
۱. آیا میتوانم به جای گرم، از “تعداد” استفاده کنم؟ بله. کافیست در دیتابیس، وزن تقریبی هر عدد میوه را تعریف کنید.
-
مثلاً:
oneUnitWeight: 20(برای انجیر). -
سپس در فرمول محاسبه:
(تعداد * وزن واحد * فیبر در ۱۰۰ گرم) / ۱۰۰. این برای کاربر خانگی راحتتر است.
۲. آیا این کد سایت را سنگین میکند؟ به هیچ وجه. حجم کل این کد (HTML+CSS+JS) کمتر از ۵ کیلوبایت است. در مقایسه با یک عکس معمولی (۱۰۰ کیلوبایت)، ناچیز است.
۳. چطور این را در المنتور بگذارم؟ از ویجت HTML در المنتور استفاده کن و کل کدها را یکجا در آن پیست کن. (فقط تگهای <script> و <style> را فراموش نکن).
جمعبندی: ابزاری برای سلامت و فروش
ساخت “محاسبهگر فیبر”، نمونهای عالی از بازاریابی محتوایی تعاملی است. شما با این ابزار به کاربر نشان میدهید که چقدر تا “تغذیه سالم” فاصله دارد و سپس محصول خود را به عنوان “پل” برای رسیدن به آن هدف معرفی میکنید.
به عنوان طراح وب، این ابزار کوچک، ارزش سایت مشتری شما را از یک “فروشگاه معمولی” به یک “همراه سلامت” ارتقا میدهد.
🍑 طعم سلامتی با میوههای خشک AsanFruits
انواع میوههای خشک طبیعی و بدون افزودنی، تهیهشده از بهترین محصولات باغی ایران. میانوعدهای سالم، خوشطعم و مغذی برای هر ساعتی از روز.
مشاهده محصولات میوه خشک