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

محمد عاطف17

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

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

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

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

    29

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

  1. وعليكم السلام ورحمة الله وبركاته . اولا من الافضل الا يتم الحذف عن طريق الذهاب الى عنوان الحذف بل الافضل ان يتم ارساله عن طريق form . ثانيا انت قمت باستيراد مكتبة sweetalert بنجاح ولكنك لم تستعملها فى الكود لديك . اولا يجب اضافة eventlisnter على العنصر الخاص بالذهاب الى عنوان الحذف ويجب اضافه class اليه . ثم عند الضغط عليه نستخدم الكود الخاص ب sweet alert . <button class="btn btn-danger confirm" id="delete-row"> <a href="delete.php?deleteid='.$id.'" class="text-light text-decoration-none delete">حدف </a> </button> هنا قمنا باضفة class الى العنصر a يسمى delete . <script> let s = document.querySelectorAll('.delete'); for (i = 0; i < s.length; ++i) { s[i].addEventListener('click', (e) => { e.preventDefault(); Swal.fire({ title: "Do you want to save the changes?", showDenyButton: true, confirmButtonText: "حذف", denyButtonText: "الغاء" }).then((result) => { if (result.isConfirmed) { window.location = e.target.href; } else if (result.isDenied) { Swal.fire("لم يتم الحذف", "", "info"); } }); }); } </script> هنا قمنا باحضار جميع العناصر التى تحتوى على ال class الخاص delete ونقوم بالتكرار عليها واستماع الحدث click وانشاء عنصر ال sweet alert الذى يحتوى على زرارين فقط ويمكنك تغير النص الخاص بالزر كما تريد . وعند الضغط على حذف سيتم الحذف واذا تم الغاء ستظهر لك رساله بانه لم يتم الحذف وستبقى فى نفس الصفحة . وهذا هو الكود كاملا !DOCTYPE html> <html lang="ar" dir="rtl"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>الرئيسية</title> <link href="https://cdn.jsdelivr.net/npm/bootstrap@5.0.2/dist/css/bootstrap.min.css" rel="stylesheet" integrity="sha384-EVSTQN3/azprG1Anm3QDgpJLIm9Nao0Yz1ztcQTwFspd3yD65VohhpuuCOmLASjC" crossorigin="anonymous"> <script src="https://cdn.jsdelivr.net/npm/sweetalert2@11"></script> </head> <body> <div class="container"> <table class="table my-5 table-bordered table-striped"> <thead> <button class="btn btn-success mt-3"><a href="index.php" class="text-decoration-none text-light" >اضافة بيانات </a> </button> <tr> <th class="text-center table-primary" scope="col">#</th> <th class="text-center table-primary" scope="col"> الاسم</th> <th class="text-center table-primary" scope="col">البريد الالكتروني </th> <th class="text-center table-primary" scope="col"> رقم الهاتف </th> <th class="text-center table-primary" scope="col"> العمليات </th> </tr> </thead> <tbody> <?php include 'dbcon.php'; $sql="select *from users"; $resault=mysqli_query($conn,$sql); $resault=mysqli_query($conn,$sql); while($row=mysqli_fetch_array($resault)) { $id=$row['id']; echo '<tr > <td class="text-center "> '.$row['id'].' </td> <td class="text-center "> '.$row['name'].' </td> <td class="text-center "> '.$row['email'].' </td> <td class="text-center "> '.$row['phone'].' </td> <td class="text-center"> <button class="btn btn-primary my-3"> <a href="update.php?updateid='.$id.'" class="text-light text-decoration-none"> تعديل</a> </button> <button class="btn btn-danger confirm" id="delete-row"> <a href="delete.php?deleteid='.$id.'" class="text-light text-decoration-none delete">حدف </a> </button> <button class="btn btn-success" id="download" onclick="printPage(10)">طباعة</button> </td> </tr>'; } ?> </tbody> </table> </div> <script> let s = document.querySelectorAll('.delete'); for (i = 0; i < s.length; ++i) { s[i].addEventListener('click', (e) => { e.preventDefault(); Swal.fire({ title: "Do you want to save the changes?", showDenyButton: true, confirmButtonText: "حذف", denyButtonText: "الغاء" }).then((result) => { if (result.isConfirmed) { window.location = e.target.href; } else if (result.isDenied) { Swal.fire("لم يتم الحذف", "", "info"); } }); }); } </script> </body> </html>
  2. كما اخبرتك بالنسبة لموضوع الصور فهذا هو الحل اما بالنسبة لجزء ظهور عنصر ال xml يمكنك استبدال السطر هذا {!! QrCode::size(100)->generate(Request::url()); !!} بهذا الكود {!! substr((string) QrCode::size(100)->generate(Request::url()),38) !!} وهذا الملف كاملا مرفق لك index.blade.php
  3. لحذف عنصر ال xml يجب عليك حذف هذا السطر لانه ليس من عناصر html , لذلك هو يظن انه نص تريد كتابته . اما بالنسبة للصور فان كانت المشكلة ان الصورة خلف النصوص وتاخذ الصف باكمله , فان الخطأ هنا انك تضع الصورة خلفيه على الصف كاملا . لاحظ هنا انك تخبره بان يضع خلفية الصف كاملا . لذلك الحل هو ان تنشئ عنصر جديد يحمل الصورة مثل هذا الكود <td style="text-align: center; padding-bottom: 30px;" > <div style="height: 50px;width: 50px;background-image: url('images/member_image.jpg');background-size: 90px;" ></div> <h1>بطاقة عضو بعثة</h1> <div><img src="images/avatar/defaultImage.png" alt="" style="width: 100px;"></div> <h2>{{ $hajj->full_name_ar }}</h2> <h2>{{ $hajj->full_name_en }}</h2> {{-- <h4>{{ $hajj-> }}</h4> --}} <h4> رئيس اللجنة </h4> <h4> عضو </h4> <h4> عضو </h4> </td> ويمكنك تغير طول وعرض العنصر كما تريد .
  4. الخطأ لديك فى ملف models.py فى سطر رقم 5 حيث انك قمت باستدعاء ال django.contrib.auth.models وقد قمت بتسميتها ب User ولكن عند استخدامها فى سطر 5 قمت بكتابة user لذلك يحدث لديك هذا الخطأ . لحل الخطأ قم بتعديل user الى User هكذا user=models.OneToOneField(User,verbose_name=_('user'),on_delete=models.CASCADE)
  5. هذا الكود بعد التعديل $(document).on("click", ".show-image-modal", function(){ if ($(this).data('type_media') === "video") { $("#video_src").attr("src", $(this).data('video_url')); $("#image_src").hide(); $("#view_media_card_footer").show(); } else { $("#view_media_card_footer").hide(); $("#image_src").show(); $("#image_src").attr("src", $(this).data('image_url')); } $("#image_modal").modal("show"); });
  6. اذا الكود الخاص بالصورة يصبح كالتالى $(document).on("click", ".show-image-modal", function(){ if (item.dataset.type_media === "video") { $("#video_src").attr("src", item.dataset.video_url); $("#image_src").hide(); $("#view_media_card_footer").show(); } else { $("#view_media_card_footer").hide(); $("#image_src").show(); $("#image_src").attr("src", item.dataset.image_url); } $("#image_modal").modal("show"); }); والكود الخاص بالخريطة يصبح كالتالى $(document).on("click", ".show-map-modal", function(){ var location = $(this).data('location'); // الحصول على قيمة اسم الموقع var lat = parseFloat($(this).data('latitude')); // الحصول على قيمة خط العرض var long = parseFloat($(this).data('longitude')); // الحصول على قيمة خط الطول function showMap(lat, long){ var coord = { lat:lat, lng:long}; map = new google.maps.Map(document.getElementById("map"), { center: coord, zoom: 12, scrollwheel: true, }); // Create an info window to share between markers. const infoWindow = new google.maps.InfoWindow(); const marker = new google.maps.Marker({ position: coord, title: location, map, optimized: false, }); marker.addListener("click", () => { infoWindow.setContent(marker.getTitle()); infoWindow.open(marker.getMap(), marker); }); $('#location').val(location); } showMap(lat, long); $("#map_modal").modal("show"); });
  7. هل يمكنك ارسال الكود الخاص بفتح ال modal . اعتقد انك تقوم باستخدام event Listener على ال class show-map-modal وعند الضغظ عليه تقوم بفتح ال modal . اذا كان هذا ما تقوم به فانك عندما تقوم باضافة بيانات جديدة او حتى التنقل بين الصفحات فان livewire يقوم بحذف جميع العناصر واعادة بنائها مرة اخرى وبذلك يتم حذف ال event Listener وهناك حلين لهذه المشكلة . اولا الا تضع ال event Listener على العنصر ولكن على ال document وبذلك اذا حدث اى event click سوف يتم فتح ال modal اذا كان العنصر الذى تم الضغط على يحتوى class show-map-modal $(document).on("click", ".show-map-modal", function(){ // هنا نقوم بتنفيذ شيفرة فتح ال modal }); والطريقة الثانية هى استخدام wire:click وتنفيذ الدالة التى تقوم بفتح ال modal
  8. مرحبا . نعم ان المقال لا يزال يتوافق حتى الان الى اصدار لارافيل 10 حيث انه يقوم بشرح طريقة التعامل مع الصور وحفظها فاذا قمت فقط بفهم الطريقة فستستطيع تنفيذها على اى اصدار لارافيل . ولكن يجب ان تحذر من عدة نقاط . اولا ان بعض الحزم قد تم هجرها ومن الممكن الا تعمل على بعض اصدارات لارافيل مثل laravelcollective/html و patricktalmadge/bootstrapper فمن الافضل الا تقوم بثبيتهم وقم بانشاء ملفات الواجهة الامامية فقط بعناصر html دون استخدام عناصر هذه الحزم ايضا حزمة intervention/image من الافضل تثبيتها عن طريق هذا الامر ولا تستعمل الذى فى المقال لانه يقوم بتثبيت الحزمة التى تتوافق مع اصدار لارافيل 5 . composer require intervention/image وايضا حاول الالتزام باوامر وطريقة كتابة شيفرة لارافيل حيث تم تعديل معظم المصطلحات من لارافيل 5 وصولا الى لارافيل 10 مثل هذا الكود Route::resource('marketingimage', 'MarketingImageController'); // laravel 5 Route::resource('marketingimage', MarketingImageController::class); // laravel 10 ستجد الفرق بين الاثنين من طريقة الكتابة وهذا السطر يعمل جيدا اذا لم تقم بتعديله ولكن من الافضل تعديله ليتوافق مع لارافيل 10. ومن الافضل لك حتى تتعلم طريقة التعامل مع الصور هو فقط فهم الشرح و كتابة الشيفرة بمعرفتك انت ولا بئس اذا حاولت نسخ بعض الاكواد من المقال ولكن الافضل ان تحاول بنفسك شكرا لك
  9. هل يمكنك ارسال جزء الكود الخاص ب lightgallery وايضا الجزء الخاص بالحدث refreshComponentx
  10. نعم هناك طريقة فى لارافيل تستطيع ان تضيف بيانات جديدة فى جملة واحده فقط دون الحاجة الى حلقة مكررة. اولا فى كود ال html يمكنك اضافة inputs لها نفس الاسم وتنتهى باقواس المصفوفة مثل هذا الكود <input type="text" name="city[0][name]"> <input type="text" name="city[0][code]"> <input type="text" name="city[1][name]"> <input type="text" name="city[1][code]"> <input type="text" name="city[2][name]"> <input type="text" name="city[2][code]"> هنا ستجد اننى قمت بكتابة 6 مدخلات لنشرح الكود معا. فى جميع المدخلات ستجد انى قمت بتسميتهم ب city[index][attribute] ستجد ان ال index هو رقم العنصر فى المصفوف وال attribute هو الخاصية لهذا العنصر لنفرض ان المدينة لها اسم و كود مختصر لها . اذا كما فى الكود المرفق اول عنصرين هما لاول مدينة و هو الاسم لها و الكود الخاص بها. وهكذا اذا اردت اضافة اكثر من مدينة ساقوم باضافة عنصرين اخرين مع التاكد من تغير ال index لها . هكذا قمنا بالانتهاء من الواجهة الامامية. لنبدا بجزء الواجهة الخلفية . فى ال controller الخاص بلارافيل فى ال request سنجد انه يوجد مصفوفة اسمها city قد تم ارسالها من الواجهة الامامية ولنرى محتوى هذه المصفوفة معا. $city = $request->city; /* [ ['name'=>'مدينة 1', 'code'=> 'c1'], ['name'=>'مدينة 2', 'code'=> 'c2'], ['name'=>'مدينة 3', 'code'=> 'c3'], ] */ ستجد انها تتكون من مصفوفة رئيسية بداخلها عدة مصفوفات بعدد المدخلات التى قمت بادخالها فى الواجهة الامامية . لناتى لطريقة ادخالها فى قاعدة البيانات . يمكنك استخدام دالة insert لاضافة جميع هذه البيانات بطريقتين سواء كنت تستخدم Eloquent او Query Builder كما فى المثال التالى. City::insert($city); // Eloquent DB::table('cities')->insert($city); // Query Builder
  11. لا شكر على واجب. واياكم اللهم آمين
  12. هناك خطأين لديك فى الكود . اولا فى ملف ال script.js حين تغير ال layout الى ال flex يجب ان يتم استدعاء AOS.refresh() حيث ان ال flex يكون غير مرئى فى بداية تحميل الصفحة ولذلك لا يتم تحميل ال animation حيث يجب ان يكون ظاهر فى الصفحة حتى يعمل جيدا . ثانيا فى ملف ال style.css انت تضع ال opacity ب 0 فى ال flex layout للصور لذلك ال animation لا يعمل جيدا يجب ان تحذف ال opacity وتجعلها فقط ب 0 اذا لم يكن قد حدث اى animation . فى سطر 83 فى ملف ال Script.js قم بتبديل الدالة بهذا الكود //add active class to the layout style const layouts=document.querySelectorAll('.layout span') layouts.forEach(layout=>{ layout.addEventListener('click',function(){ if (this.classList.contains('active')) { return; } const dataLayout=this.dataset.layout; //add active for layout btns layouts.forEach(layout =>{ layout.classList.remove('active'); }) layout.classList.add('active'); // Hide all layout containers const layoutContainers = document.querySelectorAll('.masonry-gallery'); layoutContainers.forEach(container => { container.classList.remove('active'); }); //Remove the animation class from the images,videos (media) mediaElements.forEach(function (media) { media.classList.remove('fade-in-up'); }) // Show the layout container with the corresponding layout attribute const activeContainer = document.querySelector(`.masonry-gallery[data-layout="${dataLayout}"]`); activeContainer.classList.add('active'); //Get the images, vidoes of the active layout const images = activeContainer.querySelectorAll('.masonry-image'); images.forEach(function(img){ // img.classList.add('fade-in-up'); // setTimeout(function(){ // img.classList.remove('fade-in-up'); // // img.classList.add('show') // },1000) }) if(activeContainer.classList.contains('grid')){ masonry.layout(); } else{ AOS.refresh(); } }) }) وفى ملف ال style.css سطر 426 قم بتبديله بهذا الكود .gallery-items .flex.masonry-gallery .masonry-image{ /* width: 18rem; */ width: 100%; height: 25rem; margin-right: 0.85rem; /* transition: all 0.3s ease-out; */ /* animation: fadeInUp 1s ease-out forwards ; */ } .gallery-items .flex.masonry-gallery .masonry-image:not(.aos-animate) { opacity: 0; } وقد قمت برفع الملفات لتستخدمها اذا اردت. ولكنك ستجد مشكلة اخرى وهى انه يحدث delay فى ال animation وهذا سببه عدة اخطاء فى الكود من ال style و ال js ولكن حاليا ال animation تعمل جيدا. واذا كان هناك اى شئ اخر فلتخبرنى script.js style.css
  13. الخطأ هنا <input type="radio" id="starter" name="plan" value="starter"> حتى يعمل ال radio input كما تريد يجب ان يكون لديهم نفس الاسم (name) ويبدو هنا انك قد اخطات فى كتابة الاسم حيث الاثنين الاخرين لديهم اسم palan يجب على الثلاثة ان يكون لديهم نفس الاسم . لذلك قم بتوحيد الاسماء الثلاثة وسيعمل جيدا
  14. نعم بالفعل كلمة not تقوم بتبديل القيمة الحالية من True الى False والعكس
  15. ان السؤال المطلوب انه اذا كان العنصر يساوى flick فيجب ان تغير القيمة الحالة التى تقوم بارجاعها . يخبرك انه فى بداية البرنامج يجب ان تقوم بارجاع true واذا ظهرت كلمة flick يجب ان تبدل true ب false اذا ظهرت كلمة flick مرة اخرى يجب انت تبدل false ب true مرة اخرى . ما تقوم به انت هو انك تبدل true ب false مرة واحدة فقط واذا ظهرت كلمة flick مرة ثانية لا تقوم بتبديل false ب true boo = True for row in range(len(arr)): if 'flick' in arr[row]: boo = not boo arr[row] = boo else: arr[row] = boo print(arr) لذلك نقوم باستخدام هذا السطر boo = not boo وهذا السطر يقوم بتبديل قيمة boo الحالية فان كانت boo تساوى True سيقوم بتبديلها ب False و العكس اذا كانت ب False فسيقوم بتبديلها ب True
  16. نعم ان عنصر ال br ليس مهم هو فقط يفصل بين العناصر او النصوص ويقوك بعمل سطر جديد. و يمكنك استبداله بخاصية ال margin فى ال css مثل هذا الكود هنا نقوم .class { margin:20px 0; // هنا قمنا باضافة فواصل بين العناصر من الاعلى والاسفل بقيمة 20 بيكسل } ويمكنك اضافة هذا ال class للعنصر الذى تريد اضافة فواصل له . يمكنك ايضا استخدام خاصية ال display و هى تسمح لك بتغير طريقة عرض العنصر وان العناصر ذات الخاصية display : inline فهى لا تضيف اسطر جديدة وتجعل جميع العناصر فى سطر واحد ولتغير ذلك تستخدم display: block هكذا <input type="text" style="display: block"> هنا قمنا باضافة ال display لهذا العنصر وبذلك سيفصل بينه وبين العناصر التى قبله والتى تليه بسطر جديد. اما اهمية ال form فهى مهمة جدا لارسال البيانات الى الخادم (server) وحفظها فى قاعدة البيانات حيث لا يوجد اى موقع حاليا لا يحتوى على ال form مثلا صفحات تسجيل الدخول والاشتراك هذه عبارة عن form فبدون هذه ال form لن تسطيع ان ترسل هذه البيانات الى ال server
  17. لم يظهر ال user name لانك فى اول عنصر label لم تضع بينه النص التى تريده ان يظهر ولكن وضعته بين الاقواس وقد اعتبر انه خاصية وليس نص وهذا هو الحل <label for="user name">user name</label>
  18. بالاضافة للحل السابق اذا قمت بتغير اسم الجدول و قمت بتبديل اسم العمود الخاص بالايميل او الباسورد فسيقابلك مشكلتان. اولا اذا قمت بتغير اسم الجدول فيجب ان تنشأ model جديد ليمثل الجدول الجديد . يمكنك انشاء ال model عن طريق هذا الامر , لنفرض ان الجدول الجديد يسمى students . php artisan make:model Student او يمكنك استخدام الملف الخاص بلارافيل User اذا لم تكن تريد ان تنشأ ملف جديد . ويمكنك كتابة هذا السطر فى الملف وسيتعامل ملف ال User مع الجدول الجديد protected $table = 'students'; اذا كنت تستخدم laravel Authentication وقمت بتغير الحقل email فسيجب ان تقوم بتغيرات فى دوال ال login و ال register ليستخدمو الحقل الجديد
  19. اولا اذا قمت بعمل comment لسطر ال return فى الدالة minpositive فان الكود لن يعمل وسيظهر لك خطأ لانك قد قمت بتعريف الدالة minpositive انها تقوم بارجاع رقم int و فى داخل الدالة لا تقوم بارجاع اى قيمة لذا سيظهر لك خطأ . ثانيا لتقوم بارجاع القيمة بطريقة dynamic لتقم باستخدام هذا الكود int minpositive(int nums[], int size) { int check = nums[0]; for (int i = 0; i < size; i++) { if (nums[i] > 0 && abs(check) > nums[i]) { check = nums[i]; } } if (check < 0) return 0; return check; } اولا نقم بتعريف المتغير check باول قيمة فى المصفوفة (array) لانك اذا لم تقم بذلك سيحدث خطأ لنفترض انك قمت بتعريف check لياخذ قيمة 1 و ان ال array لا تحتوى على عنصر رقم 1 وان اصغر قيمة هى مثلا 5 كما فى المثال الخاص بكم ستجد ان القيمة التى سيتم ارجاعها من هذه الدالة هى 1 وهذا خطأ لذلك قمنا باخذ اول قيمة فى المصفوفة ثانيا ستجد انى قمت باضافة abs(check) بدلا من check لان اول قيمة فى المصفوفة من الممكن ان تكون سالبة لذلك ستكون اصغر من اى قيمة موجبة اخرى ولن يتحقق الشرط لذلك قمنا باضافة ذلك. اخيرا ستجدنى قمت باضافة هذا السطر if (check < 0) return 0; لانه فى حالة ان المصفوفة كانت جميعها ارقام سالبة فيجب ان يقوم بارجاع 0
  20. وعليكم السلام ورحمة الله وبركاته يبدو انه لديك إضافة (extension) تقوم بتشغيل الاختبار تلقائيا عند الحفظ . هل يمكنك ارسال صورة بالاضافات لديك واخبارى بلغة المشروع الذى تعمل عليه . اذا كنت لا تريد ان تقوم بتشغيل الاختبار حاليا يمكنك ايقاف هذه الخاصية كالتالى :- اذهب الى الاعدادات (settings) 2. قم بكتابة كلمة openTesting فى شريط البحث ثم قم باختيار neverOpen من القائمة وهكذا لن تظهر مرة اخرى
  21. ان مطور ال full stack من الممكن ان يكون لديه خلفية بسيطة عن css و التنسيقات ولا يجب ان يكون محترف او متمكن فيهما حيث ان التصميم يقوم بعمله ال UI/UX Designer وهى وظيفة مختلفه تماما عن ال full stack وال html وال css ايضا لهم مبرمج خاص بهم فيجب على مطول ال full stack ان تكون لديه خلفية بسيطه حيث انك ستقوم بربط الصفحات الثابته static بالرياكت والباك اند فلعمل هذه الوظيفة ينبغى ان تكون لديك خلفيه بسيطه وليس ان تكون متمكن فيهما. انا مثلا اعمل ك full statck و عملى هو ان اقوم فقط بتركيب القالب على المشروع الخاص بى حيث يقوم اولا ال UI/UX فى الشركة بالتصميم ثم يقوم بارسالها للمبرمج الخاص بال html و css وعند الانتهاء يعطينى القالب واقوم بتركيبه سواء على رياكت او انجيولار وانا اقوم بربط الباك بالفرونت وهذه هى وظيفة ال full stack . واما اذا كنت تريد ان تتعمق فى ال css والتصميم فلا مشكلة حيث ان هذه هى خبرات اضافيه لل full stack وبالطبع ستعطيك افضلية فى الوظائف
  22. عند استخدام الحقول الخاصة لرفع الملفات فى livewire فانه يتعامل معها باختلاف عن الحقول النصية . حيث يقوم livewire برفع الملفات تلقائيا عن اختيار الملف فى مجلد مؤقت ويقوم ايضا بعمل validation عليه للتاكد من انه تم ادخال ملفات صحيحة كما قمت بتعريفها فى القواعد (rules) ويوفر livewire لك ايضا دالة تستخدمها لتعرض للمستخدم الصورة التى تم رفعها ويمكنك استخدامها كالتالى . @if ($contract) <img src="{{ $contract->temporaryUrl() }}"> @endif ولحل هذه المشكلة لديك يمكنك استخدام wire:ignore على العنصر الخاص بالخريطة مثل الكود التالى . <div wire:ignore> {{-- هنا العناصر الخاصة بالخريطة --}} </div> وسيعمل معك جيدا ان شاء الله حيث يقوم wire:ignore بتجاهل هذا العنصر ولا يقوم بتحديثه مع تحديث ال component
  23. ان ال html و ال css هى ليست لغات برمجة هى عبارة عن لغة توصيف (markup language) . تستخدم ال html في انشاء هيكل الصفحة فقط من عناصر و نصوص . أما ال css تستخدم فقط لتعديل تصميم وشكل واماكن العناصر اللتى تم انشائها باستخدام ال html استخدام ال html و ال css فقط لا يفيد حاليا الا اذا اردت ان تنشئ موقع ثابت (static) غير متغير من شخص الى اخر وهو غير مطلوب كثيرا. اما ال javascript فهى لا غنى عنها حاليا حيث تمكنك من التلاعب بالعناصر فى الصفحة وجعل الموقع اكثر ديناميكية من حذف وتعديل واضافه عناصر و نصوص حتى بعد تحميل الصفحة . فيجب عليك استخدام الثلاثة اذا اردت ان تكون مطور واجهات امامية (front end) . اما اذا لم تكن تريد ان تتعامل مع ال html وال css فيمكنك من ان تصبح مطور واجهات خلفية (back end) تتعامل من السيرفرات وقواعد البيانات فيمكنك مذاكرة لغة برمجة php و اى اطار عمل خاص بها سواء ووردبريس او لارافيل
  24. لا للاسف لا يوجد بيانات مجمعة لمراكز المدن . يمكنك البحث عن المراكز الخاصة بالدولة التى تريدها منفصلة و لكنك ستجد صعوبة فى العثور عليها
  25. نعم يوجد لكنها ليست package هى عبارة عن ملف sql خاص بقاعدة البيانات يمكنك تشغليه على السيرفر الخاص بك ويصبح لديك جدول خاص بالدول وجدول خاص بالمدن وهى تدعم اللغه العربية والانجليزية والفرنسية https://github.com/arabnewscms/countries-and-cities-list-with-three-language/tree/master يمكنك تحميل ملف countries_db.sql ورفعه على السيرفر الخاص بك او يمكنك تحميل مجلد laravel_version وهو يحتوى على ملفات ال migrations و ال seeders و تشغيلهم عن طريق ال command الخاص بال artisan php artisan migrate php artisan db:seed --class=CitySeeder php artisan db:seed --class=CountrySeeder
×
×
  • أضف...