محمد المصري12 نشر 14 يوليو 2021 أرسل تقرير نشر 14 يوليو 2021 سلام عليكم هذا افضل ما وصلت له لوصف عنوان المشكلة و سأشرحها بالتفصيل بيانات عادية بملاها و من خلالها ببني جدول ديناميكي بناء على قيم المدخلات دي الكمية المطلوبة بكتبها عادي عدد الالوان يكتب الرقم 2 او 3 او 10 حتى يفتحلي مربعات نص اكتب فيها الالوان المقاسات المطلوبة بتيجي من جدول تاني في الداتابيز مش ازمة خالص شاهدوا معي الصورة بعد ما نقوم بتعبئة البيانات السابقة نلاحظ ان الجدول شكلة تغير اصبح جاهزا لادخال البيانات كالتالي كمية كل مقاس في الجدول 300 كما و دخلتها ، و الخلايا اللي تحت هاقوم بتوزيع ال300 على اللونين ، 200 و 100 او 150 و 150 مش هاتفرق خليني مثلا كتبت 150 للاحمر و 150 للازرق مطلوب من المستخدم انه يوزع رقم ال 150 ده على الخلايا اللي ظاهرة امامه في كل مقاس مثلا امام اللون الاحمر المقاس m نحطله رقم 50 و المقاس L نحطله رقم 50 , و المقاسين التانيين 25 و 25 و الازرق نفس الشئ ، فالجدول هايبقى كده الان طلبي اللي وقفت امامه و محتاج مساعدتكم فيه هو اني عاوز اضيف خانة اسفل كل مقاس اسمها الاجمالي تحسبلي بشكل فوري مجموع الارقام في المقاس ده يعني مثلا عندي مقاس M مجموعه 100 و L برضه 100 و هكذا ملفات المشروع هنا https://github.com/Mohaamaad7/arabia/tree/master مثال حي لمن يرغب في فهم المشكلة اكثر http://newborn.areyada.com/patron.php?id=1 username : test password :test اضغط على اللينك اعلاه للدخول للصفحة المطلوبة من جديد بعد تسجيل الدخول ملف ال php و الذي يحتوي على كود الjavascript ايضا بالمرفقات اسف للاطالة لكني قصدت شرح المطلوب بالتفصيل حتى احصل على المساعدة مع خالص تحياتي patron.php اقتباس
0 سامح أشرف نشر 15 يوليو 2021 أرسل تقرير نشر 15 يوليو 2021 بإمكانك أن تقوم بإضافة صف جديد للإجمالي من خلال كود جافاسكريبت عند الضغط على زر "البدء بتعبئة الطلب" من خلال الكود التالي: addTotalRows = () => { row_html = `<tr class="total-row"> <th scope="row" style="border: 1px solid #373838;background-color: #bec1c3;"> الإجمالي </th> <td scope="row" class="total" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-m" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-l" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-xl" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-xxl" style="border: 1px solid #373838;"> </td> </tr>` tbody = document.querySelector('tbody') tbody.innerHTML = tbody.innerHTML + row_html } تقوم الدالة السابقة بإضافة صف يحتوي على بعض الخانات إلى جسم الجدول tbody ونقوم بتنفيذ هذه الدالة عند الضغط على زر "البدء بتعبئة الطلب" من خلال حدث submit لنموذج البيانات .needs-validation-create-table كالتالي: document.getElementsByClassName('needs-validation-create-table')[0].addEventListener('submit', addTotalRows) بعد ذلك يجب عمل دالة لتغير قيم هذا الخلايا في الصف الذي قمنا بإنشائه للتو، كالتالي: calcTotal = () => { rows = document.querySelectorAll('tbody tr:not(.sizes-names):not(.total-row)') total = 0 size_m = 0 size_l = 0 size_xl = 0 size_xxl = 0 rows.forEach((row)=>{ inputs = row.querySelectorAll('td input') total += isNaN(parseInt(inputs[0].value)) ? 0 : parseInt(inputs[0].value) size_m += isNaN(parseInt(inputs[1].value)) ? 0 : parseInt(inputs[1].value) size_l += isNaN(parseInt(inputs[2].value)) ? 0 : parseInt(inputs[2].value) size_xl += isNaN(parseInt(inputs[3].value)) ? 0 : parseInt(inputs[3].value) size_xxl += isNaN(parseInt(inputs[4].value)) ? 0 : parseInt(inputs[4].value) }) changeTotal(total, size_m, size_l, size_xl, size_xxl) } changeTotal = (total, size_m, size_l, size_xl, size_xxl) => { document.querySelector('.total').innerText = total document.querySelector('.size-m').innerText = size_m document.querySelector('.size-l').innerText = size_l document.querySelector('.size-xl').innerText = size_xl document.querySelector('.size-xxl').innerText = size_xxl } تقوم دالة calcTotal بأخذ القيم من الحقول من الجدول وجمع قيمة كل عمود على حدى ثم تخزين هذه القيم في المتغيرات total, size_m, size_l, size_xl, size_xxl وفي النهاية تقوم بتمرير هذه المتغيرات إلى الدالة changeTotal المسئولة عن إضافة الأرقام إلى صف الإجمالي الذي قمنا بإنشائه في الخطوة الأولى، لكن هذه الدوال يجب أن تعمل بعد إضافة الألوان إلى الجدول وذلك من خلال إضافة حدث submit آخر إلى النموذج .needs-validation-create-table كالتالي: document.getElementsByClassName('needs-validation-create-table')[0].addEventListener('submit', () => { felids = document.querySelectorAll('td.color-sizes-count') felids.forEach((felid) => { felid.addEventListener('change', calcTotal) }) }) يقوم الكود السابق بإنتظار الضغط على زر "البدء بتعبئة الطلب" ثم يقوم بإضافة حدث change على كل حقل إدخال موجود في الجدول ليتم تنفيذ الدالة calcTotal عند حدوث أي تغير في قيم الحقول في الجدول وبهذا سيتم تغير القيم في صف الإجمالي كما في الصورة: وهنا الكود الكامل: addTotalRows = () => { row_html = `<tr class="total-row"> <th scope="row" style="border: 1px solid #373838;background-color: #bec1c3;"> الإجمالي </th> <td scope="row" class="total" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-m" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-l" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-xl" style="border: 1px solid #373838;"> </td> <td scope="row" class="size-xxl" style="border: 1px solid #373838;"> </td> </tr>` tbody = document.querySelector('tbody') tbody.innerHTML = tbody.innerHTML + row_html } document.getElementsByClassName('needs-validation-create-table')[0].addEventListener('submit', addTotalRows) calcTotal = () => { rows = document.querySelectorAll('tbody tr:not(.sizes-names):not(.total-row)') total = 0 size_m = 0 size_l = 0 size_xl = 0 size_xxl = 0 rows.forEach((row)=>{ inputs = row.querySelectorAll('td input') total += isNaN(parseInt(inputs[0].value)) ? 0 : parseInt(inputs[0].value) size_m += isNaN(parseInt(inputs[1].value)) ? 0 : parseInt(inputs[1].value) size_l += isNaN(parseInt(inputs[2].value)) ? 0 : parseInt(inputs[2].value) size_xl += isNaN(parseInt(inputs[3].value)) ? 0 : parseInt(inputs[3].value) size_xxl += isNaN(parseInt(inputs[4].value)) ? 0 : parseInt(inputs[4].value) }) changeTotal(total, size_m, size_l, size_xl, size_xxl) } changeTotal = (total, size_m, size_l, size_xl, size_xxl) => { document.querySelector('.total').innerText = total document.querySelector('.size-m').innerText = size_m document.querySelector('.size-l').innerText = size_l document.querySelector('.size-xl').innerText = size_xl document.querySelector('.size-xxl').innerText = size_xxl } document.getElementsByClassName('needs-validation-create-table')[0].addEventListener('submit', () => { felids = document.querySelectorAll('td.color-sizes-count') felids.forEach((felid) => { felid.addEventListener('change', calcTotal) }) }) 1 اقتباس
0 محمد المصري12 نشر 15 يوليو 2021 الكاتب أرسل تقرير نشر 15 يوليو 2021 الله ينور عليك تسلم انا جربتها عندي ما ظبطتش للاسف بس الفكرة واضحة لكن الان المشكلة في اننا عاملين المقاس في دالة calcTotal ثابت ب باربع خانات x و m و هكذا و البيان ده متغير انا بجيبه من الداتابيز ، ممكن يبقى عندي 15 مقاس مش 4 بس فعاوز مساعدتك اني اظبط الدالة دي تشتغل على المتغير مش الثابت و ده الجزء الخاص بمتغير المقاس <label> المقاسات المطلوبة </label> <div class="input-group d-flex justify-content-center"> <?php foreach ($sizes as $size){ echo '<span style="font-size: 1rem;" class="badge m-2 badge-pill badge-secondary size-title">'.$size['title'].'</span>'; } ?> </div> و ده ملف الباترون بعد ما عملت التعديلات اللي امرت بيها بس مشتغلش معايا للاسف patron.php اقتباس
0 سامح أشرف نشر 15 يوليو 2021 أرسل تقرير نشر 15 يوليو 2021 بتاريخ منذ ساعة مضت قال محمد المصري5: الله ينور عليك تسلم انا جربتها عندي ما ظبطتش للاسف بس الفكرة واضحة لكن الان المشكلة في اننا عاملين المقاس في دالة calcTotal ثابت ب باربع خانات x و m و هكذا و البيان ده متغير انا بجيبه من الداتابيز ، ممكن يبقى عندي 15 مقاس مش 4 بس فعاوز مساعدتك اني اظبط الدالة دي تشتغل على المتغير مش الثابت و ده الجزء الخاص بمتغير المقاس <label> المقاسات المطلوبة </label> <div class="input-group d-flex justify-content-center"> <?php foreach ($sizes as $size){ echo '<span style="font-size: 1rem;" class="badge m-2 badge-pill badge-secondary size-title">'.$size['title'].'</span>'; } ?> </div> و ده ملف الباترون بعد ما عملت التعديلات اللي امرت بيها بس مشتغلش معايا للاسف patron.php لم يعمل الكود الذي قمت بإضافته بسبب وجود جزئ ناقص فيه وهو الكود التالي: document.getElementsByClassName('needs-validation-create-table')[0].addEventListener('submit', () => { felids = document.querySelectorAll('td.color-sizes-count') felids.forEach((felid) => { felid.addEventListener('change', calcTotal) }) }) بالنسبة لتغير عدد الحقول فيجب أن تقوم بالكثير من التغيرات في الدوال السابقة، على سبيل المثال يجب أن تعديل الدالة addTotalRows لكي تقبل مصفوفة تحتوي على المقاسات لتقوم بتوليد كل الخانات في صف الإجمالي ويجب أن يتم إستعمال أسماء المقاسات كأصناف classes في الخانات حتى يمكنك أن تقوم بتعديل قيم هذه الخانات مع كل تغير يتم في الجدول، كالتالي: sizes = ['size_m', 'size_l', 'size_xl', 'size_xxl']; addTotalRows = (sizes) => { row_html = `<tr class="total-row"> <th scope="row" style="border: 1px solid #373838;background-color: #bec1c3;"> الإجمالي </th>` sizes.forEach((size)=>{ row_html += `<td scope="row" class="${size}" style="border: 1px solid #373838;"> </td>` }) row_html += `</tr>` tbody = document.querySelector('tbody') tbody.innerHTML = tbody.innerHTML + row_html } document.getElementsByClassName('needs-validation-create-table')[0].addEventListener('submit', ()=>addTotalRows(sizes)) وبنفس الطريقة يجب أن تقوم بتعديل كل الدوال الأخرى. 1 اقتباس
0 محمد المصري12 نشر 16 يوليو 2021 الكاتب أرسل تقرير نشر 16 يوليو 2021 لما قمت بتعديل الكود زي حضرتك ما ذكرت لي لم تعمل معي خانة الاجمالي من الاساس و ده ملف الباترون هل ممكن ترفعلي ملف الباترون بعد تعديلات حضرتك عشان اقارنها و اعرف خطئي فين patron.php اقتباس
السؤال
محمد المصري12
سلام عليكم
هذا افضل ما وصلت له لوصف عنوان المشكلة
و سأشرحها بالتفصيل
بيانات عادية بملاها و من خلالها ببني جدول ديناميكي بناء على قيم المدخلات دي
الكمية المطلوبة بكتبها عادي
عدد الالوان يكتب الرقم 2 او 3 او 10 حتى يفتحلي مربعات نص اكتب فيها الالوان
المقاسات المطلوبة بتيجي من جدول تاني في الداتابيز مش ازمة خالص
شاهدوا معي الصورة
بعد ما نقوم بتعبئة البيانات السابقة نلاحظ ان الجدول شكلة تغير اصبح جاهزا لادخال البيانات كالتالي
كمية كل مقاس في الجدول 300 كما و دخلتها ، و الخلايا اللي تحت هاقوم بتوزيع ال300 على اللونين ، 200 و 100
او 150 و 150 مش هاتفرق
خليني مثلا كتبت 150 للاحمر و 150 للازرق
مطلوب من المستخدم انه يوزع رقم ال 150 ده على الخلايا اللي ظاهرة امامه في كل مقاس
مثلا امام اللون الاحمر المقاس m نحطله رقم 50 و المقاس L نحطله رقم 50 , و المقاسين التانيين 25 و 25
و الازرق نفس الشئ ، فالجدول هايبقى كده
الان طلبي اللي وقفت امامه و محتاج مساعدتكم فيه هو اني عاوز اضيف خانة اسفل كل مقاس اسمها الاجمالي تحسبلي بشكل فوري مجموع الارقام في المقاس ده
يعني مثلا عندي مقاس M مجموعه 100 و L برضه 100 و هكذا
ملفات المشروع هنا
https://github.com/Mohaamaad7/arabia/tree/master
مثال حي لمن يرغب في فهم المشكلة اكثر
http://newborn.areyada.com/patron.php?id=1
username : test
password :test
اضغط على اللينك اعلاه للدخول للصفحة المطلوبة من جديد بعد تسجيل الدخول
ملف ال php و الذي يحتوي على كود الjavascript ايضا بالمرفقات
اسف للاطالة لكني قصدت شرح المطلوب بالتفصيل حتى احصل على المساعدة مع خالص تحياتي
patron.php
5 أجوبة على هذا السؤال
Recommended Posts
انضم إلى النقاش
يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.