اذهب إلى المحتوى

محمد عاطف17

الأعضاء
  • المساهمات

    3631
  • تاريخ الانضمام

  • تاريخ آخر زيارة

  • عدد الأيام التي تصدر بها

    38

إجابات الأسئلة

  1. إجابة محمد عاطف17 سؤال في ما هو أنسب مكان لتخزين عناصر السلة, قاعدة البيانات, الكوكيز أم الـ session ؟ كانت الإجابة المقبولة   
    وعليكم السلام ورحمة الله وبركاته.
    يوجد العديد من الطرق منها التي ذكرتها ومنها التي لم تذكرها وكل طريقة لها مميزات وعيوب وأيضا لها خصائص يجب توافرها لتنفيذها وأيضا تعتمد بشكل كبير على الخصائص التي تريدها في مشروعك.
    فأولا لو أردت أن بيانات السلة تكون موجودة في حساب المستخدم أى إذا قام بتسجيل الدخول من أى مكان سواء الهاتف أو الحاسوب أو في أكثر من مكان وتريد تلك البيانات أن تكون متزامنة ومتاحة . أى نفرض أنه أضاف منتج من خلال الهاتف و من ثم فتح المتصفح على الحاسوب يجب حينها أن يرى المنتجات التي أضافها من خلال الهاتف . هنا يجب أن يتم تخزين تلك البيانات من خلال الخادم الخاص ب Laravel .أى يجب عليك هنا إستخدام قاعدة البيانات وتوفير API لإضافة المنتجات في السلة وإحضار تلك المنتجات. وهنا لن تنفع خاصية ال session أو ال cookies وغيرها والتي تعتمد على الجافاسكريبت .
    أما إذا أردت أن تكون السلة غير متزامنه فيمكنك إستخدام جميع ما قلته ولكن لكل طريقة حدود .
    فال API أرى أنه الأفضل وحينها فقط ستقوم بإنشاء المنطق مرة واحدة فقط في الخادم عند حفظ المنتجات ولو يوجد لديك تطبيق هاتف أو تطبيق ويب فقط ستقوم بعرض تلك البيانات لديك ولن تقوم بحفظها لديك في التطبيقين أى ستقوم بإنشا منطق عرض المنتجات فقط أما حفظها وإحضارها سيكون من خلال ال API. ويجب على ال API أن يكون سريعا أما إذا وجدت أن الوقت بين الطلب والإستقبال كبير فهنا أعتقد أن المشكلة لديك في طريقة حفظ البيانات أو في الكود الخاص بالحفظ لذلك يرجى التأكد من هذا الكود ومحاولة إكتشاف لماذا يأخذ وقتا كثيرا.
    أما ال cookies فيمكنك إيقاف تشفير تلك البيانات إذا أردت من خلال laravel ولكنها فقط لن تتجاوز 4096 بايت وهذا ليس جيدا ولا أنصح به.
    أما بخصوص ال session يمكنك إستخدامها ولكن سيتوجب حفظ ال id الخاص بال session في قاعدة البيانات وبذلك عندما يقوم المستخدم في أى وقت بستجيل الدخول سيمكنك إستخدام ال session_id وإسترجاع تلك البيانات مباشرة ولكنها أيضا طريقة لا أنصح بها.
    الأفضل لك هو إستخدام Local Storage حيث تقوم بحفظها في ال localstorage لديك ويمكنك إحضارها في أى وقت من خلال javascript ولا يتم مسحها إلا إذا إستخدمت كود جافاسكريبت أى لا تقلق من ناحية إنتهاء الوقت أو إغلاق المتصفح ولكن كما وضحت لك تلك الطريقة لن تجعل منتجات السلة متزامنة.
  2. إجابة محمد عاطف17 سؤال في لماذا تظهر المساحة الفارغة عند إختبار تجاوب التصميم كانت الإجابة المقبولة   
    وعليكم السلام ورحمة الله وبركاته.
    المشكلة لديك في هذا العنصر :

    لاحظ كيف أنك تستخدم :
    margin-right: 50% !important; transform: translateX(25%); ولهذا فإنه يتم إزاحته كثيرا جهة اليسار مما يسبب تلك المسافة الزائدة.
    ويفضل لجعل العنصر في المنتصف إستخدام flexbox كالتالي .
    في ملف src\sass\index.scss سطر 389 يرجى إستبدال التنسيقات بالتالي :
    .center-div { display: flex; flex-direction: column; align-items: center; width: 100%; } أو إذا أردت إستخدام التنسيقات التي لديك يمكنك وضع خاصية overflow hidden للعنصر curve-contain كالتالي :
    .curve-contain{ overflow: hidden; }  
  3. إجابة محمد عاطف17 سؤال في مشكلة رفع تغييرات على Git كانت الإجابة المقبولة   
    يرجى تحميل برنامج anydesk وإرسال ال address الخاص بك للدخول على جهازك ومحاولة حل المشكلة لك.
  4. إجابة محمد عاطف17 سؤال في ماهي الدورة من اكاديمية حاسوب التي تفيدني اكثر في سوق العمل الحر php ام JavaScript كانت الإجابة المقبولة   
    على مواقع العمل الحر العربية ستجد أن أغلب المطلوب هو PHP مع إطار عمل لارافيل و وورد بريس  وستجد أيضًا بعض الوظائف للـ .NET وأحيانًا وظائف لـ React و node مع express ولكن النسبة الأكبر من الوظائف هنا هي php .
    ويمكنك قراءة الإجابة التالية لمزيد من التفاصيل حول الوظائف المتاحة و اللغات المطلوبة أكثر  :
    أما الأهم من ذلك هو يفضل إتباع ما تحب فبعض الناس يفضلون php عن java script والبعض الأخر العكس و لذلك يفضل أن تشترك في الدورة الخاصة باللغة التي تفضلها .
    أما بخصوص دورة تطوير التطبيقات باستخدام JavaScript بعد الانتهاء من هذه الدورة يمكنك ان تصبح مطور برمجيات بلغة جافاسكريبت وتمكنك من ان تصبح مطور واجهات خلفية MERN stack وايضا تمكنك من تطوير تطبيقات الهاتف ومن الممكن ان تستعملها لتصبح FULL STACK Developer.
    أما  دورة تطوير تطبيقات الويب باستخدام لغة PHP بعد الانتهاء من هذه الدورة يمكنك ان تصبح مطور برمجيات بلغة php باطار عمل لارافيل و ووردبريس وهذه الدورة تؤهلك لتصبح مطور واجهات خلفية بواسطة php.
    ويمكنك قراءة الإجابات التالية لمزيد من التفاصيل حول الدورة والوظيفة التي يمكنك العمل بها بعد إنهاء الدورة :
     
  5. إجابة محمد عاطف17 سؤال في كيف أعطي العميل الموقع على WordPress؟ كانت الإجابة المقبولة   
    وعليكم السلام ورحمة الله وبركاته.
    هل الإستضافة Hosting خاصة بك أم بالعميل ؟
    إذا كانت خاصة بك إذا يجب تسليمه الملفات ليقوم برفع موقعه بنفسه أو يعطيك هو بيانات الإستضافة الخاصة به وتقوم أنت برفع الملفات مع ربط الدومين الخاص به في الإستضافة.
    أما إذا كانت الإستضافة خاصة بالعميل ولكنك قمت بربط الدومين الخاص بك فيمكنك تعديل الـDNS من لوحة التحكم cpanel أو لوحة التحكم الخاصة بالإستضافة وتقوم بكتابة بيانات ال DNS  الخاصة بالدومين الجديد في لوحة التحكم مثل إعدادات A Record و CNAME .
    ويجب عليك مستقبلا الإتفاق مع العميل على كل شئ مسبقا مثل الإستضافة والدومين . و يمكنك فقط رفع المشروع على الإستضافة الخاصة بك لعرض المشروع على العميل وحتي يستطيع تجربته بنفسه حتي لا تقوم بتسليم الملفات قبل إرسال الأموال إليك . وبعد تجربة الموقع على الإستضافة الخاصة بك و التأكد من أن كل شئ يعمل يمكنك إستلام الأموال منه وتسليمه ملفات المشروع أو رفعه على الإستضافة الخاصة به.
  6. إجابة محمد عاطف17 سؤال في Breadcrumbs لDjango كانت الإجابة المقبولة   
    يجب أولا أن يقوم مطور ال front-end  بتصميم وكتابة أكواد HTML وتنسيقات CSS ووضعها في الصفحة بالإضافة إلى ملفات Javascript إذا كان يوجد animation أو سلوك معين لل Breadcrumb.
    وإذا كانت الروابط معقدة في ال Breadcrumbs  و تتطلب مسارا كبيرا أو عرضها بطريقة ديناميكية فهنا سيتوجب على مطور back-end أخذ الهيكل html من مطور  ال front-end وتضمين الروابط الخاصة بال Breadcrumb في كل صفحة والعمل على إظهارها بالطريقة الصحيحة.
     
  7. إجابة محمد عاطف17 سؤال في هل يمكنني استخدام WordPress إذا تعلمت ال frontend؟ كانت الإجابة المقبولة   
    نعم بالطبع من الأشياء الملزمة لفهم التعامل مع wordpress . ستجد هناك الكثير من الأشخاص الذين يقومون بتعلم wordpress مباشرة دون تعلم php ولكن سيجدون صعوبة في فهم بعض الأمور أو تنفيذها .
    فتخيل أنك تتعلم شئ مبني على أساسيات معينة دون دراسة تلك الأساسيات . بالفعل ستجد نفسك تعرف بعض الأمور ولكن دون الأساسيات لن تلم بجميع الأمور والخصائص.
    لذلك يفضل تعلم أساسيات php على الأقل قبل الدخول في wordpress.
    وبالتوفيق لك إن شاء الله.
  8. إجابة محمد عاطف17 سؤال في مشكلة إزدياد إرتفاع جميع عناصر الـ Grid كانت الإجابة المقبولة   
    وعليكم السلام ورحمة الله وبركاته.
    المشكلة تكمن في السمة grid-rows-3 حيث هذه السمة تحوي الكود التالي :
    .grid-rows-3 { grid-template-rows: repeat(3, minmax(0, 1fr)); } هذا الكود سينشئ شبكة بثلاثة صفوف تتوزع بالتساوي في الارتفاع ولهذا ستجد أن جميع الصفوف ستأخذ طول أكبر صف .
       لذلك يمكنك حذف تلك السمة grid-rows-3 وستجد أن عنصر سيأخذ الطول الخاص به . ولكن جميع العناصر في نفس الصف سيأخذون نفس الطول .
  9. إجابة محمد عاطف17 سؤال في كلمة محددة عندما يكتبها المستخدم تتحول إلى رابط في رياكت كانت الإجابة المقبولة   
    هل قمت بحفظ المقالة بعد إستبدال الكلمات بالروابط أم تم حفظها هكذا دون إستبدال ؟
    إذا لم يتم حفظها بعد الإستبدال إذا يجب إستخدام الدالة replaceText بالإستبدال :
    const replaceText = (text) => { const regex = /phoenix/gi; // البحث عن اسم المدونة const replaced_text = text.split(regex).join( `<a href="/" style="color: blue; font-weight: bold;">phoenix</a>` ); return replaced_text; }; return ( <div dangerouslySetInnerHTML={{ __html: replaceText(content) }} /> ); حيث content هو المتغير الذي يحتوي على المقالة .
    أما إذا تم حفظها بعد الإستبدال ففقط يجب إستخدام  dangerouslySetInnerHTML وهي خاصية  لعرض النص كHTML المعدل :
    return ( <div dangerouslySetInnerHTML={{ __html: =content }} /> );  
  10. إجابة محمد عاطف17 سؤال في خطأ في تشغيل pg Admin كانت الإجابة المقبولة   
    وعليكم السلام ورحمة الله وبركاته.
    أولا يجب عليك إغلاق برنامج pgAdmin تماما وإغلاق رسالة الخطأ التي تظهر لك .
    بعد ذلك يرجى حذف مجلد  pgAdmin  في المسار التالي :
    C:\Users\%USERNAME%\AppData\Roaming مع إستبدال %USERNAME% بإسم المستخدم الخاص بك على ويندوز.
    بعد ذلك قم بفتح برنامج pgAdmin كمسؤل run as adminstrator ويجب على ذلك أن يحل المشكلة إن شاء الله.
  11. إجابة محمد عاطف17 سؤال في استعمال ajax مع جانغو كانت الإجابة المقبولة   
    مرحبا عزيزى محمود .
    الخطأ لديك في templates\store\product-details.html سطر رقم 85 و 86 حيث أنك تضع ال id الخاص بالعنصر input ك 
    id="item-{{ item.sku }}" وهنا معظم ال item لها نفس ال sku فهنا ستجد أن العديد من العناصر لها نفس ال id ولذلك عند الضغط على label فإنه يبحث عن أول عنصر له ال id الخاص به ولذلك فإنه يختار العناصر في المقاس الإفتراضي . ولحل تلك المشكلة نقوم بتحديد متغير أخر له رمز فريد وهو {{ size.id }} وهو لن يتكرر مع ال item.sku لذلك يرجى تغير سطر 85 و 86 بالتالي :
    <input type="radio" name="item" id="item-{{ size.id }}-{{ item.sku }}" value="{{ item.sku }}" class="item-option" {% if forloop.first %}checked{% endif %}> <label for="item-{{ size.id }}-{{ item.sku }}"> <img src="{{ item.image.url }}" alt="{{ item.color }}"> </label> ولقد أرسلت لك الملف بعد التعديل .
    product-details.html
  12. إجابة محمد عاطف17 سؤال في مشكلة في swiper كانت الإجابة المقبولة   
    وعليكم السلام ورحمة الله وبركاته .
    إذا ذهبت إلى صفحة product-details.html  و قمت بفتح ال console في المتصفح ستجد أخطاء ظهرت في ملف main.js وستجد خطأ يظهر في سطر 412 والكود الخاص بال swipper الذي يقوم بإنشاءه في سطر رقم 482 ولهذا يتوقف الكود عند سطر 412 ولا يستمر إلى 482 لهذا لا يعمل معك .
    من المفترض تقسيم ملف main.js إلى عدة ملفات كل ملف خاص بصفحة معينة وملف يحوى جميع الأكواد المشتركة في جميع الصفحات .
    حيث أنك تقوم بالبحث عن عناصر في الصفحة وتضع حدث عليها أو تقوم بتعديل التنسيق الخاص بها وإذا لم توجد تلك العناصر يحدث خطأ لديك ويمنع تنفيذ باقي الأكواد .
    يمكنك قبل العمل على أي عنصر التحقق من وجوده أم لا إذا لم ترد فصل الكود إلى عدة ملفات .
    وحاليا لحل مشكلتك يرجى نقل كود ال swipper في سطر 482 إلى ما قبل سطر 12 ويفضل نقل جميع ال swipper إلى دالة منفصلة و تنفيذها حتي لا تحدث مشاكل .
    ولقد قمت بإرفاق ملف main.js بعد تعديله .
     
    main.js
  13. إجابة محمد عاطف17 سؤال في ما فائدة Token base authentication ؟ كانت الإجابة المقبولة   
    وعليكم السلام ورحمة الله وبركاته .
    نعم بالفعل قديما يتم تخزين بيانات المستخدم في ال session كما كان يحدث في php ولكن لنشرح معا الفرق بين session وبين ال token .
    تعتمد فكرة الـ Sessions على تخزين حالة المستخدم (User State) على السيرفر. عندما يقوم المستخدم بتسجيل الدخول أو زيارة الموقع لأول مرة يتم إنشاء Session له تلقائيا في السيرفر، ويتم تعيين مُعرف (ID) فريد لهذه الـ Session في الخادم ويتم حفظ ال id في المتصفح في ال session ويتم إرسال ال id مع كل طلب . هذا المُعرف يتم استخدامه للتعرف على المستخدم في كل طلب يرسله إلى السيرفر، وبذلك يكون السيرفر قادراً على معرفة هوية المستخدم والتأكد من صلاحيته.
    على العكس تماما الـ Tokens هي عبارة عن عناصر صغيرة من المعلومات (مثل سلسلة نصية) يتم توليدها وتشفيرها من خلال السيرفر بعد عملية تسجيل الدخول بنجاح. يتم تضمين هذا الـ Token في كل طلب يقدمه المستخدم إلى السيرفر. السيرفر يقوم بفحص الـ Token للتحقق من هوية المستخدم وصلاحيته ويتأكد هل ال Token تم التلاعب به أم لا. الـ Token يحمل معلومات مثل هوية المستخدم وأي صلاحيات أو صلاحيات الوصول (Access Permissions) التي لديه.
    المزايا الرئيسية للاستخدام الـ Token-based:
    أمان : الـ Tokens يكون مشفرا لهذا من الصعب التلاعب به أو تزويره. قابلية التوزيع: يمكن توزيع الـ Tokens عبر عدة سيرفرات أو خدمات بسهولة دون الحاجة إلى مشاركة حالة الجلسة بينهم فمن الممكن أن يكون المشروع لديك على عدة سيرفرات أو خدمات لهذا ال Sessions لن تنفع. عديم الحالة (Stateless): الـ Tokens تسمح بإنشاء تطبيقات عديمة الحالة (Stateless Applications)، حيث لا يتم تخزين حالة المستخدم على السيرفر فمن الممكن أن يكون الطلب يتم إرساله من تطبيق هاتف أو حتي تطبيق سطح مكتب أو ويب. لذلك ال Token-based أفضل حاليا من حيث القدرة على توزيع المشروع على عدة سيرفرات و عدم الإعتماد على حالة سيرفر واحد وال session الخاص به.
  14. إجابة محمد عاطف17 سؤال في هل واجهة المستخدم الجديدة افضل كانت الإجابة المقبولة   
    نعم التحديث الجديد جيد هو لم يتم التغير كثيرا هو فقط تم تغير أماكن العناصر ولكن هذا الترتيب حيث يعطيك تفاصيل اليوم كاملة أولا وواضحه وهو ما يريده المستخدم وأصبح متجاوب أكثر للشاشات المختلفة .
    ولكن توجد مشكلة في الحواسيب ستجد scroll bar في أسفل الصفحة لذلك أنصحك بوضع التنسيق التالي لحذفه :
    body { overflow-x: hidden; } وأيضا جزء الطقس ل يوما ليس أفضل شئ في الهواتف والشاشات الصغيرة حيث النصوص تكون بجوار بعض متداخلة وصغيرة ويفضل تغير تصميمها وإليك الكود التالي :
    .weather-slider { display: flex; flex-direction: column; } .weather-day { flex-direction: column; align-items: center; overflow: hidden; } .weather-day img { max-width: 25%; } ويمكنك وضعك الأكواد السابقة داخل media حتي يتم تطبيقها فقط على الشاشات الصغيرة لتصبح شكلها كالتالي :

    ويمكنك تنسيقها كما تشاء .
  15. إجابة محمد عاطف17 سؤال في جلب البيانات من الخادم بواسطة Next js كانت الإجابة المقبولة   
    وعليكم السلام ورحمة الله وبركاته .
    أعتقد أن الخطأ هو في عملية ال chach حيث يقوم nextjs بعمل caching عند إستدعاء ال api بإستخدام fetch .
    ولحل تلك المشكلة نضيف revalidate هكذا :
    async function fetchProperties() { try { const res = await fetch(`${process.env.NEXT_PUBLIC_API_DOMAIN}/properties`,{ next: { revalidate: 10 } }) if (!res.ok) { throw new Error('Failed to fetch data') } return res.json() } catch (error) { console.log(error) } } وهكذا نقوم بجعل next بحذف ال chache بعد 10 ثواني .
    ومن المفترض أن هذا يحل تلك المشكلة .
  16. إجابة محمد عاطف17 سؤال في كيف يمكن تعديل الصلاحيات الخاصة بملفات php في xampp كانت الإجابة المقبولة   
    وعليكم السلام ورحمة الله وبركاته 
    في نظام تشغيل Windows مع XAMPP، لا يمكنك تعيين صلاحيات الملفات بنفس الطريقة التي تفعلها في أنظمة Linux أو Unix. في Windows، الصلاحيات تتحكم بشكل أساسي من خلال خصائص الملفات والأذونات التي تسمح أو تمنع الوصول إلى الملفات و حيث تستخدم أنظمة Linux خصائص (attributes) مختلفة عن التي يستخدمها windows.
    وإذا كنت ترغب في جعل ملف PHP يشابه الصلاحيات التي تجدها في بيئات الاستضافة المدفوعة (مثل 555)، يمكنك القيام بالتالي:
    1-فتح خصائص الملف:
    انقر بزر الماوس الأيمن على ملف PHP الذي ترغب في تعديل صلاحياته.
    اختر properties "الخصائص" من القائمة المنسدلة.

    2-تعديل الأذونات:
    انتقل إلى علامة التبويب security "الأمان".
    انقر على زر  Edit "تعديل" لتعديل الأذونات.

    3-تعيين الأذونات:
    سترى نافذة "الأذونات للملف"، حيث يمكنك تعيين الصلاحيات المناسبة. في حالة 555، يمكنك تحديد خيارات "قراءة" (Read) للجميع (Everyone) وعدم تحديد خيارات الكتابة (Write) أو التنفيذ (Execute).

    بعد تعيين الصلاحيات المناسبة، انقر على "تطبيق" ثم "موافق".
    هذه الخطوات ستسمح لك بتعيين الصلاحيات على ملف PHP بطريقة تقليدية في نظام Windows. يرجى ملاحظة أن XAMPP نفسه يعمل عادة باستخدام حساب مستخدم محلي لنظام Windows، وليس باستخدام حسابات مستخدم قابلة للتخصيص مثلما هو الحال في الخوادم التي تعتمد على Linux أو Unix، لذا تعديل الأذونات في XAMPP يختلف قليلاً عن التعامل معه في بيئات الخوادم.
  17. إجابة محمد عاطف17 سؤال في تغيير في ملف .env كانت الإجابة المقبولة   
    إن أيقونة الإعدادات تشير إلى ملف يحتوى على إعدادات للمشروع .

    وبما أنك لم تق بتعديل إسم الملف وهو يحتوى على نقطة إذا فيبدو أنك قد قمت بحذف الإضافة الخاصة ب vs code التى تسمى Material Icon Theme .
    لذلك من فضلك تأكد هل الإضافة مثبته لديك ومفعلة أم لا .
    ثم قم بالضغط على set file icon theme و قم بإختيار الإضافة Material Icon Theme من الاختيارات التى سوف تظهر لك .
    .
    وقم بإعادة تشغيل vs code ستجد أن الأيقونات قد عادت كما هى .
  18. إجابة محمد عاطف17 سؤال في خطأ في إستقبال معامل route في لارافيل كانت الإجابة المقبولة   
    يوجد لديك عدة أخطاء .
    اولا في ملف web.php فى السطر الذى تقزم بتحديده هذا السطر زائد ولا يجب كتابته حيث انك قمت بتعريف resource لل blog ولهذا فإن هذا السطر لا يجب كتابته .
    اما الخطأ الذى يظهر لديك هو انه يستقبل en وليس ١ لانك قمت بكتابة prefix ووضعت local parameter لهذا يجب على الدالة show ان تستقبل معاملين الاول هو اللغه local والثانى هو id لذلك قم بإضافة معامل قبل ال id يسمى lang .
  19. إجابة محمد عاطف17 سؤال في كيف اعرض جزء من النص كانت الإجابة المقبولة   
    يمكنك إستخدام الكود التالى :
    فى ملف ال html 
    <p id="text-p">This is a paragraph Test Test Test.</p> هنا قمنا بإنشاء عنصر وقد أعطينا له id مخصص يساوى text-p .
    والآن فى كود js 
    let p = document.getElementById('text-p'); let text = p.innerText; const textShort = `${text.substr(0,7)} ...` p.innerText = textShort; هنا فى أول سطر قمنا بإحضار العنصر الذى يحوى النص , ثم بعد ذلك إستخرجنا النص عن طريق الخاصية innerText .
    والآن أنشئنا متغير جديد يحوى النص المختصر وأعطينا قيمته `${text.substr(0,7)} ...`  حيث هنا إستخدمنا الدالة substr وهى تقوم بأخذ جزء معين من النص وقمنا بتحديد 0 و 7 أى أننا نريد أن نأخذ من النص من أول حرف إلى الحرف رقم 7 مع إحتساب المسافات من ضمن النص ومن ثم وضع ثلاثة نقاط بعد النص أو أى شئ تريده .
    لذلك إذا أردت عدد أحرف معين قم فقط بتغير رقم 7 إلى الرقم الذى تريده .
    وأخيرنا قمنا بإسناد تلك القيمة إلى الخاصية innerText وبذلك سيتم إستبدال النص الحالى بالنص الجديد الذى هو جزء من النص الأساسي
  20. إجابة محمد عاطف17 سؤال في إضافة عداد تنازلي لموعد انتهاء وقت التسليم كانت الإجابة المقبولة   
    اذا كنت تريد انشاء واحد او اكثر من عداد واحد فيجب استبدال ال id بال class حتى نستطيع التعامل مع جميع العدادات.
    ووضع وقت العداد الذى يتم اعادته من قاعدة البيانات فى العنصر عن طريق خاصية ال data .
    الان هذا كود show.blade.php
    <tbody> @foreach ($homeworks as $homework) <tr> <td>{{ $homework->id }}</td> <td>{{ $homework->title }}</td> <td> <div class="counter wow animate__animated animate__fadeInDown"> <div class="defaultCountdown" data-date="{{$homework->deadline}}"> </div> </div> </td> </tr> @endforeach </tbody> فى الكود السابق قمنا خاصية data-date للعنصر وهى الآن تحتوى على ال deadline الذى يأتى من قاعدة البيانات .
    والآن هذا هو كود الجافاسكريبت .
    <script src="assest/JavaScript/jquery-3.1.1.min.js"></script> <script src="assest/bootstrap/js/bootstrap.min.js"></script> <script src="assest/jquery.countdown/js/jquery.plugin.min.js"></script> <script src="assest/jquery.countdown/js/jquery.countdown.min.js"></script> <script src="assest/jquery.countdown/js/jquery.countdown-ar.js"></script> <script> $(function () { $('.defaultCountdown').each(function (i) { const time = new Date($(this).data('date')); $(this).countdown({ until: time, format: 'odHMS' }); }) }); </script> هنا قمنا بعمل حلقة تكرار على العناصر التى تحتوى على السمة defaultCountdown ثم انشاء التاريخ عن طريق استرجاع القيمة من خاصية ال data-date و من ثم إنشاء العداد .
    والآن سيتم انشاء اى عدد من العدادات على حسب ما يتم استرجاعه من قاعدة البيانات 
  21. إجابة محمد عاطف17 سؤال في ربط الداتابيس مع جافاسكربت عن طريق flask python كانت الإجابة المقبولة   
    اعتقد ان المشكلة لديكى فى جزء الحفظ فى قاعدة البيانات فلقد قمتى بالخطأ فى ترتيب ادخال البيانات .
    cur.execute("INSERT INTO products (ProductName, ExpiryDate, Ingredient) VALUES (%s, %s, %s)", (product_name, ingredient, date_value)) لاحظى انكى يجب ادخال اسم المنتج ثم تاريخ الانتهاء ثم المكونات . ولكنى قد قمتى بالتبديل بين التاريخ والمكونات.
    لذلك استبدلى السطر لديكى بهذا السطر .
    cur.execute("INSERT INTO products (ProductName, ExpiryDate, Ingredient) VALUES (%s, %s, %s)", (product_name,date_value ,ingredient)) واذا لم يحل المشكلة فاعقتد ان المشكلة لديكى فى قاعدة البيانات وللتاكد اكثر يجب ارسال رسالة الخطأ التى تظهر فى منفذ الاوامر لديكى 
  22. إجابة محمد عاطف17 سؤال في طريقة تقليل بطئ اظهار الصفحة بسبب select مع 4000 option كانت الإجابة المقبولة   
    نعم توجد عدة طرق لحل تلك المشكلة و يجب حلها حتى تساعد فى جعل موقعك اسرع و يكون متوافق مع محركات البحث SEO .
    يمكنك حل تلك المشكلة عن طريق عدم تحميل ال options فى بداية الصفحة ولكن عند الضغط على select نقوم بارسال طلب AJAX للسيرفر نقوم منه بجلب بيانات ال options عن طريق الجافا سكريب وبعد تحميل الطلب نقوم بانشاء تلك ال options وهذا كود مثال للحل .
    <!DOCTYPE html> <html> <head> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script> </head> <body> <select id="select_id"> <option selected>Select</option> </select> <script> $(document).ready(function () { $("#select_id").one('click', function () { $.ajax({ url: "https://jsonplaceholder.typicode.com/users", type: 'GET', success: function (response) { var select = $('#select_id'); $.each(response, function (key, data) { select.append('<option value=' + data.id + '>' + data.email + '</option>'); }); } }); }) }); </script> </body> </html> هنا قمنا باستخدام مكتبة jquery لارسال الطلبات و انشاء ال options بعد رجوع الطلب .
    اولا يجب عليك انشاء عنوان لارجاع البيانات الخاصة بال select على السيرفر .
    واستخدام الكود السابق فى الواجهة الامامية مع استبدال العنوان الذى يتم ارسال الطلب له بالعنوان لديك وايضا طريقة انشاء ال option قم فقط باستبدال البيانات التى تريد وضعها والان عند الضغط على عنصر select سيتم ارسال الطلب وانشاء ال options تلقائيا.
     
    او يمكنك استخدام مكتبة select2 وهى جيدة لمثل هذه الحالات وتوجد بها خصائص جيدة مثل البحث و ايضا اظهار علامة التحميل بينما يتم ارسال الطلب للسيرفر.
  23. إجابة محمد عاطف17 سؤال في مشكلة Failed to listen on 127.0.0.1:8000 (reason: ?) عند استخدام laravel herd كانت الإجابة المقبولة   
    هذا ليس المكان الخاص بال php.ini 
    من فضلك قم بالذهاب للمسار التالى 
    C:\Users\{user}\.config\herd\bin مع استبدال {user} باسم المستخدم لديك على الجهاز.

    ثم اذهب الى المجلد php على حسب الاصدار لديك . او فقط قم بتنفيذ هذا الامر وسيشير الى مكان ملف ال php.ini
    php --ini
     
    ثم قم بفتح php.ini وابحث عن variables_order وقم بتغيرها الى GPCS هكذا .
    variables_order = "GPCS" وذلك سيحل المشكلة ان شاء الله
  24. إجابة محمد عاطف17 سؤال في سؤال عن برمجه تطبيق Desktop كانت الإجابة المقبولة   
    وعليكم السلام ورحمة الله وبركاته .
    ان لغه php واطار عمل لارافيل هو فى الاساس لبناء تطبيقات الويب ولكن توجد مكتبات لتحويل تطبيق الويب هذا الى desktop application ولكنه فى الاساس يعتبر تطبيق ويب .
    وهو شئ ليس سيئا ولكنه يعتمد على ما تريده انت فافضل لغه لبرمجة ال desktop application هى C# ASP.NET .
    ويمكنك سؤال المبرمج هل سيقوم بانشاء تطبيق ويب وتشغيله لديك على متصفح ؟ ام سيقوم بتحويل التطبيق الى ملف يمكن تثبيته ليعمل لديك على الجهاز .
    واذا كان التطبيق ستستعمله على جهاز واحد فالافضل هو تطبيق الويب من وجهة نظرى .
  25. إجابة محمد عاطف17 سؤال في عربة التسوق لا تعمل كانت الإجابة المقبولة   
    الخطأ لديك فى هذا الملف  src\hook\cart\add-to-cart-hook.js فى مشروع الواجهة الامامية . فى سطر رقم 25 .
    if (item.availableColors.length >= 1) هنا انت تقوم بالتحقق من طول ال availableColors و هى ليست موجودة فى المتغير item لذلك يحدت الخطأ حيث لا يمكن استدعاء الخاصية length على undifined .
    والحل هو التحقق اولا من وجود ال availableColors هكذا .
    if (item.availableColors?.length >= 1) حيث ان علامة ال ? تتحقق اولا من ان القيمة ليست null او undefined قبل تنفيذ ما بعدها وهكذا تكون قد حلت المشكلة .
    و قد لاحظت ان معظم الاخطاء من هذا النوع حيث لا يقوم السيرفر الخلفى بارجاع البيانات التى تستخدمها فى الواجهة الامامية لذلك يجب عليك اولا التحقق من البيانات التى تعود لك من السيرفر قبل العمل عليها.
×
×
  • أضف...