نکات فنی برای ساخت یک ابزار ساده “محاسبهگر امتیاز سلامت” بر اساس ترکیب میوههای خشک.
- محمد یاسر گنجی دوست
- No Comments
آموزش ساخت ابزار “محاسبهگر امتیاز سلامت” خشکبار در وردپرس: بازی با اعداد برای فروش بیشتر
کاربران عاشق نمره گرفتن هستند. اگر به آنها بگویید “سبد خرید شما نمره ۶۰ از ۱۰۰ را گرفت”، بلافاصله میپرسند: “چکار کنم بشه ۱۰۰؟” و شما پیشنهاد میدهید: “کمی بادام اضافه کن تا پروتئینش بالا بره.”
این ابزار، یک مشاور تغذیه دیجیتال است. ساخت آن نیاز به پلاگین سنگین ندارد؛ بلکه با یک قطعه کد HTML/JS تمیز و سبک قابل اجراست. در این مقاله، ما مراحل ساخت این ابزار را از “طراحی فرمول ریاضی” تا “کدنویسی فرانتاند” طی میکنیم.
فاز ۱: تعریف “الگوریتم امتیازدهی” (The Logic)
قبل از کدنویسی، باید تعریف کنیم “سالم” یعنی چه؟ برای خشکبار، ما میتوانیم ۳ فاکتور را در نظر بگیریم:
-
نکات مثبت (+): فیبر، پروتئین، چربی سالم (آجیل).
-
نکات منفی (-): قند بالا.
فرمول پیشنهادی: امتیاز پایه = (فیبر × ۲) + (پروتئین × ۱.۵) - (قند × ۰.۵)
-
این فرمول باعث میشود میوههایی مثل “انجیر” (فیبر بالا) و “گردو” (پروتئین بالا) نمره را بالا ببرند و میوههایی مثل “خرمای رطب” (قند بالا) نمره را متعادل کنند.
-
سپس این عدد را در بازه ۰ تا ۱۰۰ نرمالسازی (Normalize) میکنیم.
فاز ۲: دیتابیس محصولات (آرایه جاوااسکریپت)
ما نیاز داریم اطلاعات تغذیهای میوهها را در کد ذخیره کنیم. یک آرایه ساده کافی است.
const driedFruits = {
"fig": { name: "انجیر خشک", sugar: 48, fiber: 10, protein: 3 },
"date": { name: "خرما", sugar: 63, fiber: 7, protein: 2 },
"apricot": { name: "قیسی", sugar: 53, fiber: 7, protein: 3 },
"walnut": { name: "گردو", sugar: 3, fiber: 7, protein: 15 },
"raisin": { name: "کشمش", sugar: 59, fiber: 4, protein: 3 }
};
(اعداد تقریبی در هر ۱۰۰ گرم هستند).
فاز ۳: کدنویسی ابزار (HTML + JS)
این کد را میتوانید در یک ویجت HTML المنتور یا شورتکد وردپرس قرار دهید.
الف) ساختار HTML (رابط کاربری)
<div class="health-calculator-box">
<h3>سنجش سلامت میانوعده شما 🥗</h3>
<div id="inputs-container">
<div class="fruit-row">
<select class="fruit-select">
<option value="fig">انجیر خشک</option>
<option value="date">خرما</option>
<option value="apricot">قیسی</option>
<option value="walnut">گردو</option>
<option value="raisin">کشمش</option>
</select>
<input type="number" class="fruit-weight" placeholder="گرم" value="50">
</div>
</div>
<button onclick="addRaw()" class="add-btn">+ افزودن میوه دیگر</button>
<button onclick="calculateHealthScore()" class="calc-btn">محاسبه امتیاز</button>
<div id="result-area" style="display:none;">
<div class="score-circle">
<span id="final-score">0</span>
<small>/ 100</small>
</div>
<p id="health-message"></p>
<div id="suggestion-box"></div>
</div>
</div>
ب) استایل CSS (زیباسازی)
.health-calculator-box {
background: #fff;
padding: 25px;
border-radius: 15px;
box-shadow: 0 5px 20px rgba(0,0,0,0.08);
max-width: 450px;
margin: 0 auto;
font-family: 'Vazir', sans-serif;
text-align: center;
}
.fruit-row {
display: flex;
gap: 10px;
margin-bottom: 10px;
}
.fruit-select { flex: 2; padding: 8px; border-radius: 8px; border: 1px solid #ddd; }
.fruit-weight { flex: 1; padding: 8px; border-radius: 8px; border: 1px solid #ddd; }
.calc-btn {
background: #4CAF50; color: white; width: 100%; padding: 12px;
border: none; border-radius: 8px; cursor: pointer; font-size: 16px; margin-top: 10px;
}
.add-btn {
background: #f1f1f1; color: #333; border: none; padding: 5px 10px;
border-radius: 5px; cursor: pointer; margin-bottom: 10px; font-size: 12px;
}
.score-circle {
width: 100px; height: 100px; border-radius: 50%;
background: #e8f5e9; color: #2e7d32;
display: flex; flex-direction: column; justify-content: center; align-items: center;
margin: 20px auto; border: 4px solid #4CAF50;
font-size: 32px; font-weight: bold;
}
#suggestion-box {
background: #fff3cd; padding: 10px; border-radius: 8px;
font-size: 13px; color: #856404; margin-top: 10px;
}
ج) منطق جاوااسکریپت (مغز ابزار)
<script>
const fruitsData = {
"fig": { sugar: 48, fiber: 10, protein: 3 },
"date": { sugar: 63, fiber: 7, protein: 2 },
"apricot": { sugar: 53, fiber: 7, protein: 3 },
"walnut": { sugar: 3, fiber: 7, protein: 15 }, // امتیاز مثبت بالا
"raisin": { sugar: 59, fiber: 4, protein: 3 }
};
function addRaw() {
const container = document.getElementById('inputs-container');
const row = container.children[0].cloneNode(true);
container.appendChild(row);
}
function calculateHealthScore() {
let totalSugar = 0;
let totalFiber = 0;
let totalProtein = 0;
let totalWeight = 0;
const selects = document.querySelectorAll('.fruit-select');
const weights = document.querySelectorAll('.fruit-weight');
selects.forEach((select, index) => {
const fruitKey = select.value;
const weight = parseFloat(weights[index].value);
if (weight > 0) {
const data = fruitsData[fruitKey];
// محاسبه مقدار واقعی بر اساس وزن
totalSugar += (data.sugar * weight) / 100;
totalFiber += (data.fiber * weight) / 100;
totalProtein += (data.protein * weight) / 100;
totalWeight += weight;
}
});
if (totalWeight === 0) return alert("لطفاً وزن را وارد کنید");
// فرمول امتیازدهی (اختصاصی شما)
// این فرمول ساده شده است: فیبر و پروتئین امتیاز مثبت، قند امتیاز منفی
let rawScore = (totalFiber * 5) + (totalProtein * 3) - (totalSugar * 0.5);
// نرمالسازی امتیاز بین 0 تا 100 (بر اساس وزن)
// فرض: بهترین امتیاز در 100 گرم حدود 50 است
let normalizedScore = (rawScore / totalWeight) * 100 * 2;
// محدود کردن بین 0 تا 100
let finalScore = Math.min(Math.max(Math.round(normalizedScore), 0), 100);
// نمایش
document.getElementById('result-area').style.display = 'block';
document.getElementById('final-score').innerText = finalScore;
// منطق پیشنهاد (Recommendation Logic)
let message = "";
let suggestion = "";
if (finalScore > 80) {
message = "عالی! یک میانوعده سوپر سالم 💪";
document.querySelector('.score-circle').style.borderColor = "#4CAF50"; // سبز
} else if (finalScore > 50) {
message = "خوب است، اما جای بهتر شدن دارد.";
suggestion = "💡 پیشنهاد: کمی **گردو یا بادام** اضافه کنید تا قند را متعادل کند.";
document.querySelector('.score-circle').style.borderColor = "#FFC107"; // زرد
} else {
message = "مراقب قند باشید!";
suggestion = "💡 پیشنهاد: مقدار خرما/کشمش را کم کنید و **انجیر یا آجیل** اضافه کنید.";
document.querySelector('.score-circle').style.borderColor = "#F44336"; // قرمز
}
document.getElementById('health-message').innerText = message;
document.getElementById('suggestion-box').innerHTML = suggestion;
// نمایش باکس پیشنهاد فقط اگر متنی دارد
document.getElementById('suggestion-box').style.display = suggestion ? 'block' : 'none';
}
</script>
فاز ۴: استراتژی افزایش فروش (چگونه پولسازش کنیم؟)
این ابزار فقط برای سرگرمی نیست؛ باید بفروشد.
۱. لینکدهی هوشمند در بخش پیشنهاد
در کد JS، وقتی پیشنهاد میدهید “گردو اضافه کنید”، کلمه “گردو” را به لینک خرید گردو تبدیل کنید.
-
کد:
suggestion = "💡 پیشنهاد: کمی <a href='/product/walnut'>گردو</a> اضافه کنید...";
۲. دکمه “خرید این ترکیب” (Advanced)
اگر میخواهید خیلی حرفهای عمل کنید، دکمهای بگذارید که تمام اقلام انتخابی کاربر را با وزنهای وارد شده، یکجا به سبد خرید ووکامرس اضافه کند. (این نیاز به استفاده از پارامترهای URL ووکامرس ?add-to-cart دارد).
نکات تکمیلی برای طراحان وب
-
ریسپانسیو بودن: کد CSS بالا ساده است. مطمئن شوید که در موبایل،
flex-directionرا درست تنظیم کنید تا اینپوتها زیر هم قرار نگیرند و به هم نریزند. -
استفاده از Chart.js: اگر میخواهید خیلی حرفهای باشید، به جای نمایش عدد ساده، از کتابخانه
Chart.jsاستفاده کنید تا نمودار دایرهای (Pie Chart) از میزان “قند، پروتئین، فیبر” را به کاربر نشان دهید. این کار سایت را بسیار مدرن میکند. -
گرفتن لید (Lead): میتوانید نتیجه نهایی را نشان ندهید و بگویید: “برای دیدن آنالیز دقیق و دریافت برنامه غذایی، ایمیل خود را وارد کنید.”
جمعبندی: کدنویسی ارزشآفرین
ساخت ابزار “محاسبهگر امتیاز سلامت”، نمونهای از استفاده خلاقانه از کدنویسی برای بازاریابی است. شما با این کار:
-
کاربر را درگیر میکنید (Engagement).
-
به او آموزش میدهید (Education).
-
و محصول خود را به عنوان راه حل (Solution) میفروشید.
این قطعه کد کوچک، میتواند ارزش سایت شما را در ذهن مشتری و کارفرما چندین برابر کند.
🍑 طعم سلامتی با میوههای خشک AsanFruits
انواع میوههای خشک طبیعی و بدون افزودنی، تهیهشده از بهترین محصولات باغی ایران. میانوعدهای سالم، خوشطعم و مغذی برای هر ساعتی از روز.
مشاهده محصولات میوه خشک