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

Hassan Hedr

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

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

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

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

    38

كل منشورات العضو Hassan Hedr

  1. تأكد أن الحقل language موجود في مصفوفة الـ fillable داخل صف ال User كما يلي class User extends Model { protected $fillable = ['language', ...]; ... }
  2. عملك كمبرمج هو اكتشاف الغريب وفهمه وتصحيحه لا تيأس هل تأكدت من انشاء ملف الترجمات "ar.json" في مكانه الصحيح "resources/lang/ar.json"؟ قم بالدخول لقاعدة البيانات والتأكد أن جدول "users" فيه حقل "language" وأن القيمة "ar" موجودة عند سطر المستخدم جرب مؤقتا تبديل شيفرة ال middleware الى التالي فقط للاختبار، يجب ان تتم الترجمة بشكل صحيح في حال ملفات الترجمة يتم تحميلها public function handle(Request $request, Closure $next){ App::setLocale("ar"); }
  3. قم بفرد قيمة attributes بالضغط على السهم المجاور لكي تعاين بيانات الجلسة داخلها وتتاكد من وجود قيمة اللغة الصحيحة بعد ذلك قم بإلغاء السطر السابق "(..)dd" وتأكد من قيامك بإعداد ملف الترجمات في الملف "resources/lang/ar.json" كالتالي { "Home": "الرئيسية", "Users": "المستخدمين", "Languages": "اللغات", "Arabic": "العربية", "English": "الانجليزية", "Contact Us": "تواصل معنا" }
  4. تأكد أن ال middleware مسجل في نواة التطبيق وأن الطلبات تمر عبره، يمكنك وضع التالي (مؤقتًا) والتأكد أن بيانات الجلسة تحتوي على المتحول language بالقيمة الصحيحة public function handle(Request $request, Closure $next){ dd($request->session()); ... }
  5. جرب جلب المستخدم الحالي من قاعدة البيانات عبر المعرف للمستخدم المسجل الآن كالتالي ... if(isset($lang)){ User::find(Auth::id())->update(['language' => $lang]); } ...
  6. في ال middleware الخاص بالترجمة اذا كان المستخدم مسجل دخول فأنت تعين لغة التطبيق كما هي محفوظة في قاعدة البيانات للمستخدم (وتتجاهل بيانات الجلسة التي حددتها بالضغط على خيار اللغة) يجب حفظ خيار اللغة الموجود في بيانات الجلسة في بيانات المستخدم الحالي أولا كما يلي public function handle(Request $request, Closure $next) { $lang = $request->session()->get('language', 'en'); if (Auth::user() != null) { // حفظ خيار تغيير اللغة if(isset($lang)){ Auth::user()->update(['language' => $lang]); } App::setLocale(Auth::user()->language); if (Auth::user()->language == "ar") { View::share('rtl', 'true'); } } else if (isset($lang)) { App::setLocale($lang); if ($lang == "ar") { View::share('rtl', 'true'); } } return $next($request); } }
  7. المشكلة في الروابط href في القائمة المنسدلة فهي روابط نسبية (تبدأ من الصفحة الحالية) وليست مطلقة (تبدأ من بداية العنوان) فعندما تمرر "setlang/ar"مثلا سيقوم المتصفح عند الضغط على هذا الرابط باضافته لنهاية رابط الصفحة الحالية والذهاب اليها في حالتك كانت الصفحة هي projects الرابط الناتج سيكون "projects/setlang/ar" وهو عنوان صفحة غير موجودة في مشروعك (سبب الخطأ 404) لجعل الرابط مطلق قم بإضافة "/" في بداية العنوان بالشكل التالي <li class=""><a class=" bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap" href="/setlang/ar">{{__('Arabic')}}</a></li> <li class=""><a class="bg-gray-200 hover:bg-gray-400 py-2 px-4 block whitespace-no-wrap" href="/setlang/en">{{__('English')}}</a></li>
  8. يبدو انه عند الضغط أول مرة تكون الاحداثيات غير معروفة لذلك يجب التاكد من وجود القيمة coordinate قبل محاولة الوصول الى الاحداثيات منها كما يلي onPress={({ coordinate }) => { if(!coordinate) return // التاكد من وجود قيمة الاحداثيات const {latitude, longitude} = coordinate }}>
  9. يبدو ان التابع onViewableItemsChanged الذي تمرره للمكون غير ثابت ويعاد تعريفه في كل مرة يتم استدعاء المكون const onViewableItemsChanged = function() {...} // يعاد تعريف التابع في كل مرة يجب تمرير تابع بمؤشر ثابت، يمكنك استخدام useCallback لهذا الغرض حيث يتم تعريف التابع فقط اول مرة يستدعى المكون // تابع يعرف بالمرة الأولى فقط const onViewableItemsChanged = useCallback((viewableItems) => { // يستدعى التابع هنا عند تغير العناصر المرئية },[]);
  10. اذا كنت تقصد العناصر وليس العنصر المرئية حاليا يمكنك استخدام onViewableItemsChanged ويمكنك معرفة العناصر مباشرة وليس فقط مؤشراتها <Animated2.FlatList horizontal data={ads} keyExtractor={item => item.id.toString()} onViewableItemsChanged={({ viewableItems }) => { // مصفوفة مؤشرات العناصر المرئية حاليا const viewableItemsIndices = viewableItems.map(item => item.index); // مصفوفة العناصر المرئية حاليا const viewableItems = viewableItems.map(item => item.item); // يمكنك الان استخدامها حسب حاجتك }} style={{backgroundColor: 'red'}} contentContainerStyle={{justifyContent: 'center'}} onScrollEndDrag={() => goToSelectedLocation(selectedIndex)} renderItem={({item, index}) => { setSelectedIndex(index); console.log(index); return ( <MapCard onPress={() => goToSelectedLocation(index)} style={{margin: 4}} title={item.title} image={item.image} price={item.price} />
  11. هل يمكنك نشر الكود بعد التعديل، لكي يتطلع عليه من يمر بنفس المشكلة لاحقًا
  12. احتاج الى تفاصيل اكثر لتحديد المشكلة على اي نظام تقوم بالاختبار Android أم IOS ؟ جرب تمرير الخاصية "provider="google هل الخريطة تظهر وهل يمكنك ارفاق صورة للخريطة وللخطأ ؟
  13. تستخدم enumerate عندما تريد معرفة ال index لكل عنصر من العناصر فهي تحول كل عنصر في المصفوفة من x الى (index, x) في مثالك: months =['January','February','March','April','May','June','July','August','September','October','November','December'] print (list(enumerate(months))) // نطبع الناتج بعد تحويله لقائمة يكون الخرج [(0, 'January'), (1, 'February'), (2, 'March'), (3, 'April'), (4, 'May'), (5, 'June'), (6, 'July'), (7, 'August'), (8, 'September'), (9, 'October'), (10, 'November'), (11, 'December')] وهو غير بنية القاموس التي تريدها
  14. forEach تترجم "لكل من" يقوم هذا التابع بالمرور على كل عنصر من عناصر المصفوفة واحدًا تلو الاخر ويستدعي لك التابع الذي تمرره له مع تمرير العنصر الحالي مثال توضيحي: /** * تابع يطبع القيمة الممرة */ function logItem(item) { console.log(item); // هنا سيمرر كل عنصر على حدى } // مصفوفة عناصر متنوعة const array = [1, "a", { name: "abc" }]; // لكل من عناصر المصفوفة نستدعي تابعًا ما array.forEach(logItem); الخرج سيكون كما يلي: 1 "a" { name: "abc"}
  15. نقوم أولا باستخراج كل اربعة ارقام من النص الى مجموعة، وذلك بتقسيم النص عند كل فاصلة باستخدام التابع explode : $number_groups = explode(',', $number); /** $number_groups = [ "21 1 10 0", "22 0 0 0", "23 0 0 0", "24 0 0 0", "25 0 0 0", "26 0 0 0", "27 0 0 0", "28 0 0 0" ] */ أصبح لدينا مصفوفة تحوي مجموعات الارقام، نمر على كل مجموعة باستخدام التابع array_map، ونستخرج منها أول رقم وذلك بتقسيم نص المجموعة الى اربعة ارقام عن طريق التقسيم عند كل فراغ باستخدام نفس التابع السابق explode : $first_numbers = array_map(function ($group) { // تابع ينفذ لكل عنصر في المصفوفة // $group = "21 1 10 0"... $numbers = explode(' ', $group); // نستخرج الارقام الاربعة // $numbers = ["21", "1", "10", "0"] $first_number = $numbers[0]; // نختار أول رقم // $first_number = ["21"] return $first_number; // نعيد القيمة التي نريد التبديل بها }, $number_groups); // $first_numbers = ["21", "22", "23", "24", "25", "26", "27", 28"] أصبح لدينا مصفوفة الارقام التي نريدها اذا اردتها على شكل نص "21,22,23,24,25,26,27,28" تقوم بجمع عناصر المصفوفة بنص وبفاصلة المحرف "," باستخدام التابع implode كما يلي $result = implode(',', $first_numbers); // $result "21,22,23,24,25,26,27,28" يمكنك جمع الخطوات ووضعها في تابع واحد لسهولة الاستخدام function extractFirstNumbers($number) { $number_groups = explode(',', $number); $first_numbers = array_map(function ($group) { $numbers = explode(' ', $group); $first_number = $numbers[0]; return $first_number; }, $number_groups); $result = implode(',', $first_numbers); return $result; } واستخدامه كما يلي $number = "21 1 10 0,22 0 0 0,23 0 0 0,24 0 0 0,25 0 0 0,26 0 0 0,27 0 0 0,28 0 0 0"; echo extractFirstNumbers($number); // يطبع التالي // 21,22,23,24,25,26,27,28
  16. جرب تمرير احداثيات منطقة العرض initialRegion كالتالي (يمكنك تغيير الاحداثيات لاي مكان تريد عرضه) <MapView style={{flex: 1}} initialRegion={{ latitude: 37.78825, longitude: -122.4324, latitudeDelta: 0.0922, longitudeDelta: 0.0421, }} onPress={({ coordinate, position}) => { const {latitude, longitude} = coordinate // الان اصبح لديك الاحداثيات التي تم الضغط عليها }}> </MapView>
  17. لمعرفة الاحداثيات عند مكان ضغط المستخدم يمكنك الاستفادة من التابع onPress كما يلي <MapView style={{flex: 1}} onPress={({ coordinate, position}) => { const {latitude, longitude} = coordinate // الان اصبح لديك الاحداثيات التي تم الضغط عليها }}> </MapView> لمعرفة وجود مكان مميز عند تلك الاحداثيات، يجب الاستعلام عن ذلك من مزود معلومات الاماكن المميزة حسب تطبيقك : اما من بيانات الاماكن المميزة التي يوفرها تطبيقك (في قاعدة البيانات لديك مثلا) أو الاستفادة بالاشتراك بمزود معلومات خرائط طرف ثالث مثل Google Maps
  18. يمكن ايجاد المسافة باستخدام التابع التالي function distance($x1, $y1, $x2, $y2) { return sqrt(pow(abs($x1 - $x2), 2) + pow(abs($y1 - $y2), 2)); } أو استعمال التابع hypot في PHP كما يلي $distance = hypot($x1 - $x2, $y1 - $y2); كلا الطريقتين تعتمدان مبدأ معادلة حساب الوتر المتشكل بين النقطتين
  19. في اللغات البرمجية غرضية التوجه الـ Constructor هي دالة انشاء Object جديد للصف باستخدام عدد من المتغيرات اذا كانت هنـاك أكثر من طريقة لإنشاء الـ Object في صف معين يمكنك تعريف أكثر من Constructor في نفس الصف وهذا يسمى Constructor Overloading مثال بلغة Java: public class Person{ String name; // Constructor 1 public Person() { this.name = "Default Name"; } // Constructor 2 public Person(String name) { this.name = name; } }
×
×
  • أضف...