آموزش ساخت ابزار محاسبهگر “میزان سهمیه غذایی” برای برنامههای رژیمی در وبسایت.
- محمد یاسر گنجی دوست
- No Comments
آموزش ساخت محاسبهگر رژیم غذایی برای سایت: کدنویسی ابزار تعیین کالری (ریاضیاتِ لاغری)
رژیم غذایی برای همه یکسان نیست. سهمیه غذایی یک کشتیگیر با یک کارمند پشتمیزنشین زمین تا آسمان فرق دارد. ابزارهای استاتیک (مثل فایل PDF رژیم) خستهکنندهاند. اما یک ابزار داینامیک که قد، وزن و سن کاربر را بگیرد و دقیقاً بگوید: “شما باید صبحانه ۲ کف دست نان و ۳ عدد گردو بخورید”، فوقالعاده ارزشمند است.
در این آموزش، ما یک “ماشینحساب ماکرو” (Macro Calculator) میسازیم که دو کار انجام میدهد:
-
محاسبه انرژی کل (TDEE): چقدر کالری نیاز داری؟
-
تقسیم سهمیه (Macros): چقدر پروتئین، کربوهیدرات و چربی بخوری؟
فاز اول: منطق علمی (فرمولها)
قبل از کدنویسی، باید ریاضیات پشت آن را بدانیم. دقیقترین فرمول علمی حال حاضر، فرمول Mifflin-St Jeor است.
۱. محاسبه BMR (متابولیسم پایه)
انرژی لازم برای زنده ماندن (نفس کشیدن، تپش قلب) در حالت استراحت مطلق:
-
مردان:
(10 × وزن) + (6.25 × قد) - (5 × سن) + 5 -
زنان:
(10 × وزن) + (6.25 × قد) - (5 × سن) - 161(وزن به کیلوگرم، قد به سانتیمتر)
۲. محاسبه TDEE (کل انرژی مصرفی)
BMR × ضریب فعالیت
-
کمتحرک: ۱.۲
-
فعالیت سبک: ۱.۳۷۵
-
فعالیت متوسط: ۱.۵۵
-
فعالیت زیاد: ۱.۷۲۵
فاز دوم: رابط کاربری (HTML)
ما به یک فرم تمیز نیاز داریم تا اطلاعات کاربر را بگیریم.
<div class="diet-calculator-wrapper">
<div class="calc-header">
<h3>🥗 محاسبهگر هوشمند سهمیه غذایی</h3>
<p>مشخصات خود را وارد کنید تا برنامه غذاییتان را تحویل بگیرید.</p>
</div>
<form id="macroForm">
<div class="form-group">
<label>جنسیت:</label>
<div class="radio-group">
<label><input type="radio" name="gender" value="male" checked> 👨 مرد</label>
<label><input type="radio" name="gender" value="female"> 👩 زن</label>
</div>
</div>
<div class="input-row">
<div class="form-group">
<label>وزن (kg)</label>
<input type="number" id="weight" placeholder="مثلاً 75" required>
</div>
<div class="form-group">
<label>قد (cm)</label>
<input type="number" id="height" placeholder="مثلاً 175" required>
</div>
<div class="form-group">
<label>سن</label>
<input type="number" id="age" placeholder="مثلاً 25" required>
</div>
</div>
<div class="form-group">
<label>میزان فعالیت روزانه:</label>
<select id="activity">
<option value="1.2">بدون تحرک (پشت میز نشین)</option>
<option value="1.375">کم تحرک (۱-۳ روز ورزش)</option>
<option value="1.55">متوسط (۳-۵ روز ورزش)</option>
<option value="1.725">زیاد (۶-۷ روز ورزش سنگین)</option>
</select>
</div>
<div class="form-group">
<label>هدف شما چیست؟</label>
<select id="goal">
<option value="lose">کاهش وزن (چربیسوزی)</option>
<option value="maintain">ثبیت وزن</option>
<option value="gain">افزایش وزن (عضلهسازی)</option>
</select>
</div>
<button type="button" onclick="calculateDiet()" class="calc-btn">محاسبه برنامه غذایی 🚀</button>
</form>
<div id="results" style="display:none;">
<h4>📊 سهمیه روزانه شما:</h4>
<div class="result-box">
<span class="big-cal" id="total-cals">0</span>
<span class="unit">کالری</span>
</div>
<div class="macros-container">
<div class="macro-item protein">
<span>پروتئین 🍗</span>
<strong id="prot-g">0g</strong>
</div>
<div class="macro-item carbs">
<span>کربوهیدرات 🍞</span>
<strong id="carb-g">0g</strong>
</div>
<div class="macro-item fats">
<span>چربی سالم 🥑</span>
<strong id="fat-g">0g</strong>
</div>
</div>
</div>
</div>
فاز سوم: استایلدهی (CSS)
ظاهری مدرن و جذاب بسازیم که کاربر حس کند با یک اپلیکیشن کار میکند.
.diet-calculator-wrapper {
background: #fff; padding: 25px; border-radius: 15px;
box-shadow: 0 10px 30px rgba(0,0,0,0.08); max-width: 500px; margin: 20px auto;
font-family: 'Vazir', sans-serif; border: 1px solid #eee;
}
.calc-header h3 { color: #2e7d32; margin-bottom: 5px; }
.input-row { display: flex; gap: 10px; }
.form-group { margin-bottom: 15px; flex: 1; }
input, select {
width: 100%; padding: 10px; border: 2px solid #e0e0e0;
border-radius: 8px; transition: 0.3s;
}
input:focus, select:focus { border-color: #2e7d32; outline: none; }
.calc-btn {
width: 100%; background: #2e7d32; color: white; border: none;
padding: 12px; border-radius: 8px; font-size: 16px; cursor: pointer;
transition: 0.3s;
}
.calc-btn:hover { background: #1b5e20; }
/* استایل نتایج */
#results { margin-top: 25px; padding-top: 20px; border-top: 2px dashed #eee; animation: fadeIn 0.5s; }
.result-box { text-align: center; margin-bottom: 20px; }
.big-cal { font-size: 36px; font-weight: bold; color: #2e7d32; }
.macros-container { display: flex; justify-content: space-between; gap: 10px; }
.macro-item {
flex: 1; text-align: center; padding: 10px; border-radius: 10px;
display: flex; flex-direction: column; gap: 5px; font-size: 13px;
}
.protein { background: #e3f2fd; color: #1565c0; }
.carbs { background: #fff3e0; color: #ef6c00; }
.fats { background: #fce4ec; color: #c2185b; }
@keyframes fadeIn { from { opacity: 0; transform: translateY(10px); } to { opacity: 1; transform: translateY(0); } }
فاز چهارم: موتور محاسباتی (JavaScript)
این مغز متفکر ابزار است.
<script>
function calculateDiet() {
// 1. دریافت ورودیها
const weight = parseFloat(document.getElementById('weight').value);
const height = parseFloat(document.getElementById('height').value);
const age = parseFloat(document.getElementById('age').value);
const gender = document.querySelector('input[name="gender"]:checked').value;
const activity = parseFloat(document.getElementById('activity').value);
const goal = document.getElementById('goal').value;
if (!weight || !height || !age) {
alert("لطفاً تمام فیلدها را پر کنید!");
return;
}
// 2. محاسبه BMR (Mifflin-St Jeor)
let bmr;
if (gender === 'male') {
bmr = (10 * weight) + (6.25 * height) - (5 * age) + 5;
} else {
bmr = (10 * weight) + (6.25 * height) - (5 * age) - 161;
}
// 3. محاسبه TDEE و تنظیم هدف
let tdee = bmr * activity;
// تنظیم کالری بر اساس هدف
let targetCalories = tdee;
if (goal === 'lose') targetCalories -= 500; // 500 کالری کمتر برای لاغری
if (goal === 'gain') targetCalories += 300; // 300 کالری بیشتر برای حجم
// 4. محاسبه ماکروها (درصد استاندارد: 50% کربوهیدرات، 30% پروتئین، 20% چربی)
// هر گرم پروتئین/کربوهیدرات = 4 کالری | هر گرم چربی = 9 کالری
const proteinGrams = (targetCalories * 0.30) / 4;
const carbGrams = (targetCalories * 0.50) / 4;
const fatGrams = (targetCalories * 0.20) / 9;
// 5. نمایش نتایج
document.getElementById('results').style.display = 'block';
// انیمیشن اعداد (اختیاری)
document.getElementById('total-cals').innerText = Math.round(targetCalories);
document.getElementById('prot-g').innerText = Math.round(proteinGrams) + " گرم";
document.getElementById('carb-g').innerText = Math.round(carbGrams) + " گرم";
document.getElementById('fat-g').innerText = Math.round(fatGrams) + " گرم";
}
</script>
فاز پنجم: یکپارچهسازی با وردپرس (برای امیررضا)
حالا چطور این کدها را در سایت مشتری بگذاری؟
-
المنتور (Elementor):
-
یک ویجت HTML به صفحه اضافه کن.
-
کدهای HTML، CSS (داخل تگ
<style>) و JS (داخل تگ<script>) را به ترتیب داخل آن کپی کن.
-
-
شورتکد (Shortcode):
-
میتوانی یک افزونه ساده (Custom Plugin) بنویسی که این خروجی را با شورتکد
[diet_calculator]نمایش دهد.
-
ارزش افزوده: تبدیل اعداد به غذا
برای اینکه این ابزار شاهکار شود، میتوانی زیرِ نتایج، یک راهنمای متنی داینامیک اضافه کنی:
-
“شما به ۱۴۰ گرم پروتئین نیاز دارید، این یعنی معادل: ۲ عدد سینه مرغ + ۴ سفیده تخم مرغ + ۱ پیمانه حبوبات.” این کار برای کاربران معمولی که نمیدانند “۱۴۰ گرم پروتئین” یعنی چه، بسیار کاربردی است.
بخش پرسش و پاسخ فنی (FAQ)
۱. آیا این فرمول برای همه دقیق است؟ فرمول Mifflin-St Jeor حدود ۱۰٪ خطا دارد که طبیعی است. این فرمول برای ورزشکاران حرفهای (که توده عضلانی خیلی بالا دارند) ممکن است کالری را کم نشان دهد، اما برای ۹۰٪ مردم دقیقترین گزینه است.
۲. چگونه میتوانم رژیم کتوژنیک (Keto) اضافه کنم؟ کافیست در بخش جاوااسکریپت، درصدها را تغییر دهید.
-
کتوژنیک: ۵٪ کربوهیدرات / ۲۵٪ پروتئین / ۷۰٪ چربی. میتوانید یک دراپداون (Select Box) اضافه کنید که کاربر نوع رژیم (استاندارد/کتو/گیاهخواری) را انتخاب کند و ضرایب در کد تغییر کند.
۳. آیا میتوانم نتایج را ایمیل کنم؟ بله، اما نیاز به Backend (PHP) دارد. باید فرم را به جای محاسبه در لحظه، به یک فایل PHP ارسال کنید که با تابع wp_mail() وردپرس، نتایج را برای کاربر ایمیل کند. این کار برای لید جنریشن (Lead Generation) عالی است.
جمعبندی: ابزاری که پول میسازد
ساختن این محاسبهگر سهمیه غذایی، فقط یک تمرین کدنویسی نیست. این ابزاری است که به مشتری (صاحب سایت) اجازه میدهد بگوید: “ما فقط محصول نمیفروشیم، ما مشاور هوشمند شما هستیم.”
به عنوان طراح وب، وقتی این ابزار را در رزومهات داشته باشی، نشان میدهی که توانایی خلق “Web App” (برنامههای تحت وب) را داری، نه فقط سایتهای استاتیک.
پیشنهاد بعدی: آیا میخواهی کدِ بخش “تبدیل نتایج به نمودار دایرهای (Pie Chart)” با استفاده از کتابخانه Chart.js را برایت آماده کنم تا نتایج را گرافیکی و حرفهایتر نمایش دهی؟
🍑 طعم سلامتی با میوههای خشک AsanFruits
انواع میوههای خشک طبیعی و بدون افزودنی، تهیهشده از بهترین محصولات باغی ایران. میانوعدهای سالم، خوشطعم و مغذی برای هر ساعتی از روز.
مشاهده محصولات میوه خشک