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

محمد عاطف17

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

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

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

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

    29

كل منشورات العضو محمد عاطف17

  1. او يمكنك استخدام wire:ignore لتمنع إعادة بناء الخريطة مرة اخرى <div class=" mb-3 col-md-12 " wire:ignore > <label class="form-label">الموقع </label> <div id="map" style="height: 300px;"></div> </div>
  2. اذا لم تكن تحتاج ملف ال map API فى كل مكان وتحتاجه فقط فى صفحة ال index حيث يوجد ال modal فيمكنك حذفهم من script.blade.php وبعد هذه المتغيرات يمكنك إنشاء متغير جديد ولنعطه اسم مثلا isRenderedBefore public $isRenderedBefore = false; وهنا قبل فتح ال modal نضع هذه السطر $this->isRenderedBefore = true; وفى ملف ال index الخاص بال modal نضع هذا الكود @section('script') @if (!$isRenderedBefore) <script async src="{{ asset('/js/leaflet/mapsGoogleapis.js') }}"></script> <!-- Google Map Api like file --> @endif <script src="{{ asset('/js/leaflet/mapLeaflet.js') }}"></script> <!-- Google Map Api file --> @endsection جرب هذا وإن شاء الله بيظبط معك
  3. اين تقوم باستدعاء هذه الملفات ؟ الخطأ فى صفحة ال index حيث انك حين تقوم بفتح ال modal او إرسال نموذج التحقق فإن livewire يقوم بإعادة تحميل صفحة ال index وبالتالى ملفات استدعاء ال map API تقوم بالتحميل مرة اخرى ولذلك يحدث الخطأ لان ملفات ال api يجب ان تعمل فى اول مرة فقط قبل ان تقوم الصفحة بالتحميل وعندما تعيد تحميل الصفحة تحدث المشكلة . لذلك الحل يتوقف على مكان استدعائك لهذه الملفات . فلترسل لى اين تقوم باستدعائها لاساعدك باذن الله
  4. هذه خاصية فى laravel تسمى Service Container وهى فعليا من اقوى الخصائص التى يتميز بها laravel حيث انك عند استعمالها توفر عليك مجهودا كثيرا . هذه الخاصية تقوم بعمل حقن القيم للدوال عند استدعائها تلقائيا دون الحاجة منك إلى ان تمررها . و الاقوى من ذلك ان laravel يتعرف على نوع المتغير ويقوم بحقنه تلقائيا . وهذه الخاصية فى ال routes تسمى ب route binding حيث لارافل يتعرف تلقائيا على المتغير ويقوم بحقنه . مثلا لو كان لديك عنوان url يقوم بعرض المستخدم مثلا . وهذه العنوان كالتالى Route::get('/user/{user}'); هنا قمنا بتعريف عنوان لعرض المستخدم و {user} هنا هى ال id الخاص بالمستخدم . وهنا فى الكود الخاص بال controller public function show(User $user){ dd($user); } هنا ستلاحظ ان laravel قام تلقائيا بالبحث عن المستخدم بال id الموجود فى العنوان وقام بحقنة فى المتغير user$ واذا لم يوجد هذا المستخدم فلارافيل تلقائيا يظهر خطأ 404 غير موجود . ولمعرفة كيفية إنشاء مثل هذه الخاصية و معلومات اكثر يمكنك قراءة هذه المقالة Service Container
  5. يجب ان تضيف ال mongo في المسار الخاص بال environment variables. هل يمكنكران تخبرنى اصدار الويندوز الخاص بك لاخبرك بطريقة اضافته فى ال environment variables
  6. هل يمكنك ارسال الكود كاملا . الخطأ بالفعل انك تقوم بإرسال ال ajax دون ان يتم تحميل google api اولا لذلك يظهر هذا الخطأ. ولمساعدتك بشكل افضل أحتاج لرؤية الكود المستخدم
  7. مرحبا . هل توجد أى اخطاء فى ال console ؟ هل يمكنك إرسال الكود الخاص بال modal . لان المشكلة كما أعتقد انك تقوم بتهيئة الخريطة دون ان يكون العنصر موجود . document.getElementById("mapid") // هذا العنصر غير موجود فى الصفحة
  8. مرحبا . فى لغة c++ لا يمكنك حفظ هذا الرقم فى متغير من نوع long long حيث ان هذا الرقم يتعدى ال 10 الاف خانة . يمكنك حفظ القيمة المدخلة ك string وليس كرقم حتى تتمكنى من حفظها فى متغير. ويمكنك الحصول على اخر خانة عن طريق هذا الكود str.substr(str.length() - 1) ويمكنك تحويلها الى int عن طريق استخدام الدالة stoi int lastDigit = stoi(str); ومن ثم طرح الرقم من 10 وهذا هو ناتج حل المسألة اما اذا كنتى تريدن حفظها فى unsigned long long فاقصى رقم يمكنك حفظه هو 18,446,744,073,709,551,615 ولتحصلى على اخر خانة يمكنك اخذ باقى قسمة الرقم على 10مثل int lastDigit = mynumber%10 ; // get last digit
  9. نعم بالفعل يجب اولاً رفع الملفات الخاصة بال backend وأيضاً قاعدة البيانات . حيث انك بالفعل قمت بإنشاء ال API'S الخاصة بالمشروع ب laravel و frontend تقوم بإرسال واستقبال البيانات لل backend لذلك يجب اولا رفع مشروع laravel على هوست كما فى مواقع الويب العادية
  10. مرحبا . لمعرفة الخطأ لنبدأ اولا بقراءة رسالة الخطأ . رسالة الخطأ تشير أن المؤشر (index) خارج المجال (range) ورسالة الخطأ هذه تتكرر كثيرا إذا حدث وحاولت الوصول إلى مكان خارج المصفوفة (array) . إذاً إذا ظهر هذا الخطأ لك مستقبلا فلتعرف أنك تحاول الوصول إلى عنصر غير موجود فى المصفوفة . إذاً ستخبرنى انك لم تستخدم المصفوفة فعلاً إنك لم تستخدمها ولكنك قمت بإستخدام الدالة format اللتى تقوم بإستخدام المصفوفات . وبما أن المصفوفات تبدأ من العنصر 0 وليس العنصر 1 إذا يجب ان تستخدم الترتيب بدايةً من 0 في دالة format وليس 1 لهذا الخطأ يخبرك بانه يتوقع اربع عناصر وانك قمت بإرسال ثلاثة فقط "{1}, {2}, {3}" لانه يعتبر ان رقم ثلاثة هو العنصر 4 فى المصفوفة لذلك الحل الصحيح هو print("{0}, {1}, {2}".format('a', 'v', 'c'))
  11. الخطأ هنا فى هذا الجزء $b_exists=Classification::where('classification','=',$input['classification'])->exists(); الخطأ انك لا ترسل فى البيانات ال classification. لاحظ انك ترسل فقط ال _token section_name description ولحل المشكلة يجب إرسال ال classification مع البيانات المرسلة.
  12. إن عملية تشفير كلمة المرور هى عملية تتم في إتجاه واحد .أى انه لا يمكن أن يتم إسترجاع كلمة المرور من القيمة المشفرة وذلك للحفاظ على الأمان . ولذلك نقوم بإستخدام الدالة check للتاكد من ان كلمة المرور مطابقة للقيمة المشفرة وهذا الكود التالي يوضح الطريقة . if (Hash::check('password', $hashedPassword)) { // الكود المنفذ إن تم التطابق } أول معامل للدالة هو كلمة المرور المدخلة من المستخدم و ثاني معامل هو القيمة المشفرة في قاعدة البيانات . والدالة تقوم بمقارنة المعاملين وإن كان هناك تطابق فسوف يتم تنفيذ الكود بداخل if .
  13. نعم توجد طريقة فى لارافيل تستخدم للتاكد من وجود القيمة في قاعدة البيانات . $validator = Validator::make($request->all(), [ // ... 'category_id' => 'exists:categories,id', ]); بعد كتابة exists: نقوم بتمرير اسم الجدول و إن كان العمود له اسم مختلف عن اسم العنصر المرسل نمرر بعدها اسم العمود
  14. الطريقة تعتمد على الكود الخاص بال HTML فإن التلاعب بعناصر ال DOM تعتمد بشكل أساسي على طريقة كتابة ال HTML فالطريقة الثانية تستخدم إن كان العنصر الذي يتم الضغط عليه هو ما نريد ان نقوم بحذف ال class الخاص به . بينما الطريقة الأولى إن لم يكن نفس العنصر الذي تم الضغط عليه
  15. لأن في الحالة الأولى قد تم تحديد العنصر الذي يحتوي على class يسمى artec1 وبذلك سوف يقوم بحذف ال class بينما في الحالة الثانية فإن العنصر item هو الذي لديه class يسمي btn وهو لا يحتوي على class يسمى artec1
  16. هناك اكثر من طريقة أخي . حيث ان القيمة الخاصة بالعنصر من نوع time هى سلسلة نصية وليست من نوع وقت ولذلك فإن التعامل معها مختلف قليلا. القيمة اللتي تعود من العنصر عبارة عن hh:mm وللحصول على قيمة الساعات والدقائق نستخدم الدالة split والتى تقوم بفصل السلسلة النصية إلي مصفوفة العنصر الاول هو الساعات والثانى هو الدقائق ويمكنك جمعهم كيفما تشاء. document.getElementById('time').addEventListener('input',(event)=>{ const time = event.target.value.split(':'); console.log(time); // ['الساعات','الدقائق'] // time[0] توجد بها الساعات // time[1] توجد بها الدقائق // وللعمليات الحسابية تاكد من وضع علامة الجمع قبل المتغير للتحويل الى رقم }) والطريقة الثانية هى إنشاء متغير من نوع تاريخ و هذا المتغير لديه الكثير من الدوال التي تقوم بتسهيل العمل على الوقت document.getElementById('time').addEventListener('input',(event)=>{ const time = event.target.value; var target = new Date("2022-01-01 " + time); // هنا نقوم بكتابة اى تاريخ فقط لانشاء المتغير وقيمته غير مهمة console.log( target.getMinutes(),target.getHours()); // بعد أن قمنا بإنشاء المتغير الخاص بالتاريخ يمكننا استخدام الدوال التالية للحصول على الوقت // getMinutes للحصول على الدقائق الدالة // getHours للحصول على الساعات الدالة })
  17. وإياكم أخي . موجود لمساعدتك في أى وقت.
  18. وعليكم السلام . إن قمت بتنصيب الملفات علي جهازك فإنك لن تحتاج إلي filezilla لأنه يستخدم لمشاركة الملفات بين الخوادم . وبما أن الملفات علي جهازك فأنت تسطيع الوصول إليها دون إستخدام أى برامج . ومن الواضح انك تستخدم برنامج xampp كمضيف لملفاتك فستجد الملفات الخاصة بك في هذا المسار C:\xampp\htdocs أو في المسار الذى قمت بتنصيب البرنامج فيه ثم htdocs .
  19. يمكنك إستخدام getElementById للحصول علي العنصر . ولإستخدام القيمة المختارة بواسطة العنصر يمكنك إستخدام .value document.getElementById("timeSyart").value ويمكنك إستخدام الأحداث وبهذا تستطيع تنفيذ ما تريد كلما تم إختيار أو تعديل الوقت . document.getElementById("timeSyart").addEventListener("input", (event)=>{ // هنا نقوم بكتابة الكود وسوف يتم تنفيذه كلما تم إختيار الوقت event.target.value // للحصول على قيمة الوقت });
  20. معنى رسالة الخطأ ان المؤشر الخاص ب ال list خارج نطاق ال list . والخطأ هنا حيث تقوم بإختيار عنصر من roundkeys و هي فارغة يجب أن تقوم باستخدام roundkeys تحتوى على 32 عنصر لتفادى حدوث خطأ .
  21. يمكنك استخدام البرمجيّات الوسيطة (Middleware) في Laravel فلنفترض أن العنوان الخاص بإظهار المعلمين كالتالى Route::get('/teacher/{id}') هنا يمكننا إنشاء و تمرير ال Middleware كالتالى Route::get('/teacher/{id}')->middleware('employee') هنا قمنا بتمرير Middleware يسمى employee وقبل تنفيذ الكود الخاص بهذا العنوان فإن ال Middleware سينفذ أولا. ولإنشاء ال Middleware نستخدم الامر التالى php artisan make:middleware CheckEmployee وسوف يقوم بإنشاء ملف ال Middleware التالى في هذا المجلد app/Http/Middleware <?php namespace App\Http\Middleware; use Closure; class CheckEmployee { public function handle($request, Closure $next) { $user = User::find($request->route('id')); if(!$user) return abort(404); if ($user->shool_id !== Auth::user()->id) { return abort(401); } return $next($request); } } هنا قمنا بإفتراض ان جدول المعلم لديه عمود school_id خاص بالمدرسة التابع لها وقمنا بالتحقق إذا كان هو نفس ال id الخاص بالمدرسة التى تقوم بتسجيل الدخول حاليا وإن لم يكن نفس ال id فسوف نقوم بتحويله الى صفحة غير مخول بالدخول إلي هذه الصفحة . ونفس الامر أيضا مع الإدارة. وهذا المقال يوضح طريقة إنشاء وإستخدام ال Middleware يمكنك الإطلاع عليه Middleware
  22. الدالة setAttribute تستخدم لإضافة أى صفة خاصة بالعنصر ولا تقتصر علي ال class فقط . فيمكنك إضافة إسم للعنصر أو حتى جعله غير مفعل . el.setAttribute("name", "Any_Name"); el.setAttribute("disabled", ""); وهذه الدالة تقوم بمسح القيمة القديمة للصفة وتوضع القيمة الجديدة فإذا قمنا باستخدام صفة class فسوف تقوم بمسح جيمع ال classes الخاصة بالعنصر واضافة ما تم ارساله لها za.setAttribute("class", "one"); // هنا سوف تقوم بمسح جميع لاصناف ووضع الصنف one فقط إذا الكود السابق سوف يقوم بمسح جميع الاصناف ووضع الصنف one فقط . اما بالنسبة للخاصية classList فهي خاصة بالعنصر للتلاعب بالاصناف وتحتوى على دوال كثيرة تسهل العمل . contslide.classList.add('one') // هنا سوف تقوم بإضافة الصنف onde على باقى الاصناف contslide.classList.remove('one') // هنا سوف تقوم بحذف الصنف فقط contslide.classList.toggle('one') // هنا سوف تقوم بحذف الصنف إذا وجد أو ستقوم بإضافته إذا لم يوجد هنا في أول سطر سوف تقوم بإضافة الصنف one الى قائمة الاصناف وبذلك لن يفقد العنصر الاصناف الخاصة به . إذا فإن الفرق بينهم هو ان setAtrribute ستقوم بحذف باقى الاصناف واضافة الصنف المرسل لها فقط . و classList.add ستقوم بالحفاظ على الاصناف السابقة مع إضافة الصنف الجديد . ولذلك فإن الافضل هو استخدام classList لاحتوائها على اكثر من دالة تقوم بتسهيل العمل وخاصة بالاصناف فقط
  23. يمكنك وضع id للعنصر المراد أن تذهب إليه. ووضع اسم ال id فى عنصر a فى href مسبوقاً بعلامة # <a href="#home"></a> <"div id="home>
  24. لمعرفة أين يقع الخطأ فى جزء ال orderBy علينا معرفة كيف يقوم laravel بتحويل هذا الكود الى امر sql. إن laravel يقوم بتنفيذ امرين , للحصول اولا على UserProducts ثم بعد ذلك يقوم بتنفيذ امر اخر للحصول على ال products . لنرى كيف يقوم بتنفيذ ذلك SELECT * FROM `user_products` WHERE `user_id` = 1; SELECT * FROM `products` WHERE `products`.`id` in (1) هنا اولا يقوم بتنفيذ السطر الاول للحصول على userProducts ثم بعد ذلك يأخذ ال id الخاص بال product ثم يقوم بتمريرها للسطر الثانى . ولذلك فإن orderBy ستكون خطأ لانه سيقوم بترتيب السطر الاول عن طريق products.type اللتى لا توجد فى هذه العملية . ولحل تلك المشكلة هناك اكثر من حل وقد اخترت لك اسهل طريقتين . إن كنت تريد ان تقوم بترتيب النتيجة دائما ب product.type فالحل الافضل ان تقوم بالترتيب فى ملف ال model public function products() { return $this->hasMany(Product::class)->orderBy('type'); } وبذلك ستتاكد ان فى حالة استدعاء ال products ستكون مرتبة ب ال type . والطريقة الثانية عن طريق الدمج join UserProducts::join('products',function($join) { $join->on('products.id', '=', 'user_product.product_id') ->where('user_product.user_id', '=', $user->id) ->where('user_product.count', '>', 0); })->orderBy('products.type')->get(); والافضل هنا ان تقوم باستخدام select لتحديد الاعمده التى تريدها حتى لا يحدث خطأ إن كان هناك اعمده لها نفس الاسم فى الجدولين
  25. forEach تأخذ معامل من نوع دالة عكسية او ما يسمى callback function . والدالة العكسية هى دالة يتم ارسالها كمعامل لدالة اخري تقوم بإستخدامها . لفهم الدالة العكسية يجب علينا ان نفهم كيفية إنشائها وإستخدامها وهذا المثال التالى يوضح هذا . function myCallback(result){ // هنا قمنا بإنشاء دالة عادية ولكن يمكن أستخدامها كدالة عكسية console.log(result); } function sum(num1, num2, callback) { let result = num1 + num2; callback(result); // لاحظ هنا قمنا بإستدعاء الدالة العكسية المرسلة كمعامل } sum(5, 5, myCallback); // لاحظ هنا قمنا بارسال دالة كمعامل ثالث لدالة sum كما هو موضح بالكود قمنا بإنشاء دالة عادية تسمى myCallback تاخذ معامل وتقوم بطباعته . ودالة sum تاخذ ثلاث معاملات الاول والثانى رقم نقوم بجمعهم والثالث هو دالة عكسية نقوم باستدعائها بداخلها. إذا نظرت إلى اخر سطر فى الكود قمنا بارسال رقمين ودالة myCallback و ستجد انه يتم طباعة النتيجة مع اننا لا نقوم بطباعة النتيجة بداخل الدالة sum بل الدالة myCallback هى ما تقوم بالطباعة. وكذلك أيضا forEach ترسل لها دالة وهى تقوم بتنفيذها. لنوضح تقريبا كيفية عملها. forEach(callback){ // some code callback(element,index,array); } وهذا مثال بسيط عن كيفية عمل forEach فهى تقوم باخذ الدالة العكسية المرسلة لها وتقوم ببعض الامور ثم تقوم باستدعائها وما ينفذ هو ما قمت بارساله لها . وتحديد المعامل هو امر قامت بتخصيصيه forEach فاول معامل هو العنصر الحالى فى ال array و ثانى معامل هو ترتيب العنصر فى ال array وثالث معامل هو ال array كامل.
×
×
  • أضف...