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

Mustafa Suleiman

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

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

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

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

    296

كل منشورات العضو Mustafa Suleiman

  1. باستخدام نفس الطريقة: على سبيل المثال، إذا كان هناك عنصر script مع src="../js/file1.js"، يمكن تغيير مساره عند الضغط على الزر كما يلي: button.onclick = function() { const scriptElement = document.querySelector("script[src='../js/file1.js']"); scriptElement.src = "../js/file2.js"; } الكود سيحدث تغييرًا في مسار العنصر script الذي يحتوي على المسار القديم "../js/file1.js"، وسيتم تغييره إلى المسار الجديد "../js/file2.js". ويرجى الانتباه إلى أنه إذا كانت هناك وظيفة محددة تعمل بالفعل في الملف القديم، فلن يتم استدعاؤها بعد تغيير مسار العنصر script، لذلك قد تحتاج إلى إعادة تحميل الصفحة لتشغيل الوظيفة المحدثة. ويمكنك أيضًا استخدام طريقة أحدث وهي باستخدام addEventListener للزر بدلاً من onclick.
  2. من الصعب الإجابة على سؤالك دونّ معرفة التفاصيل، فما الذي تريده تنفيذه بالضبط؟ حيث يمكن تغيير مسار ملف JS ولكن لن يعمل بسبب أن السكريبت لم يتم تحميله وعند إعادة تحميل الصفحة سيعود كل شيء كما كان.
  3. تم إصلاح الأخطاء التي تم الإشارة إليها في ملف ProjectController.php و web.php حيث تم إضافة الكود التالي في ملف web.php الموجود في المسار التالي : routes\web.php use Illuminate\Support\Facades\Auth; وتم إصلاح الخطأ في ملف ProjectController.php ليصبح كالتالي: <?php namespace App\Http\Controllers; use Illuminate\Support\Facades\Auth; use App\Models\project; use Illuminate\Http\Request; class ProjectController extends Controller { /** * Display a listing of the resource. */ public function index() { $projects = auth()->user()->projects; return view('projects.index', compact('projects')); } public function create() { // كود إنشاء المشروع } /** * Store a newly created resource in storage. */ public function store(Request $request) { // } /** * Display the specified resource. */ public function show(project $project) { // } /** * Show the form for editing the specified resource. */ public function edit(project $project) { // } /** * Update the specified resource in storage. */ public function update(Request $request, project $project) { // } /** * Remove the specified resource from storage. */ public function destroy(project $project) { // } }
  4. يمكن استخدام العلامة السالبة "-" أمام الرقم الذي تريد تحويله إلى سالب. لذلك، يمكنك تعديل الكود الخاص بك على النحو التالي: public class Main { public static void main (String[] args) { for (int i = 2; i <= 100; i++) { if (i % 2 == 0) { System.out.println(i); } else { System.out.println(-i); } } } } في المثال، إذا كان العدد فرديًا، فسيتم طباعته مع علامة سالبة، بينما إذا كان العدد زوجيًا، فسيتم طباعته كما هو دون علامة سالبة. ويمكنك الإطلاع على الإجابة الخاصة بالسؤال التالي:
  5. باستطاعتك استخدام الشرطية السالبة "-" قبل أي رقم في الجافا لجعله سالبًا. على سبيل المثال، إذا أردنا طباعة الرقم -5 في برنامج الجافا، يمكننا كتابة الكود التالي: int number = -5; System.out.println(number); سيقوم هذا الكود بطباعة "-5" في الإخراج، ويمكن استخدام أي عدد آخر بدلاً من "-5" لطباعة أرقام سالبة أخرى. أيضًا بالإمكان استخدام العملية الحسابية لضرب أي رقم بالقيمة السالبة 1 (-1) لجعله سالبًا. مثال، إذا أردنا جعل الرقم 5 سالبًا في برنامج الجافا، يمكن استخدام الكود التالي: int number = 5; int negativeNumber = number * -1; System.out.println(negativeNumber); وسيتم طباعة القيمة "-5" في الإخراج.
  6. بالتأكيد، يمكنك رفع مجلد المشروع بعد ضغطه لتفقد المشكلة.
  7. مرحبًا زينا، حاولي تجربة الحل التالي: استخدام cleaned_data بدلاً من self في دالة clean_count، حيث تحتوي cleaned_data على البيانات المدخلة من قبل المستخدم والتي تم تنقيحها (cleaned) من قبل Django. وعند الوصول إلى الحقل product_name، يمكن استخدامه لاسترداد العنصر من قاعدة البيانات باستخدام get بدلاً من filter. ويمكن تعديل clean_count بالشكل التالي: class ProductForm(forms.ModelForm): class Meta: model = Product fields = '__all__' count = forms.IntegerField(widget=forms.NumberInput(attrs={'min': '0'})) def clean_count(self): count = self.cleaned_data['count'] product = Product.objects.get(product_name=self.cleaned_data['product_name']) firscoun = product.firscoun if count < firscoun: raise forms.ValidationError(f'The minimum count for this product is {firscoun}.') return count أما بالنسبة لمشكلة استبدال product_name بـ id، يجب استخدام self.instance.pk بدلاً من self.id، حيث يمثل self.instance.pk مفتاح الأساسي للكائن الحالي. ويمكن تعديل clean بالشكل التالي: class Product(models.Model): ... firscoun = models.PositiveIntegerField(verbose_name=_("Minimum Countete:"), blank=True, null=True) def clean(self): errors = {} firscoun = self.firscoun if self.count < firscoun: errors['min_count'] = f'The min count must be greater than {firscoun}.' if errors: raise ValidationError(errors) ملاحظة: تحتاج clean إلى تعديل لتعمل بشكل صحيح، حيث يجب استخدام self.count بدلاً من self.cleaned_data['count'].
  8. من المفترض أن الكود الصحيح هو كالتالي، وأرجو منك مشاركة الكود هنا من خلال الضغط على علامة <> عند كتابة السؤال بدلاً من الصور وأيضًا كتابة الأخطاء التي تظهر لك، وإذا استمرت المشكلة، أرفق الكود الكامل لملف ProjectController.php public function index() { $projects = auth()->user()->projects; return view('projects.index', compact('projects')); }; public function create() { // كود إنشاء المشروع } والخطأ الثاني الخاص بـ undefined type Auth يظهر لك لأنه يجب عليك استيراد فصل Auth في ملف web.php قبل استخدامه، ويمكنك القيام بذلك باستخدام الكود التالي في بداية ملف web.php: use Illuminate\Support\Facades\Auth; يتم استدعاء هذا الكود لاستيراد الفصل Auth الذي يقدم وظائف المصادقة في Laravel.
  9. هناك طريقة أخرى لتعريف الدالة وهي Function Declaration دونّ الحاجة إلى تخزين قيمتها في متغير والتي تعرف باسم Function Expression. فعند استخدام طريقة Function Declaration يمكنك نداء الدالة بعد تعريفها بالشكل التالي: تتميز Function Declaration بأنها تعريف الدالة باستخدام الكلمة المحجوزة function واسم الدالة وقائمة المعاملات (إذا كانت الدالة تأخذ معاملات) وجسم الدالة بين الأقواس المنفتحة والمغلقة. على سبيل المثال: function myFunction(param1, param2) { // كود الدالة هنا } myFunction(1, 2) وبالطبع يجب كتابة اسم الدالة حتى تتمكن من ندائها وهنا اسم الدالة هو myFunction. ويمكن استدعاء الدالة التي تم تعريفها بواسطة Function Declaration في أي مكان في الكود، حتى قبل تعريفها، لأن الدوال التي تم تعريفها بهذه الطريقة ترفع إلى الأعلى (Hoisting) من قبل JavaScript. بينما Function Expression: تتميز بأنها تعريف الدالة بتعبير يتم تخزينه في متغير. في هذه الحالة، يمكن استخدام تعبير السهم (Arrow Function) أو الدالة المجهولة (Anonymous Function) لتعريف الدالة. على سبيل المثال: // Arrow Function Expression: const myFunction = (param1, param2) => { // كود الدالة هنا } // Anonymous Function Expression: const myFunction = function(param1, param2) { // كود الدالة هنا } يجب تعريف المتغير الذي يحتوي على الدالة قبل استخدامها في الكود، ولا يتم رفع هذا النوع من الدوال إلى الأعلى في JavaScript. يمكن استخدام كل من Function Declaration و Function Expression لتعريف الدوال في JavaScript، ويتوقف الاختيار على المطلوب والأسلوب الذي يسهل فهمه.
  10. في البداية أرجو منك، طرح كافة الأسئلة الخاصة بك المتعلقة بموضوع واحد في سؤال واحد هنا، فقد تم طرح أكثر من سؤال عن المصفوفات ويمكن جمعهم في سؤال واحد هنا. وتنويه آخر بخصوص الأسئلة الخاصة بك هي أسئلة إمتحانية ولا يتم تقديم كود كحل لها بل يتم شرح الخطوات التي تمكنك من تنفيذ ما تريدينه، وإذا واجهتي مشكلة في الحل يمكنك توفير الكود وسيتم مساعدتك في الحل. وهناك 5 أسئلة في الملف الخاص بك في المرفقات عن المصفوفات باستخدام لغة C# وهم كالآتي: اكتب برنامجا يطلب من المستخدم ادخال مصفوفتين من األعداد الصحيحة و يخزن في مصفوفة جديدة جميع عناصر المصفوفة األولى متبوعة بجميع عناصر المصفوفة الثانية. اكتب برنامجا يخزن المصفوفة التالية {3,3,2,2,1,1,1,3,2,1 {و يطلب من المستخدم ادخال رقم للبحث عنه ثم يطبع رقم اخر عنصر داخل المصفوفة يتواجد فيه الرقم الذي ادخله المستخدم و اذا لم يكن الرقم موجودا يطبع للمستخدم 0. اكتب برنامجا يطلب من المستخدم ادخال مصفوفة من األعداد الصحيحة و يطبع ثاني أكبر عنصر في المصفوفة. اكتب برنامجا يطلب من المستخدم ادخال مصفوفة من األعداد الصحيحة و يطبع العناصر األكبر من متوسط جميع العناصر في المصفوفة. اكتب برنامجا يطلب من المستخدم ادخال مصفوفة ثنائية األبعاد من األعداد الصحيحة ويعيد رقم الصف الذي يحتوي على أكبر مجموع خطوات حل السؤال الأول تعريف ثلاث مصفوفات، مصفوفتي الأعداد الأولى والثانية، ومصفوفة جديدة: طلب إدخال المصفوفة الأولى من المستخدم باستخدام دالة الإدخال Console.ReadLine(). تحويل الإدخال المدخل من النص إلى مصفوفة أعداد صحيحة باستخدام دالة التحويل Int32.Parse(). طلب إدخال المصفوفة الثانية من المستخدم باستخدام دالة الإدخال Console.ReadLine(). تحويل الإدخال المدخل من النص إلى مصفوفة أعداد صحيحة باستخدام دالة التحويل Int32.Parse(). تعيين قيم المصفوفة الأولى في المصفوفة الجديدة. تعيين قيم المصفوفة الثانية في المصفوفة الجديدة، بداية من المؤشر الذي يلي آخر عنصر في المصفوفة الأولى. عرض المصفوفة الجديدة للمستخدم باستخدام دالة الإخراج Console.WriteLine(). خطوات حل السؤال الثاني بتعريف مصفوفة من نوع الصحيح وتعبئتها بالقيم التالية: {3,3,2,2,1,1,1,3,2,1}. الطلب من المستخدم إدخال رقم للبحث عنه باستخدام دالة لقراءة الإدخال من المستخدم. البحث في المصفوفة عن الرقم المدخل باستخدام حلقة for. في حال وجود الرقم المدخل، احتفظ بالموقع الذي تم العثور فيه على الرقم. بعد الانتهاء من البحث، قومي بطباعة العنصر الذي يلي العنصر الذي تم العثور فيه على الرقم إذا كان الرقم موجودًا، وإذا لم يكن الرقم موجودًا قومي بطباعة 0. خطوات حل السؤال الثالث استخدام دالة Console.ReadLine() لطلب المصفوفة من المستخدم عبر واجهة الأمر الخاصة بالبرنامج. استخدام دالة Split() لتحويل السلسلة النصية إلى مصفوفة من الأعداد الصحيحة. إنشاء متغيرات مناسبة للحفاظ على العناصر الأكبر والثاني الأكبر في المصفوفة. استخدام حلقة تكرارية للمرور على جميع العناصر في المصفوفة ومقارنتها بالعناصر الأكبر والثاني الأكبر. إذا كانت العنصر أكبر من الأكبر ، فتحديث القيمة الخاصة بالأكبر والثاني الأكبر على التوالي. إرجاع القيمة الثانية الأكبر من المصفوفة باستخدام دالة Console.WriteLine(). خطوات حل السؤال الرابع استخدام الدالة Console.ReadLine() لطلب إدخال المصفوفة من المستخدم. استخدام الدالة Split() لتقسيم النص المدخل إلى مصفوفة من السلاسل. استخدام حلقة for لحساب مجموع جميع العناصر في المصفوفة. حساب متوسط العناصر في المصفوفة عن طريق قسمة مجموع العناصر على عددها. استخدام حلقة for مرة أخرى للبحث عن العناصر التي تزيد عن المتوسط، وإضافة هذه العناصر إلى مصفوفة جديدة. استخدام دالة Array.Sort() لفرز المصفوفة الجديدة. استخدام شرط if للتحقق من وجود عناصر أكبر من المتوسط، وإذا كانت الشرط صحيحة، فإنه يتم طباعة هذه العناصر. خطوات حل السؤال الخامس استقبال المصفوفة الثنائية الأبعاد من المستخدم عن طريق استخدام دالة الإدخال Console.ReadLine() وتخزينها في متغير مناسب. إنشاء متغير لتخزين القيمة القصوى لمجموع العناصر في الصفوف وتعيينه بالقيمة الأولى في المصفوفة. إنشاء متغير لتخزين رقم الصف الذي يحتوي على المجموع الأكبر وتعيينه برقم الصف الأول. البدء في البحث عن الصف الذي يحتوي على المجموع الأكبر. يتم ذلك بتكرار الخطوة الخامسة والسادسة حتى نصل إلى نهاية المصفوفة. إنشاء متغير مؤقت لتخزين مجموع العناصر في الصف الحالي. الحصول على مجموع العناصر في الصف الحالي بواسطة تكرار العناصر في الصف وإضافتها إلى المتغير المؤقت. التحقق إذا كان مجموع العناصر في الصف الحالي أكبر من المجموع الحالي. إذا كان الأمر كذلك ، فتعديل المجموع الأكبر ورقم الصف. بعد الانتهاء من البحث في جميع الصفوف ، يتم طباعة رقم الصف الذي يحتوي على المجموع الأكبر. يمكن ذلك باستخدام دالة الإخراج Console.WriteLine(). وإليك شروحات لتسهيل الأمر عليكي، أتمنى منك دراستها. واجب فصل المصفوفات.pdf
  11. باستطاعتك تشغيل ملفات الـBash script على أجهزة الأندرويد باستخدام تطبيقات مثل Termux و GNURoot Debian. فتلك التطبيقات توفر بيئة لينكس على الأندرويد، وتسمح لك بتشغيل العديد من الأوامر والأدوات التي تستخدمها على أجهزة الكمبيوتر الشخصي. وبالنسبة للتشغيل على أجهزة الويندوز واللينكس، يمكنك تشغيل ملفات الـBash script باستخدام Terminal أو Command Prompt. من خلال فتح Terminal أو Command Prompt وتشغيل الأمر bash تليه اسم الملف الذي تريد تشغيله مثل: bash myscript.sh حيث "myscript.sh" هو اسم الملف الذي تريد تشغيله. ويجب عليك التأكد من أن الـBash script الذي تحاول تشغيله قابل للتشغيل، ويمكنك تغيير صلاحيات الملف باستخدام الأمر chmod في حال لم يكن قابل للتشغيل.
  12. أرجو منك قراءة السؤال الخاص بك سابقًا فقد تم طرح نفس السؤال، وإذا كان لديك سؤال آخر لا تتردد في طرحه
  13. اسم النموذج المحدد app\models\user لم يتم كتابته بالحروف الأولى الكبيرة كما هو معتاد في لارافيل. بالإضافة إلى ذلك، يتعين عليك التأكد من أن اسم المسار المستخدم في النموذج صحيح، حيث يفترض أن يكون المسار إلى نموذج المستخدم app\Models\User بدلاً من app\models\user. لذا، يمكن إصلاح الخطأ بكتابة اسم النموذج بالحروف الأولى كما هو معتاد في لارافيل، وتصحيح المسار ليصبح app\Models\User على النحو التالي بحرف U كبير. $user = App\Models\User::find(1); بعد التعديل، يمكن إعادة تشغيل php artisan tinker وتحديد السجلات المطلوبة.
  14. المشكلة التي في الصورة تحدث بسبب وجود علامة تنصيص خاطئة في الكود الموجود في الملف app\Http\Controllers\ProjectController.php، والتي أدت إلى إعطاء رسالة خطأ بأنه تم توقع فاصلة منقوطة ";" بدلاً من علامة "}". حاول التحقق من السطر الذي يأتي بعد السطر 16، لمعرفة ما إذا كانت هناك أي أخطاء في الـ Syntax، وعليك التأكد من أن العلامات التنصيصية والفواصل المستخدمة في الأسطر السابقة تم وضعها بشكل صحيح، وخاصة في السطر 16 الذي يحتوي على دالة compact(). ويجب معرفة أنه يمكن أن يتسبب تفريط بعلامات التنصيص أو الفواصل في حدوث أخطاء في لغة PHP، لذا عليك التحقق من أن جميع العلامات التنصيصية والفواصل تم وضعها بشكل صحيح في الأماكن الصحيحة في الكود. وأنصحك بقراءة الأخطاء التي تظهر لك ثم البحث برسالة الخطأ على جوجل لمعرفة السبب، وأيضًا تفقد الأسطر التي يتم الإشارة لك بها في الخطأ مثل السطر 16 في الصورة، وإذا واجهت مشكلة لا تتردد في السؤال هنا.
  15. الأفضل النقاش هنا لتحقيق استفادة للجميع، وبخصوص سؤالك، لتتمكن من الوصول إلى قاعدة البيانات الموجودة على جهازك المحلي، يجب أن يكون لديك خادم backend تستطيع الوصول إليها. ويمكن القيام بذلك باستخدام تقنيات مثل Node.js و Express أو Django و Flask أو PHP. بعد ذلك ستحتاج إلى استخدام أي نظام إدارة قواعد البيانات مثل MySQL أو PostgreSQL أو SQLite والعديد من الخيارات الأخرى. ويمكنك تثبيتها على جهازك المحلي وإنشاء قاعدة بيانات جديدة واستخدامها كقاعدة بيانات خاصة بالتطوير الخاص بك، وأيضا إنشاء قاعدة بيانات مماثلة على الخادم الذي يتم استضافة موقعك عليه. وللمزامنة بين القاعدتين، يمكنك استخدام أدوات المزامنة المتاحة مثل برنامج pg_dump لنظام PostgreSQL أو mysqldump لنظام MySQL، بالإضافة لاستخدام خدمات الاستضافة التي توفر خدمات النسخ الاحتياطي والمزامنة الآلية. وباستطاعتك كتابة برنامج مخصص للمزامنة بين القاعدتين باستخدام لغة البرمجة التي تستخدمها في التطوير. مثال، سنستخدم Express.js لإنشاء نهايات (endpoints) API التي تتيح لنا الوصول إلى البيانات من قاعدة البيانات المحلية ومزامنتها مع خادم الويب البعيد. سنستخدم cron لتنفيذ العملية بشكل دوري: const express = require('express'); const mysql = require('mysql'); const axios = require('axios'); const cron = require('node-cron'); const app = express(); // اتصال بقاعدة البيانات المحلية const db = mysql.createConnection({ host: 'localhost', user: 'username', password: 'password', database: 'database_name' }); // اتصال بخادم الويب البعيد const remoteApi = axios.create({ baseURL: 'http://remote-server.com/api', timeout: 1000, headers: {'Authorization': 'Bearer YOUR_API_KEY'} }); // API endpoint لاسترداد البيانات من قاعدة البيانات المحلية app.get('/local-data', (req, res) => { db.query('SELECT * FROM table_name', (error, results) => { if (error) { throw error; } res.send(results); }); }); // API endpoint لإضافة البيانات إلى خادم الويب البعيد app.post('/remote-data', (req, res) => { remoteApi.post('/data', req.body) .then(response => { res.send(response.data); }) .catch(error => { console.log(error); }); }); // دالة لمزامنة البيانات function syncData() { db.query('SELECT * FROM table_name', (error, results) => { if (error) { throw error; } results.forEach(result => { remoteApi.post('/data', result) .then(response => { console.log(response.data); }) .catch(error => { console.log(error); }); }); }); } // cron job لتنفيذ مزامنة البيانات بشكل دوري cron.schedule('0 0 * * *', () => { syncData(); }); // تشغيل السيرفر app.listen(3000, () => { console.log('Server started on port 3000'); });
  16. لا مشكلة عزيزي، بخصوص جافاسكريبت، فإذا كان المقصود قسم المقدمة، فنعم هو قسم نظري للغة ومن المفيد مشاهدته بالطبع ولا يوجد تطبيق عملي به. أما بدايًة من قم أساسيات جافاسكريبت فيبدأ التطبيق العملي وكتابة الأكواد وأنصحك بالكتابة وراء المدرب، ولا تترك فيديو إلا قد قمت بكتابة الكود الخاص به، وبذلك ستتخلص من الكثير من المشاكل مستقبلاً بسبب المشاهدة السلبية وعدم كتابة الكود بنفسك، وحاول التغيير في الكود وتنفيذ أفكارك والبحث عن حلول للمشاكل أو طريقة لتنفيذ ما تريده. فستتعلم الكثير من خلال فعل ذلك، وليس بالمشاهدة والتطبيق بالحرف فقط، أي كل 5 فيديوهات مثلاُ قم بتعمل تحدي لنفسك بتنفيذ فكرة مختلفة أو إضافة شيء جديد أو خاصية جديدة في الكود.
  17. المشكلة تحدث بسبب عدم وجود مسار النطاق الافتراضي للتطبيق في الملف الذي تعمل عليه، ويمكن حل هذه المشكلة بإضافة الأمر use في بداية الملف، لتحديد مسار المجال الذي تعمل عليه النماذج: use App\Models\User; وفي هذه الحالة، يجب استخدام Models بدلاً من Model بسبب تغيير في الاسم في إصدارات Laravel الحديثة. وبعد ذلك، يمكنك استخدام الأمر التالي لاستدعاء النموذج User وجلب سجل واحد من قاعدة البيانات: $user = User::find(1); ويجب التأكد من أن الملف الذي تعمل عليه موجود في المجال المناسب لتطبيق Laravel وأنه يتم تشغيله من داخل مجلد التطبيق. كما يجب التأكد من أنه تم تشغيل الأمر من داخل مجلد التطبيق Laravel باستخدام منفذ الأوامر CMD.
  18. أهلا بك روجيه، إذا كان السؤال خاص بأحد دورات أكاديمية حسوب، أرجو منك طرح السؤال في المرة القادمة أسفل فيديو الدورة المتعلق بالسؤال. وبالنسبة لسؤالك، ما هي الفيديوهات التي شاهدتها؟ فإذا كانت مجرد شرح نظري ولا يوجد تطبيق عليه فلا مشكلة أبدًا، حيث يجب فهم الأمور النظرية لتنفيذ الأمور العملية على دراية وعلم وليس كتابة أكواد أو تنفيذ خطوات تم حفظها فقط. ويمكنك الاستزادة من خلال البحث عن الموضوع الذي تعلمته أو الأمور التي بحاجة إلى توضيح أو المزيد من الشرح بالنسبة لك، وأيضًا ربما تجد تطبيقات عملية على ما تعلمته.
  19. الإجابة التي تم ذكرها من قبل قيس مشكورًا، تحتوي على فكرة جيدة، وهي استخدام دالة clean() الموجودة في ال model الخاص بالمنتج للتحقق من أن الحد الأدنى المحدد للكمية التي يمكن طلبها لهذا المنتج قد تم الالتزام به. ولكن، هناك تحدي يحدث عند استخدام هذه الطريقة، وهو أن الخطأ لن يتم عرضه على الحقل المرتبط بالكمية، وإنما سيتم عرضه على النموذج بشكل عام. لذلك، يمكن استخدام مجموعة العناصر الإضافية (widgets) في Django، وتحويل الحقل المرتبط بالكمية إلى نوع IntegerField والتحقق من الحد الأدنى لهذا الحقل في العنصر الإضافي clean() الخاص به. فيما يلي مثال محدث للطريقة السابقة: from django import forms from django.db import models class Product(models.Model): product_number = models.PositiveIntegerField(unique=True) min_count = models.PositiveIntegerField() class ProductForm(forms.ModelForm): class Meta: model = Product fields = '__all__' count = forms.IntegerField(widget=forms.NumberInput(attrs={'min': '0'})) def clean_count(self): count = self.cleaned_data['count'] min_count = Product.objects.get(product_number=self.cleaned_data['product_number']).min_count if count < min_count: raise forms.ValidationError(f'The minimum count for this product is {min_count}.') return count في المثال، يتم استخدام Django form بدلاً من استخدام clean() في ال model، ويتم إنشاء عنصر إضافي (count) لإدخال الكمية، وتحويل الحقل المرتبط بهذا العنصر الإضافي إلى IntegerField. ثم التحقق من الحد الأدنى للكمية في clean_count()، وعرض الخطأ على الحقل المرتبط بهذا العنصر الإضافي.
  20. الخطأ في الصورة يشير إلى أنّ الدالة resources() في لارافيل تتطلّب مصفوفة كمدخل، ولكنها تستلم سلسلة نصية. ويمكن أن يحدث هذا الخطأ عندما تكتب الكود بشكل خاطئ أو عند إعطاء المتغير الخاص بالمصفوفة قيمة نصية بدلاً من مصفوفة. لذلك، يجب التحقق من كود routes/web.php للتأكد من أن الدالة resources() تتلقى مصفوفة كمدخل بدلاً من سلسلة نصية، كما يجب التأكد من أنّ المتغير الذي يحوي المصفوفة يتم تمريره بشكل صحيح إلى الدالة. على سبيل المثال، إذا كان كودك كالتالي: Route::resources('/projects', 'App\Http\Controllers\ProjectController'); يجب تغييره إلى: Route::resource('/projects', 'App\Http\Controllers\ProjectController'); ويتم استخدام الدالة resource() بدلاً من resources() لأنها تستلم مصفوفة واحدة بدلاً من مصفوفة متعددة كما هو الحال في resources().
  21. باستطاعتك إضافة خدمة الدفع Transfermate إلى مشروع Django الخاص بك باستخدام API Transfermate. أولاً، يجب عليك التسجيل في Transfermate والحصول على مفاتيح API الخاصة بك. يمكنك الحصول عليها من لوحة التحكم الخاصة بك في Transfermate. ثانياً، يمكنك استخدام مكتبة requests في Django لإرسال طلبات API إلى Transfermate. يمكنك إنشاء عملية الدفع باستخدام تعليمات API الموجودة في وثائق Transfermate. يمكنك إنشاء view في Django لإنشاء عملية الدفع. يجب عليك تضمين مفتاح API الخاص بك في الطلب وإجراء عملية التحقق من الأمان. بعد الحصول على رد من Transfermate، يمكنك استخدامه لتحديث حالة عملية الدفع في مشروع Django الخاص بك. وباستطاعتك استخدام مكتبات Transfermate في مشروع Django الخاص بك لتسهيل عملية الدفع، باتباع الخطوات التالية: تسجيل الدخول على موقع Transfermate والحصول على مفتاح API. تثبيت مكتبة Python Transfermate باستخدام pip عن طريق تشغيل الأمر التالي في سطر الأوامر: pip install transfermate إضافة Transfermate API key إلى ملف الإعدادات (settings.py) في مشروع Django الخاص بك: TRANSFERMATE_API_KEY = 'your_api_key_here' استيراد Transfermate API واستخدامه لإنشاء عملية دفع جديدة: from transfermate.api import TransfermateAPI api = TransfermateAPI(api_key=settings.TRANSFERMATE_API_KEY) payment_data = { 'recipient_currency': 'EUR', 'recipient_country': 'DE', 'amount': '1000.00', 'purpose': 'Test payment', 'sender_currency': 'GBP', 'sender_country': 'GB', 'sender_reference': '123456' } payment_result = api.create_payment(payment_data) في المثال، يتم استخدام Transfermate API لإنشاء عملية دفع جديدة بين حسابين بعملات مختلفة. يتم تمرير بيانات الدفع إلى create_payment() كمعلمة ويتم إرجاع نتيجة العملية في payment_result.
  22. كما ذكر عدنان الأمر طبيعي، ولكن لا أنصحك إطلاقًا بالتقدم إلى React دون القيام بمشروع أو إثنان باستخدام جافاسكريبت ويجب أن تكون المشاريع ذات حجم كبير وليس نماذج صغيرة. فأنا لا أريد لك أن تصبح مستخدم لإطار عمل بدلاً من أن تصبح متقن للغة جافاسكريبت، ففهم وإتقان اللغة بنسبة معينة، سيتيح لك التنقل بحرية بين إطارات العمل وستصبح مبرمج محترف يعتمد عليه وستزول من أمامك الكثير من العقبات. فالغالبية يقوم باستخدام الإطار ويصعب عليه الإنتقال إلى إطار عمل آخر فهو غير متقن للغة الأساسية للإطار وهي جافاسكريبت، فمثلاً لديك إطارات Vue.js و Angular.js وغيرها من إطارات JS. لذلك عليك بالبحث عن مشاريع برمجية على اليوتيوب باستخدام جافاسكريبت وقم بتنفيذها، والأفضل تنفيذ المشروع مرتين، مرة بالتنفيذ مع الشرح، ومرة أخرى بمفردك، فصدقني ستذهل من كم الأشياء التي أنت بحاجة إلى مراجعتها وتثبيتها في ذهنك. وهناك مثل قائل "تعب شهر ولا تعب سنة!" فقم بالإجتهاد في البداية وسترتاح فعلاً بعد ذلك، وستنسى أشياء لا مشكلة في ذلك ولا يوجد مبرمج يحفظ أو يتذكر كل شيء بل يعلم أنه يمكنه تنفيذ الأمر بخاصية ما في اللغة ويبحث عنها ليتذكر طريقة تنفيذها.
  23. أنصحك باستخدام Vite بدلاً من webpack فهو يستخدم إعدادات تلقائية لمعظم المشاريع القياسية ويتعرف تلقائيًا على معظم أنواع الملفات مثل HTML و CSS و JavaScript و JSON و PNG و SVG وغيرها، ويحل محل webpack في الغالب في مشاريع Vue.js و Svelte وReact. فكل ما تحتاجه هو التالي: npm init vite@latest والآن قم بإختيار المشروع الذي تريد العمل عليه، ومثلا Vanilla هنا تعني HTM,CSS, JS فقط بدون استخدام إطار عمل. والآن ستجد السكريبتات التالية تم إضافتها لملف package.json ومن خلال الأمر npm run dev ستتمكن من تشغيل مشروعك دون أية مشكلة.
  24. ماذكره لك عمر صحيح بالنسبة للاستخدام المباشر لقاعدة البيانات على الجهاز الخاص بك دون استخدام خادم backend، فعادة ما يتطلب الأمر الاتصال بقاعدة البيانات من خلال خادم backend الذي يستطيع الوصول إلى الجهاز والبيانات المحفوظة فيه. وبالفعل، يمكن استخدام خدمات الـ third-party مثل Firebase وغيرها لإنشاء قاعدة بيانات وتطبيقات backend بسرعة وسهولة، والتي يمكن الوصول إليها مباشرةً من الـ client. ولكن هذا يتطلب التعامل مع خدمات الـ third-party وفهم كيفية استخدامها، بالإضافة إلى الاعتماد عليها في تشغيل تطبيقك. وهناك حلول أخرى: 1- استخدام برامج إدارة قواعد البيانات المحلية مثل MySQL Workbench أو phpMyAdmin لإدارة قاعدة البيانات المحلية. 2- استخدام Node.js ومكتبة مثل SQLite للتواصل مع قاعدة البيانات الموجودة على جهازك وإجراء التعديلات اللازمة عليها. وبالطبع أنت بحاجة إلى خادم (server) مثبت على الجهاز الخاص بك لكي تتمكن من الاتصال بهذه القاعدة. ويمكنك استخدام خوادم مثل Apache أو Nginx لتنفيذ الخادم الخاص بك، ثم استخدام لغات السيرفرات الشائعة مثل PHP أو Node.js للاتصال بقاعدة البيانات. وبعد ذلك، باستطاعتك استخدام لغة البرمجة الخاصة بالواجهة الأمامية مثل JavaScript للوصول إلى هذه البيانات واستخدامها في تطبيقك.
  25. تسمح بتمرير الدوال كمعاملات للدوال الأخرى، ويتم استخدامها بشكل شائع في البرمجة الوظيفية والبرمجة الشيئية، وتمكنك من كتابة الأكواد بشكل أكثر جودة وإنتاجية. على سبيل المثال، يمكن استخدام الدوال كمعاملات لدوال أخرى لتحسين الكود وجعله أكثر قابلية للصيانة وإعادة الاستخدام، كما يمكن إنشاء الوظائف واستخدامها كقيم لمتغيرات أو خصائص، مما يتيح للمطورين إنشاء برامج أكثر مرونة وقابلية للتوسع. هذا مثال بسيط لإنشاء واستخدام وظيفة من الدرجة الأولى في جافاسكريبت: // إنشاء دالة من الدرجة الأولى function greet(name) { console.log('Hello, ' + name + '!'); } // استخدام دالة كمعامل لدالة أخرى function sayHi(callback) { callback('John'); } // استخدام الدالة كقيمة لمتغير const myGreet = greet; myGreet('Mary'); // استخدام الدالة داخل دالة أخرى sayHi(function(name) { console.log('Hi, ' + name + '!'); }); الدالة greet هي دالة بسيطة تستقبل اسم وتطبع رسالة تحيي بها الشخص الذي يحمل هذا الاسم. ثم يتم استخدام هذه الدالة كمعامل في دالة sayHi. هذا يعني أن دالة sayHi تتوقع دالة (أي تعامل معها بطريقة مماثلة لطريقة تعاملها مع البيانات) كمدخل لها. بعد ذلك، يتم استدعاء الدالة الممررة إلى sayHi، والتي تكون الدالة greet في هذه الحالة، مع إعطاءها اسم "John" كوسيط. في السطر التالي، يتم إنشاء متغير جديد باسم myGreet، والذي يشير إلى نفس الدالة greet. ثم يتم استدعاء دالة sayHi مرة أخرى، لكن هذه المرة يتم تمرير دالة جديدة كوسيط، وهي دالة تستقبل اسمًا وتطبع رسالة تحيا بها الشخص الذي يحمل هذا الاسم. يتم تمرير هذه الدالة باستخدام دالة callback التي تمرر دالة كمعامل. يتم استدعاء الدالة الممررة إلى sayHi مع إعطائها اسم "John" كوسيط. سيتم تنفيذ الدالة الممررة، والتي تمرر لها الاسم "John"، وسيتم طباعة رسالة تحيا بها الشخص الذي يحمل هذا الاسم.
×
×
  • أضف...