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

Adnane Kadri

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

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

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

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

    51

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

  1. إجابة Adnane Kadri سؤال في كيفية التحقق من الفيديوهات المرفوعة على لارافيل Laravel؟ كانت الإجابة المقبولة   
    أنواع mime التي تقوم بوصفها هي ليست الا طريقة لتوصيف انواع الملفات، وقد يحتوي النوع الواحد على العديد من الصيغ او امتدادات الملفات. جرب اضافة qt:
    $validated = $request->validate([ 'file' => 'mimes:mp4,mov,ogg,qt | max:20480' // ... ]); فكل من qt و mov يشيران للنوع:
    video/quicktime ذكر كليهما سيضمن التعامل مع هذا النوع.
  2. إجابة Adnane Kadri سؤال في كيفية تحويل نموذج Model إلى مصفوفة في لارافيل Laravel؟ كانت الإجابة المقبولة   
    ما تتحدث عنه تسميه لارافيل التسلسل الى مصفوفات Serializing To Arrays
    والتسلسل Serialization في Eloquent هو عملية تحليل نموذج او تجميعة الى مصفوفة او كائن JSON. فعند بناء واجهات تطبيق برمجية نحتاج في الغالب تحويل النماذج الى مصفوفات او كائنات JSON ليسهل تصديرها واستيرادها والتعامل معها. يوجد التابع toArray لتحويل ناتج النموذج الى مصفوفة:
    $user = App\Models\User::first(); dd($user->toArray()); السلسلة في رابط الكائنات بالعلاقات Eloquent
  3. إجابة Adnane Kadri سؤال في كيفية التحقق من وجود ملف view في لارافيل Laravel؟ كانت الإجابة المقبولة   
    يوجد التابع exists عن الدالة المساعدة view، يمكنك الاستعانة به للتحقق من ما ان كان هنالك ملف عرض باسم معين.
    تستعمل كـ:
    view()->exists('path.to.myview') او عن طريق الواجهة View كـ:
    View::exists('path.to.myview')  اقرأ أكثر عن الواجهات (Views) في Laravel
  4. إجابة Adnane Kadri سؤال في كيف يعمل APP_KEY في لارافيل Laravel؟ كانت الإجابة المقبولة   
    معروف ان عملية التشفير هي طريقة لحماية البيانات تستعمل خوارزمياتها مفتاحا للتشفير والغاءه.
    بالمختصر المفيد، كل مكون من مكونات لارافيل يستخدم التشفير encyption او يتضمنه يستخدم APP_KEY بشكل ما. مثال:
    ملفات تعريف الارتباط  الجلسات  كلمات المرور رموز csrf  وطريقته في حماية البيانات بهذا الشكل هي في كونه وسيطا خفيا يظهر للتطبيق نفسه فقط. ففي حالة امتلاك طرف آخر لمفتاح التشفير سيمكنه صياغة قيم ملفات تعريف الارتباط والجلسات ورموز csrf واحداث مشاكل كبيرة بتطبيقك. كونه بهاته السرية يسد ثغرة أمنية كبيرة. ستجد انه مشار اليه اصلا كاعداد ضبط للتعامل مع التشفير في لارافيل.
    راجع: التشفير (Encryption) في Laravel. 
    يمكن الاطلاع على انه يتم تحميله من قبل موفر خدمة التشفير في التطبيق، هذا الملف كائن بالمسار:
    Illuminate/Encryption/EncryptionServiceProvider.php  
  5. إجابة Adnane Kadri سؤال في كيفية إستخدام الأمر artisan app:name في لارافيل Laravel؟ كانت الإجابة المقبولة   
    وجدت الحزمة TheDragonCode/laravel-app مكافئة لما كان يقوم به الامر app:name. يمكن تثبيتها عن طريق:
    composer require dragon-code/laravel-app --dev ثم اعادة تنفيذ الامر:
    php artisan app:name <name> يمكن ايضا كفكرة، تعديل قيمة متغير البيئة APP_NAME عن طريق الوصول الى محتويات الملف واعادة كتابتها.
  6. إجابة Adnane Kadri سؤال في كيفية تحديد عمود كمفتاح أساسي Primary Key في نموذج Model في لارافيل Laravel؟ كانت الإجابة المقبولة   
    يوجد الخاصية primaryKey لخدمة هذا الغرض:
    class User extends Eloquent { protected $primaryKey = 'ID'; } لأن لارافيل Eloquent سيفترض أن كل جدول يحتوي على عمود مفتاح أساسي باسم id. نقوم عن طريق هاته الخاصية بتجاوز هذا الافتراض.
  7. إجابة Adnane Kadri سؤال في كيفية تخزين نتائج إستعلامات SQL مؤقتًا في لارافيل Laravel؟ كانت الإجابة المقبولة   
    يمكنك استخدام قاعدة البيانات نفسه كدرايفر تخزين مؤقت لنتائج هاته الاستعلامات. 
    اعداد قاعدة البيانات لتكون دريفر تخزين مؤقت تكون عن طريق اسناد القيمة database للمتغير CACHE_DRIVER في ملف متغيرات البيئة env.
    CACHE_DRIVER=database استعن بالامر:
    php artisan cache:table لإنشاء ملف تهجير يخص جدولي التخزين المؤقت في قاعدة البيانات. يكونان باسم cache و cache_locks
    بعد هذا ستحتاج البدء في استخدامه بشكل عادي. فبدل اعاد الاستعلام كل مرة كـ:
    public function index() { $data = [ 'latest_articles' => Article::orderBy('id' ,'desc')->limit(10)->get(), 'popular_articles' => Article::orderBy('stars' ,'desc')->limit(10)->get(), 'starred_categories' => Category::where('starred' ,true)->get(), 'latest_comments' => Comment::orderBy('id' ,'desc')->limit(10)->get(), ]; return view('yourview' ,compact('data')); } نقوم بـ:
    public function index() { $data = null; // التحقق من ما ان لم يتم من قبل تخزين هذا المفتاح مؤقتا if (!Cache::has('my_data_key')) { // اعادة الاستعلام $d = [ 'latest_articles' => Article::orderBy('id' ,'desc')->limit(10)->get(), 'popular_articles' => Article::orderBy('stars' ,'desc')->limit(10)->get(), 'starred_categories' => Category::where('starred' ,true)->get(), 'latest_comments' => Comment::orderBy('id' ,'desc')->limit(10)->get(), ]; // وضع نتائج الاستعلام في التخزين المؤقت Cache::put('my_data_key', $d , now()->addMinutes(180)); $data = $d; } else{ // جلب البيانات من التخزين المؤقت $data = Cache::get('my_data_key'); } return view('yourview' ,compact('data')); } او لننظم العملية اكثر فتصبح:
    /** * عرض الصفحة الرئيسية للموقع * * @return \Illuminate\Http\Response */ public function index() { $data = $this->loadData(); return view('yourview' ,compact('data')); } /** * تحميل البيانات من التخزين المؤقت * او اعادة تخزينها * * @return array */ private function loadData() { if (!Cache::has('my_data_key')) Cache::put('my_data_key', $this->queryDataFromDB() , now()->addMinutes(180)); return Cache::get('my_data_key'); } /** * تنفيذ استعلامات قواعد البيانات * المحددة * * @return array */ private function queryDataFromDB() { return [ 'latest_articles' => Article::orderBy('id' ,'desc')->limit(10)->get(), 'popular_articles' => Article::orderBy('stars' ,'desc')->limit(10)->get(), 'starred_categories' => Category::where('starred' ,true)->get(), 'latest_comments' => Comment::orderBy('id' ,'desc')->limit(10)->get(), ]; } التخزين المؤقت (Cache) في Laravel
    استفد اكثر من هاته الاجابة
     
  8. إجابة Adnane Kadri سؤال في التعامل مع الكوكيز وحفظ تفضيلات المستخدم وتمييز كل زائر عن الآخر في لارافل كانت الإجابة المقبولة   
    تفضيلات المستخدم فيما يخص وضع التصفح او السمة المفضلة او غيرها تخزن غالبا على المتصفح في التخزين المحلي له، ولا يتدخل لارافيل في ذلك الا في حالات خاصة. لأنها تخص المستخدم كزائر في اوضاع معينة.
    اما بالنسبة لتمييز المستخدمين عن بعض فيتم استعمال الجلسات ورموز الوصول access tokens وغيرها. قد يتم تخزين هاته الرموز في المتصفح وترسل في الترويسات او كمعاملات في طلبيات الـ HTTP القادمة من هذا المستخدم. بحيث يقوم التطبيق باستعمالها لفلترة معلومات تخص المستخدم او جلسته السابقة.
    وقد لا يتم الاعتماد اساسا على لارافيل او الواجهة الخلفية في ذلك، فيتم الاعتماد كليا على الجافاسكربت لتحليلها واستخراجها وحقنها مباشرة الى واجهة المستخدم بعد طلبه الصفحة او الموقع. وهو الأكثر شيوعا. فهي بيانات تخص المستخدم نفسه وتفضيلاته وليس المستخدم والموقع على حد سواء. عموما، يتحكم في هذا نوع هاته البيانات ومدى حساسيتها.
    بمعنى أنك لن تحتاج تمييز المستخدمين عن طريق لارافيل، لأن ذلك سيكون في الغالب عن طريق الجافاسكربت التي ستقوم بحقن بيانات معينة في ملفات تعريف الارتباط، الجلسات او التخزين المحلي تشير الى موقعك. هاته الثنائية: نطاق موقعك - متصفح المستخدم. تعطيه هذا التمييز بشكل تلقائي. ثم ستقاد باقي العملية عن طريق الجافاسكربت هي الأخرى.
  9. إجابة Adnane Kadri سؤال في [mysql] كيفية حذف جميع القيم المرتبطة بحقل معين من كل قاعدة البيانات كانت الإجابة المقبولة   
    هل جربت تعريف القيد ON DELETE CASCADE عند تعريف العلاقات بين الجداول؟
    يتم استخدام هذا القيد في MySQL لحذف الصفوف من الجدول الفرعي تلقائيا عند حذف الصفوف من الجدول الأصلي. مثلا، عندما يقوم المستخدمون بالتسجيل في الموقع ورفع منتجات خاصة بهم مثلا. سيتم التخلص من هاته المنتجات مباشرة بعد حدف المستخدم المعني.
    يمكن اضافة تعريف القيد الى تعريف العلاقة كـ:
    CREATE TABLE some_related_table ( id INT, order_id INT, FOREIGN KEY(order_id) REFERENCES orders(id) ON DELETE CASCADE ); ثم سيتم اعتبار هذا القيد عند كل حذف.
    راجع الاجابة 
     
  10. إجابة Adnane Kadri سؤال في كيفية جللب بيانات المستخدم عند طلب بيانات منشور ما في لارافيل Laravel؟ كانت الإجابة المقبولة   
    يفترض ان تكون هنالك علاقة بين المنشور المراد جلبه والمستخدم. يوجد التابع with لخدمة هذا الغرض، يمكن استعماله لجلب الجدول المرتبط هنا:
    Product::with('user')->find($someProductId); يقتضي هذا ان توجد علاقة بين الجدولين:
    // app/models/User.php public function user(){ return $this->belongsTo(User::class); }  
  11. إجابة Adnane Kadri سؤال في كيفية إستخدام ملف env. مختلف للإختبارات عبر phpunit في لارافيل Laravel؟ كانت الإجابة المقبولة   
    يمكنك تجاوز التابع createApplication لتحديد مسار ملف بيئة جديد غير الافتراضي. 
    يعيد هذا التابع كائنا عن الصنف Illuminate\Foundation\Application.
    يبدوا هذا التابع كـ:
    /** * Creates the application. * * @return \Illuminate\Foundation\Application */ public function createApplication() { $app = require __DIR__.'/../bootstrap/app.php'; $app->make(Kernel::class)->bootstrap(); return $app; } في السمة CreatesApplication الموجودة داخل Tests
    يوجد التابع loadEnvironmentFrom، يمكنك استعماله لتحديد مسار جديد:
    /** * Creates the application. * * @return \Illuminate\Foundation\Application */ public function createApplication() { $app = require __DIR__.'/../bootstrap/app.php'; $app->loadEnvironmentFrom('.env.testing'); $app->make(Kernel::class)->bootstrap(); return $app; } يتم استعمال هاته السمة من قبل الصنف المجرد TestCase الكائن بـ tests. وترث كامل اختبارات الوحدة والميزة هذا الصنف، ويتم تشغيل هذا التابع من السمة عند كل مرة يتم فيها عمل booting للإختبارات. 
    لاحظ أن اي اعداد آخر معرف في ملف phpunit.xml سيتم تجاهل قيمته المسندة له في ملف البيئة الجديد. اي ان الأولوية تكون دوما لملف phpunit.xml فهو المفترض ان يحدد طريقة عمل التطبيق او الاختبارات في بيئة اختبارية.
  12. إجابة Adnane Kadri سؤال في كيفية الحصول على كل محتوى ملف الترجمة في لارافيل Laravel؟ كانت الإجابة المقبولة   
    يمكنك مباشرة حقن اسم ملف الترجمة كمعامل للتابع get:
    Lang::get('file_name'); او ايضا باستعمال الدالة المساعدة __ :
    __('file_name') لاحظ أنه لا يجب الحاق الاسم بامتداد الملف. اي انه لا يجب عليك اضافة php. لتوصيف الملف.
    يمكنك ايضا استعمال الوظيفة file_get_contents بشكل تقليدي كـ:
    file_get_contents(base_path('resources/lang/en/validation.php')) التوطين في Laravel
  13. إجابة Adnane Kadri سؤال في كيفية عرض محتوى معين إذا قام المستخدم غير مسجل في الموقع في لارافيل Laravel؟ كانت الإجابة المقبولة   
    لا حاجة لإنشاء ملفين منفصلين تماما. يمكنك استعمال موجهات القالب blade directives للتحقق من ما ان كان المستخدم مسجلا اما لا لعرض قسم معين من الصفحة.
    يوجد الموجه auth@ للتحقق من ما ان كان المستخدم موثقا:
    @auth // اي محتوى يعرض للمستخدمين الموثقين فقط @endauth يوجد ايضا الموجه guest@ للتحقق من ما ان كان المستخدم غير موثق:
    @guest // اي محتوى يعرض للمستخدمين الزوار فقط @endguest قوالب Blade في Laravel
  14. إجابة Adnane Kadri سؤال في كيفية معرفة إجمالي عدد المستخدمين عند إستعمال ترقيم للصفحات pagination في لارافيل Laravel؟ كانت الإجابة المقبولة   
    كطريقة تقليدية، يمكنك حقن عدد المستخدمين الاجمالي الى متغير وارساله الى ملف العرض كـ:
    // code from controller $users = User::paginate(10); $users_count = User::count(); return view('users.index', compact('users' ,'users_count')); ثم طباعته كـ:
    {{ $users_count }} كطريقة اكثر اختصارا يمكنك الاستعانة بمتغيرات التصفيح pagination variables وتوابعه لخدمة هذا الغرض. يوجد التابع total الذي يعطي العدد الاجمالي للعناصر:
    {{ $users->total() }} اعرف أكثر عن ترقيم الصفحات Pagination في Laravel
  15. إجابة Adnane Kadri سؤال في كيف أجعل الفرع الجديد الذي انشأته هو الفرع الافتراضي في GitHub كانت الإجابة المقبولة   
    من على الصفحة الرئيسية لمستودعك على ال GitHub انتقل الى اعدادات المستودع الخاص بك. من القائمة اليسرى، انقر فوق branches. في قسم الفرع الافتراضي انقر على الاسهم switch to another branch استخدم القائمة المنسدلة التي تظهر وحدد الفرع الذي تريد. احفظ الاعدادات. سيتلقط github الفرع الجديد على انه الفرع الرئيسي، سيمكن الدفع اليه بشكل افتراضي
  16. إجابة Adnane Kadri سؤال في كيفية عمل GROUP BY لأكثر من عمود عند عمل إستعلام SQL بإستخدام eloquent في لارافيل Laravel؟ كانت الإجابة المقبولة   
    التابع groupBy يقبل عددا من المعاملات، يمكنك تمرير كامل اسماء الاعمدة عبرها وسينجح الاستعلام:
    $posts = Posts::groupBy('first_col' , 'second_col')->get(); ايضا سيمكنك اعادة تجميع الصفوف بعد تحديدها عن طريق select:
    $posts = DB::table('posts') ->select(['first_col', 'second_col']) ->groupBy(['first_col', 'second_col']) ->get(); منشئ الاستعلامات في Laravel
  17. إجابة Adnane Kadri سؤال في ما سبب الخطأ error: failed to push some refs to عند محاولة الدفع الى مستودع غيتهب؟ كانت الإجابة المقبولة   
    قد يحدث هذا بسبب انك تحاول الدفع الى فرع غير موجود.
    تأكد ان الفرع الذي تدفع اليه موجود اولا: 
    git branch ثم جرب تنفيذ الامر:
    git push origin master --force او:
    git push origin master:main  
  18. إجابة Adnane Kadri سؤال في كيفية عمل authentication للمستخدمين الموجودين في جدول مختلف عن users في لارافيل Laravel؟ كانت الإجابة المقبولة   
    ما تتحدث عنه يدور حول فكرة authentication guard او حراس المصادقة. يحدد هذا الحارس كيفية تعامل لارافيل مع الطلبيات المختلفة. مثال: يحرس او يتأكد من امتلاك المستخدم رمزا مميزا يشير الى بياناته المسجلة والموثقة في جدول المستخدمين.
    في حالة الحاجة الى انشاء حراس مخصصين وليكن حارسا خاصا بتسجيل دخول المستخدمين المشرفين فقط. يمكن تعريف ذلك في مصفوفة guards في ملف الاعداد app/config.php :
    'guards' => [ 'web' => [ 'driver' => 'session', 'provider' => 'users', ], 'admin_guard' => [ 'driver' => 'session', 'provider' => 'admin_users_provider', ], ], لاحظ اننا نشير الى موفر خدمة نرهنه بالحارس admin_guard. بمعنى انه يجب ايضا تعريف هذا الموفر. يكون ذلك بذات الملف في مصفوفة providers:
    'providers' => [ 'users' => [ 'driver' => 'eloquent', 'model' => App\Models\User::class, ], 'admin_users_provider' => [ 'driver' => 'eloquent', 'model' => App\Models\Admin::class, ], ], بعد هذا سيمكنك مباشرة استعمال هذا الحارس عن طريق حقن اسمه كمعامل في التابع guard لـ Auth:
    $data = ['email' => $request->email, 'password' => $request->password]; if (Auth::guard('admin_guard')->attempt($data)) { return redirect(route('admin.dashboard')); } في حالة الحاجة الى جعل هذا الحارس حارسا افتراضيا قم باسناد اسمه الى القيمة guard في المصفوفة defaults من ملف اعداد عمليات المصادقة auth.php :
    'defaults' => [ 'guard' => 'admin_guard', 'passwords' => 'users', ], استفد امثر من هاته الاجابة شرح guards او guard
    تعرف أيضا اكثر عن الاستيثاق في لارافيل
  19. إجابة Adnane Kadri سؤال في كيف يكون امتحان التخرج في نهاية الدورة؟ كانت الإجابة المقبولة   
    الحصول على الشهادة يتطلب المرور بكامل مراحل الامتحان التي تتضمن:
    حصولك على موعد لمحادثة صوتية يتم فيها نقاش ما قمت به خلال الدورة وما تعلمته فيها. تحديد مشروع تخرج يتم اعطاءه لك يكون متعلقا بما تعلمته. مراجعة المشروع والتخرج. على ان هذا يتطلب اتمام اربعة مسارات تعليمية على الاقل من الدورة التي تريد التخرج منها. رفع المشاريع المنجزة على github والتطبيق العملي مع المدرب خلال الدورة.
    اقرأ اكثر عن الامتحان والحصول على الشهادة
  20. إجابة Adnane Kadri سؤال في Vite manifest not found at: C:\laragon\www\my-project-name\public\/build/manifest.json عند الدخول الى موقع لارافل بعد تتبيثه كانت الإجابة المقبولة   
    قمت باعداد بيئة اختبارية مناسبة، أظن ان المشكلة تحديدا هي في تكوين ملف manifest.json من طرف vite نفسه.
    لجبر توليد هذا الملف في وضع البناء يوجد الخيار build.manifest ضمن كائن اعداد vite في ملف vite.config.js، تعريفه سيحل كامل المشكلة:
    export default defineConfig({ build: { // generate manifest.json in outDir manifest: true, }, .. ثم بالطبع اعادة بناء الاصول عن طريق npm run dev. 
    قد تواجه مشكلة تخبرك ان vite غير معرف ضمن المشروع، يمكنك تثبيته هو الآخر عن طريق 
    npm install vite --save-dev نفس الامر بالنسبة للوحدة laravel-vite-plugin
    npm install laravel-vite-plugin --save-dev ثم npm run dev مجددا. ابق خادم npm مشغلا وشغل php artisan serve وسيعمل معك المشروع بشكل طبيعي.
    أظن ان هاته التعارضات هي بسبب كون النسخة المستعملة من لارافيل نسخة انتقالية فقط، لم يتم فيها اعداد vite بشكل نهائي ولذلك فانه من الطبيعي ان تحدث مثل هاته المشاكل.
    ان كان لا بد من العمل على هاته النسخة، قم بتعريف امر جديد npm run build موافق لـ vite build في ملف package.json لاخراج ملفات الاصول لاحقا
    "scripts": { "build":"vite build", "dev": "vite", .. اعد تشغيل npm run build وستجد انه يتم توليد الملف المشار اليه بشكل عادي. (لاحظ مجلد build الذي ظهر داخل public). قم بتعديل هذا السطر من ملف manifest.json يدويا:
    "resources/css\\app.css": ليصبح:
    "resources/css/app.css": (لاحظ ان هاته الخطوة ضرورية لتجنب مشكلة عدم التعرف على app.css بعد البناء عن طريق npm run build) ثم قم بتحديث الصفحة.
    سيظهر تطبيقك بشكل عادي، يمكن العمل عليه على التطوير والانتاج على حد سواء

    اخبرني ما ان لم يحل هذا المشكلة لديك.
  21. إجابة Adnane Kadri سؤال في كيفية التحقق من حقول مصفوفة من الكائنات في لارافيل Laravel؟ كانت الإجابة المقبولة   
    في حالة تشعب اكثر من مصفوفة عن خاصية ما، يمكنك استعمال السياق parent.*.child للمرور على كامل عناصر كل مصفوفة، بشكل يمكننا من التحقق من كل خاصية كـ:
    "posts.*.title": 'required', "posts.*.content": 'required', "posts.*.additional_tags": 'required' في النسخ الأقدم من لارافيل قد لا يكون هذا الخيار متاحا، يمكنك على كل حال الاستعانة بتكرارة foreach لتكوين مصفوفة قواعد ومقاربة نفس النتيجة، نستعمل FormRequest مثلا كـ:
    public function rules() { $rules = [ 'api_key' => 'required|integer', 'tags' => 'required', ]; foreach($this->request->get('posts') as $key => $val){ $rules['posts.'.$key.'.title'] = 'required'; $rules['posts.'.$key.'.content'] = 'required'; $rules['posts.'.$key.'.additional_tags'] = 'required'; } return $rules; } التحقق (validation) في Laravel
  22. إجابة Adnane Kadri سؤال في خطأ PHP Error: Class 'Database/Factories/ProfileFactory' not found in عند تحديث مشروع لارافيل Laravel كانت الإجابة المقبولة   
    الفكرة هي أن هذا الموضوع نفسه قد تم وصفه في دليل التحديث الخاص بلارافيل 8 من نسخ سابقة كتحديث عال التأثير High Likelihood Of Impact لأن منشئات البذرة database seeders و معامل النماذج model factories ابتداءا من هاته النسخة عرفت ضمن نطاقات اسماء namespaces . اذ تقوم لارافيل بالتعرف عليها وتحميلها تلقائيا من ملف composer.json عن طريق معيار psr-4 وهو احد معايير التحميل التي شاع استخدامها في لارافيل. 
    لفعل ذلك، أضف تعيينات نطاقات الاسماء الجديدة ضمن كائن psr-4 في autoload:
    "autoload": { "psr-4": { "App\\": "app/", "Database\\Factories\\": "database/factories/", "Database\\Seeders\\": "database/seeders/" } }, وبالطبع لا تنسى ازالة كائن classmap من autoload:
    "classmap": [ "database/seeds", "database/factories" ] استفد اكثر من هاته الاجابة 
     
  23. إجابة Adnane Kadri سؤال في التحقق من حجم الشاشة داخل laravel كانت الإجابة المقبولة   
    بالنسبة للواجهة الخلفية، ستمتلك معلومات جد محدودة عن الواجهة الامامية. وتعاملها لا يكون مع الوسائط media، نوعها ومميزاتها بالمعاملات المنطقية المألوفة بشكل يسمح بالعمل على استعلامات الوسائط media queries. ولكنها تتعامل مع منطق آخر تماما: العميل او User Agent. 
    فان كنت تحاول بشكل من الاشكال القيام بـ:
    @if($screensize < 768px) .. اي شيفرة هنا @endif يمكنك الاعتماد على تعقب العميل والتحقق من ما ان كان يتصفح من الهاتف ومقاربة نفس النتيجة بشكل ما كـ:
    @if($agent->isMobile()) .. @endif يمكنك الاستفادة مما تقدمه هاته الحزمة jenssegers/agent . سهلة التثبيت وتوفر التحققات التالية:
    $agent->isMobile(); // التحقق من ما ان كان جهاز العميل جهاز هاتف $agent->isTablet(); // التحقق من ما ان كان جهاز العميل جهازا لوحيا $agent->isDesktop(); // التحقق من ما ان كان جهاز العميل حاسوبا مكتبيا او محمولا لاحظ ان  هاته الحزمة او مثيلاتها في الواجهة الخلفية لا تتعامل مع نقاط التوقف breakpoints وانما مع تحليل نوع الجهاز. يمكنك بشكل من الاشكال معاملتها بذات المنطق، لن تختلف نقاط التوقف من جهاز لآخر إلا بشيء قليل.
  24. إجابة Adnane Kadri سؤال في استفسار بخصوص Google Adsense كانت الإجابة المقبولة   
    على كل، لست المعني باستعمال ملفات تعريف الارتباط او التخزين المؤقت. فقوقل ادسنس ترسل ملف تعريف ارتباط إلى متصفح المستخدم بعد أي ظهور أو نقرة أو أي نشاط آخر ينتج عنه اتصال بخوادمها. تستعمل قوقل هذا لتحسين تجربة استخدامها ولتحسين عملية فلترة محتويات الاعلانات للمستخدمين.
    ولذلك فهي تدفع المستخدمين الى طلب موافقة الزوار من شروط استخدام ملفات تعريف الارتباط من المستخدمين اول مرة، وذلك كشرط لإظهار اعلاناتها واستخدام برنامجها. أي انك ستحتاج طلب ذلك، رغم انك لا تقوم به انت نفسك. لأن قوقل تستخدمه.
  25. إجابة Adnane Kadri سؤال في إرسال فورم تغيير اللغة laravel كانت الإجابة المقبولة   
    النسبة للمثال الذي أرفقته، يحتمل ان يكون هنالك اسناد وظيفة تغيير اللغة عن طريق الأجاكس مثلا الى حدث تغيير العناصر في القائمة. على سبيل المثال:
    var mySelect = document.getElementById('#mySelect'); mySelect.onchange = (event) => { var lang = event.target.value; // changeLanguageViaAjax(lang); } أما بالنسبة لما قمت به انت، فهو صحيح يحتاج فقط تصويبا. تمرير معامل يكون كـ:
    Route::get('/setLang/{local}' .. أيضا المعامل الثاني الممرر الى التابع get يكون اما كـ:
    Route::get('/setLang/{local}' ,[SwichLanguage::class , 'swichLang']); او:
    Route::get('/setLang/{local}' ,'SwichLanguage@swichLang']); كتسمية سليمة اكثر لهذا المسار يمكنك انشاء تسمية ديناميكية بحقن قيمة المتغير local:
    ->name('switchLanguage' ,'{local}') ليكون كاملا:
    Route::get('/setLang/{local}' ,[SwichLanguage::class , 'swichLang'])->name('swicthLanguage' ,'{local}'); يكون الاستعمال مباشرة بحقن الرابط كـ:
    <a href="{{ route('switchLanguage' , 'ar') }}"> عربي </a> <a href="{{ route('switchLanguage' , 'en') }}"> عربي </a>  
×
×
  • أضف...