-
المساهمات
4657 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
30
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو بلال زيادة
-
السبب هو حجم الصورة الكبير , لذلك يعطي تأخر بسيط في ظهور الصورة , ولكن لا مشكلة في ذلك. يمكنك تقليل على حجم الصورة و من ثم محاولة تجربة تحميل الصفحة مرة أخرى.
-
من الممكن أن يكون بسبب حجم الصورة إذا كان كبير جداً , ايضا ممكن أن يكون بسبب الكاش المخزن ( الملفات المؤقتة ) ويجب حذف هذا الكاش بالضغط على ctrl+f5 في لوحة المفاتيح, حاول رجاء فعل ذلك , و إذا لم ينجح الأمر حاول إرفاق صورة من الصفحة التي توجد بها المشكلة .
-
يمكنك استخدام Widgets SizedBox() , Expanded() بحيث تقوم بإضافة الزر داخل إحدى هذه Widgets بهذا الشكل Expanded( child: TextButton( child: Text("Lang"), onPressed: (){} ), ) أو SizedBox( child: TextButton( child: Text("Lang"), onPressed: (){} ), )
- 1 جواب
-
- 1
-
-
يمكنك إنشاء حقل باسم isAdmin و قيمته تكون أما 0 أي عضو , 1 أدمن , مدير, في جدول users $table->integer('isAdmin')->default(0); ومن ثم إنشاء Seeder لإضافة يوزر افتراضي للموقع عن طريق تنفيذ الأمر التالي php artisan make:seeder UserSeeder ثم تقوم بفتح هذا الملف من خلال المسار التالي database\seeds ومن ثم تقوم بإضافة بيانات اختبارية أو اليوزر الذي تود إنشائه عن تثبيت المشروع الخاص بك داخل ملف UserSeeder $user = \App\User::create([ 'name' => 'user', 'email' => 'user@user.com', 'password' => Hash::make('123123123'), 'phone' => '', 'isAdmin' => 1, ]); وتعطيه قيمة حقل isAdmin = 1 , ومن ثم تقوم بإنشاء ملف Controller لإضافة مستخدمين عن طريق الأمر التالي php artisan make:controller Admin\UsersController --resource ومن ثم بداخل هذا الملف نقوم بكتابة أكواد إضافة مستخدمين و تعديل مستخدم و حذف مستخدم فيمكن إضافة مستحدمين عن طريق الكود التالي /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { $countries = Country::all(); return view('admin.users.create', compact('countries')); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], ]); $users = new User(); $users->name = $request->name; $users->email = $request->email; $users->phone = $request->phone; $users->password = \Hash::make($request->password); if($request->hasFile('image')){ $img = time() . '.' . $request->file('image')->getClientOriginalExtension(); $users->image = $img; $request->image->move(public_path('assets/users_img'), $img); } $users->save(); \Session::flash('alert-success', trans('lang.success_add')); return redirect()->route('users.index'); } وكامل الملف يكون <?php namespace App\Http\Controllers\Admin; use App\Http\Controllers\Controller; use Illuminate\Http\Request; use App\User; use Illuminate\Support\Facades\Hash; use Str; class UsersController extends Controller { /** * Create a new controller instance. * * @return void */ public function __construct() { } /** * Display a listing of the resource. * * @return \Illuminate\Http\Response */ public function index(UsersDataTable $users) { return view('admin.users.index'); } /** * Show the form for creating a new resource. * * @return \Illuminate\Http\Response */ public function create() { return view('admin.users.create'); } /** * Store a newly created resource in storage. * * @param \Illuminate\Http\Request $request * @return \Illuminate\Http\Response */ public function store(Request $request) { $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users'], 'password' => ['required', 'string', 'min:8', 'confirmed'], ]); $users = new User(); $users->name = $request->name; $users->email = $request->email; $users->phone = $request->phone; $users->password = \Hash::make($request->password); if($request->hasFile('image')){ $img = time() . '.' . $request->file('image')->getClientOriginalExtension(); $users->image = $img; $request->image->move(public_path('assets/users_img'), $img); } $users->save(); \Session::flash('alert-success', trans('lang.success_add')); return redirect()->route('users.index'); } /** * Display the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function show(Request $request, $id) { $user = User::find($id); if(! $request->ajax()){ return view('admin.users.show', compact('user')); }else{ return view('admin.users.modal.show', compact('user')); } } /** * Show the form for editing the specified resource. * * @param int $id * @return \Illuminate\Http\Response */ public function edit($id) { $user = User::find($id); $users = User::all(); return view('admin.users.edit', compact('user', 'users')); } /** * Update the specified resource in storage. * * @param \Illuminate\Http\Request $request * @param int $id * @return \Illuminate\Http\Response */ public function update(Request $request, $id) { $request->validate([ 'name' => ['required', 'string', 'max:255'], 'email' => ['required', 'string', 'email', 'max:255', 'unique:users,email,' . $id], ]); $users = User::find($id); $users->name = $request->name; $users->email = $request->email; $users->phone = $request->phone; if($request->hasFile('image')){ $img = time() . '.' . $request->file('image')->getClientOriginalExtension(); $users->image = $img; $request->image->move(public_path('assets/users_img'), $img); } $users->save(); \Session::flash('alert-success', trans('lang.success_update')); return redirect()->route('users.index'); } /** * Remove the specified resource from storage. * * @param int $id * @return \Illuminate\Http\Response */ public function destroy($id) { $user = User::find($id)->delete(); \Session::flash('alert-success', trans('lang.success_delete')); return redirect()->route('users.index'); } } ثم تقوم بإنشاء middleware للتحكم بالأعضاء للسماح لهم بالدخول إلى الملف أو لا عن طريق الأمر التالي php artisan make:middleware IsAdmin ثم نتوجه إلى المسار التالي لفتح الملف IsAdmin.php app\Http\Middleware ونقوم بوضع شرط معين إذا كان العضو الذي يريد الدخول إلى الصفحة قيمة الحقل isAdmin تساوي 1 يمكنه الدخول إلى هذه الصفحة public function handle($request, Closure $next) { if (auth()->guard('web')->user()->isAdmin == 1) { return $next($request); } else { return redirect('/404'); } //return $next($request); } فيكون كامل الملف <?php namespace App\Http\Middleware; use Closure; class IsAdmin { /** * Handle an incoming request. * * @param \Illuminate\Http\Request $request * @param \Closure $next * @return mixed */ public function handle($request, Closure $next) { if (auth()->guard('web')->user()->isAdmin == 1) { return $next($request); } else { return redirect('/404'); } //return $next($request); } } ثم نقوم بإضافة هذا Middleware الذي قمنا بإنشائه إلى ملف Kernel.php داخل المسار التالي app\Http إلى مصفوفة $routeMiddleware = []; بهذه الطريقة 'admin' => \App\Http\Middleware\IsAdmin::class, ثم نقوم بفتح ملف web.php و إضافة المسار إلى هذا الملف ويكون المسار Route::group(['middleware' => ['auth:admins'], 'prefix' => 'admin'], function(){ Route::resource('users', 'Admin\UsersController'); });
- 2 اجابة
-
- 1
-
-
صحيح ,لأنه تم فقط إضافة بيانات اختبارية فقط لجدول users. يمكنك إضافة بيانات اختبارية لباقي الجداول كيفما تريد.
- 8 اجابة
-
- 1
-
-
هل من الممكن تتفقد جدول users بأنه يوجد به حسابات للمستخدمين ؟
- 8 اجابة
-
- 1
-
-
تم الأمر و لكن لا يبدو أن لديك ملفات أختبارية تم إنشائها أو تم وضعها في ملف DatabaseSeeder..php .
- 8 اجابة
-
- 1
-
-
رجاءًا حاول إعادة تشغيل السيرفر من جديد, أو حاول الدخول إلى ملف laravel.log في مجلد storage و قراءة أي أخطاء قد تسبب هذا الأمر , ايضا حاول تنفيذ الأمر التالي php artisan migrate --force ثم محاولة تنفيذ الأمر التالي php artisan migrate:fresh --seed ليتم إضافة البيانات الأختبارية بعد تهجير الجداول إلى قاعدة البيانات. أرجوا إخباري بالنتيجة.
- 8 اجابة
-
- 1
-
-
حاول معرفة أي إصدار bootstrap تستخدمه ومن ثم قم بوضع pagination::bootstrap-4 مع تغيير إصدار البوتستراب {{$questions->links('pagination::bootstrap-4')}} إذا لم يكن مجلد vendor داخل مجلد views فيمكنك استخدام الأمر التالي لتقوم بنشره داخل مجلد views php artisan vendor:publish --tag=laravel-pagination ومن ثم يمكنك تخصيص ملف ترقيم الصفحات بوضع أي استايل تريده عن طريق وضع الملف الجديد {{$questions->links('myfile')}}
- 2 اجابة
-
- 1
-
-
يمكنك إنشاء استعلام يمكنك من خلاله جلب بيانات التصنيف بهذه الطريقة $sql = mysqli_query($connection, "SELECT * FROM category WHERE id = $category_id"); هذا استعلام عادي في PHP أو من خلال laravel يمكنك إنشاء علاقة بين جدول posts , categorys بحيث كل تصنيف لديه عدة منشورات و تكون العلاقة في ملفي Model الخاص بالجدولين و لنفرض أن جدول posts لديه ملف Post.php و جدول categories لديه ملف Category.php فالعلاقة ستكون باسم hasMany أي كل تصنيف يملك أكثر من منشور و في ملف Category.php يمكنك إضافة العلاقة التالية public function posts(){ return $this->hasMany(Post::class); } وملف Post.php يحتوي على التالي public function category(){ return $this->belongsTo(Category::class); } وخلال الاستعلام يمكنك جلب هذه العلاقة بهذه الطريقة $posts = Post::with('category')->get(); أي قمنا من خلال with جلب العلاقة category و يمكنك جلب أكثر من علاقة بهذا الشكل $posts = Post::with('category', 'اسم العلاقة الثانية')->get(); و من ثم يمكنك إنشاء حلقة تكرار بحيث تقوم بجلب المنشورات ومن خلال العلاقة category يمكنك الوصول إلى بيانات جدول categories بهذا الشكل @foreach($posts->category() as $category) <h3>{{ $category->name ?? '' }}</h3> @endforeach
- 2 اجابة
-
- 1
-
-
باستخدام replaceOne يمكنك فقط استبدال المستند بأكمله, بينما updateOne تقوم بتحديث الحقول في المستند. ايضا باستخدام replaceOne ستفقد الحقول الموجودة في المستند القديم غير الموجودة في المستند الجديد. باستخدام updateOne يمكن إضافة حقول جديدة دون فقدان الحقول الموجودة في المستند القديم . هذه أمثلة توضح الفرق باستخدام replaceOne , updateOne . { "id": ObjectId("123"), "code": 123 } باستخدام replaceOne بهذه الطريقة replaceOne({ "id": ObjectId("123")}, {"code2": 321}); تكون نتيجة الكود كالتالي { "id": ObjectId("123"), "code2": 321 } بينما باستخدام updateOne updateOne({ "id": ObjectId("123"), }, {$set: {"code2": 321}}) تكون نتيجة الكود { "id": ObjectId("123"), "code": 123, "code2": 321 }
-
يمكنك إضافة ما يلي إلى ملف التكوين المقدم عند تشغيل mongod --config mongod.conf لآخر إصدار من MongoDB storage: mmapv1: smallFiles:true لإصدار 2.6 storage: smallFiles:true لإصدار 2.4 و الإصدارات التي أقل : smallFiles:true ثم قم فقط بتنفيذ mongod لقبول ملف التكوين الخاص بك , ويفترض أن يكون موقع ملف التكوين هو /etc/mongodb.conf أو يمكنك تشغيل mongod باستخدام الأمر التالي mongod --dbpath /data/db --smallfiles
- 2 اجابة
-
- 1
-
-
هل يمكنك وضع صورة للخطأ أو نص للخطأ الذي يظهر ؟, أو تأكد إسناد قيمة في خاصية value في وسم option بهذا الشكل <select name="food"> <option value="0">الأختيار الأفتراضي</option> @foreach ($items as $item) @if ($loop->last) @isset($selected) <option value="{{$item->id ?? ''}}">{{$selected}}</option> @endisset @endif @endforeach </select> بحيث تقوم بوضع خارج loop وسم option افتراضي وتسند له قيمة معينة و في داخل loop يمكنك تنفيذ كود جلب البيانات , و من ثم إزالة خاصية selected حتى لا يحدث خطأ في عملية أختيار option الافتراضي, و في طبيعة الحال يقوم وسم select باختيار أول option كخيار افتراضي في حالة عدم تحديد أي option كخيار افتراضي عبر خاصية selected.
- 2 اجابة
-
- 1
-
-
علامة النسبة المئوية هي شائعة في العديد من لغات البرمجة, ليس فقط في Python , يحدد الباقي عند القسمة على رقمين , لذا في المثال يتم التحقق من الأرقام الزوجية إذا قسمت على 2, فإن الباقي يساوي 0 , فهو عدد زوجي . if i%2==0: تتحقق مما إذا كان الرقم زوجياً. for i in range(1, 101): if i%2==0: print(i) ونتيجة هذا الكود هي 2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 42 44 46 48 50 52 54 56 58 60 62 64 66 68 70 72 74 76 78 80 82 84 86 88 90 92 94 96 98 100
- 3 اجابة
-
- 1
-
-
الخطأ يخبرك أن حقل user_id لا يجب أن يكون فارغ , تأكدي من إسناد قيمة لهذا الحقل , أو قومي بإضافة هذا الحقل إلى مصفوفة fillable$ في ملف المودل protected $fillable = ['user_id']; يمكنك إسناد قيمة لهذا الحقل بهذا الطريقة $Role = Role::create([ 'name'=>'super', 'user_id => 1, ]); أو $Role = Role::create([ 'name'=>'super', 'user_id => $id, ]); أو إذا كنتي تقومين بإرسال البيانات عن طريق فورم $Role = Role::create([ 'name'=>'super', 'user_id => $request->user_id, ]);
-
هناك عدة طرق منها , يمكنك إنشاء مسار Route::get('/search', 'GalleryController@search')->name('search'); بحيث يكون مسؤول عن عملية redirect , وتكون دالة search مهمتها جلب القيمة التي تم إرسالها بالفورم public function search(Request $request) { return redirect()->route('getData', $request->name); } طبعاً نعرف مسار آخر لعرض الرابط كما نريد http://127.0.0.1:8000/search/mobile وليكن المسار بهذا الشكل Route::get('/search/{name}', 'GalleryController@foundData')->name('getData'); وتكون دالة foundData هي دالة عرض بيانات عن طريق القيمة التي نبحث عنها public function foundData(Request $request, $name) { $books = Book::where('title', 'like', "%{$request->name}%")->paginate(12); $title = ' عرض نتائج البحث عن: ' . $request->name; return view('gallery', compact('books', 'title')); } ويكون form الإدخال بهذا الشكل <form class="form-inline col-md-6 justify-content-center" action="{{ route('search') }}" method="GET"> <input type="text" class="form-control mx-sm-3 mb-2" name="name"> <button type="submit" class="btn btn-secondary mb-2">ابحث</button> </form> بحيث يكون نوع الإرسال من نوع GET و رابط التوجيه هو {{ route('search') }} و حقل الإدخال يحمل خاصية name="name" <input type="text" class="form-control mx-sm-3 mb-2" name="name">
- 1 جواب
-
- 1
-
-
هل يوجد لهذا العضو صلاحيات ؟ ربما لم تقومي بإعطاءه أي صلاحية , برجى أرفاق صورة من مجلد roles في قاعدة البيانات .
-
لاحظ أن %USERPROFILE%\ معناها هو مجلد user profile على الجهاز و هو يقصد به مجلد تعريف المستخدم الخاص بك في مجلد المستخدمين على محرك نظام windows الخاص بك , والذي يكون على معظم أجهزة الكمبيوتر على القرص C فلاحظ عندما قمت بتنفيذ هذا الأمر في cmd cd %USERPROFILE%\ سيقوم بفتح المسار التالي C:\Users\Bilal> ماذا لو أردنا إنشاء مجلد في هذا المسار نقوم باستخدام الأمر التالي mkdir %USERPROFILE%\\TestFolder فسيقوم بإنشاء مجلد باسم TestFolder في المسار التالي على الحاسوب C:\Users\Bilal> عندما كنت تستخدم الأمرين mkdir projects > cd projects لاحظ انه عندما تقوم بفتح cmd تلقائياً يكون المسار الموضوع هو مسار مجلد تعريف المستخدم
- 1 جواب
-
- 1
-
-
هنا لدينا وسم select لأختيار أكثر من خيار نريد تخزينه, <select class="form-control select2" name="permissions[]" id="permissions" multiple required> </select> عرفنا ذلك عنا طريقة إعطاء الوسم select خاصية multiple, أي يعني في هذا الكود نود إعطاء المستخدم أكثر من صلاحية محددة نقوم باختيارها , يعني هذا اننا نريد إضافة مصفوفة من الخيارات فتم وضع [] بجانب permissions , name="permissions[]" ثم قمنا بعمل loop على جميع الصلاحيات المخزنة لدينا في قاعدة البيانات و عرضها داخل قائمة select باستخدام وسم option مع وضع id كل صلاحية في الخاصية value للوسم option , @foreach($permissions as $id => $permissions) <option value="{{ $id }}" {{ in_array($id, old('permissions', [])) ? 'selected' : '' }}>{{ $permissions }}</option> @endforeach ثم قمنا بالتحقق عبر دالة in_array هل يوجد id الصلاحية في المصفوفة permissions , إذا كان يوجد نقوم بتحديد هذه الصلاحية من ضمن قائمة الصلاحيات التي يتم عرضها للمستخدم, {{ in_array($id, old('permissions', [])) ? 'selected' : '' }} يمكنك مراجعة وسم select أولاً لتفهم إلية عمل الكود كاملاً من هنا
-
حاول إزالة الأسطر التالية (function() { 'use strict'; }); و الأقواس المعكوفة الخاصة بها و محاولة تنفيذ الكود مرة أخرى.
- 7 اجابة
-
- 1
-
-
يمكنك استخدام Google reCapatcha بحيث يمكنك تضمين مكتبة api.js <script src="https://www.google.com/recaptcha/api.js"></script> ثم يمكنك إنشاء وظيفة رد الاتصال callback للتعامل مع التوكن token <script> function onSubmit(token) { document.getElementById("MyForm").submit(); } </script> ثم في زر الإرسال الخاص بالفورم يمكنك وضع الخصائص التالية class="g-recaptcha" data-sitekey="reCAPTCHA_site_key"data-callback='onSubmit' data-action='submit' مثل <button class="g-recaptcha" data-sitekey="reCAPTCHA_site_key"data-callback='onSubmit' data-action='submit'>Submit</button> يمكنك من هنا قراءة كافة التعليمات للتعامل مع Google reCapatcha.
-
هناك فكرة بسيطة و هي class لكل زر فمن الممكن إعطاء كل زر class معين بهذا الشكل <button class="btn btn-success center-submit m7md1 size19 updateData" type="update">تحديث البيانات</button> <button class="btn btn-danger center-submit m7md1 size19 addData" type="submit">إضافة كجديد</button> و من ثم التعديل على الزر الخاص بالتحديث للبيانات بإضافة خاصية data-id ويتم وضع id البوست أو التعليق الذي نود تحديث بياناته بهذا الشكل <button class="btn btn-success center-submit m7md1 size19 updateData" data-id="1" type="update">تحديث البيانات</button> أو <button class="btn btn-success center-submit m7md1 size19 updateData" data-id="<?=$comment->id;?>" type="update">تحديث البيانات</button> ومن ثم عند الضغط على زر تحديث نقوم بالتأكد من الزر المضغوط عليه في jQuery بهذا الشكل $(document).on('click', '.updateData', function(){ }); ومن ثم بداخل أقوام function في الكود السابق نقوم بجلب id المنشور أو التعليق $(document).on('click', '.updateData', function(){ var id = $(this).data('id'); }); ومن ثم نقوم بوضع باقي الكود الذي يقوم بتنفيذ التحديثات على المنشور أو التعليق $(document).on('click', '.updateData', function(){ var id = $(this).data('id'); /// هنا باقي الكود });
- 7 اجابة
-
- 1
-
-
يمكنك جلب ip الزائر باستخدام الدالة التالية function getClientIP( ) { $ip = ""; if ( isset( $_SERVER['REMOTE_ADDR'] ) ) { $ip = $_SERVER['REMOTE_ADDR']; } else if ( isset( $_SERVER['HTTP_X_FORWARDED_FOR'] ) ) { $ip = $_SERVER['HTTP_X_FORWARDED_FOR']; } else if ( isset( $_SERVER['HTTP_CLIENT_IP'] ) ) { $ip = $_SERVER['HTTP_CLIENT_IP']; } return $ip; } بحيث تقوم باستدعاء الدالة getClientIP في الكود الخاص بك , لتتمكن من مقارنة ip كل زائر ومنع تكرار عملية المشاهدة أكثر من مرة . ربما تكون طريقة الاعتماد على ip الزائر هي أفضل وسيلة , حيث يضا يتم الاعتماد على ip الزائر في نظام التصويت و قد أبدت فعالية كبيرة هذه الطريقة.
- 3 اجابة
-
- 1
-
-
يمكنك جلب محتويات المجلد عن طريق حزم directory-tree إذا اردت الاستغناء عن استخدام path.dirname(__filename) حيث يمكنك تنزيل المكتبة باستخدام الأمر التالي npm install directory-tree ثم يمكنك كتابة الكود التالي const directory = require('directory-tree'); const files = dirTree('./files/'); console.log(files);