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

Adnane Kadri

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

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

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

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

    51

كل منشورات العضو Adnane Kadri

  1. بطبيعة الحال لأن الشرط المقيد بها غير محقق. فـقيمة pshirt لا تساوي قيمة ite. راجع القيم التي يحتويها كلا المتغيران. أظنك تحتاجين تنظيم الشيفرة وتهويتها اكثر، بجانب اعطاء اسماء اكثر دلالية للمتغيرات. ما الذي قد يعنيه ite مثلا؟
  2. لا أظن ان هنالك مجالا للمقارنة او الحصر، فاللجوء الى استعمال اطار العمل يفترض ان لا يكون الا بعد استيعاب المفاهيم التي بني عليها ولو الأساسيات. فهو لن يضيف عليك اشياء وانما سيختصر عليك التعامل مع اشياء كنت بالفعل قد مررت عليها وتعاملت معها. ومن الطبيعي ان يمر المتعلم من استعمال الاصل الى اشياء جاهزة لتجنب التكرار بعد مدة معينة من التدريب والتعلم. وبالطبع فان استعمال اطر العمل سيكون افضل من دونها. ستجد انها تأخذ مفاهيم كنت تأخذ وقتا في تطبيقها على نحو يسهل التعامل معها. بجانب نقطة الأمان التي يهتم لتغطيتها كثيرا. وسلسلة من الدوال والاصناف المساعدة. الخلاصة، عندما تحس أنك متوسط الى جيد في Core PHP يمكنك الانتقال الى تعلم Laravel. ستجد ايضا انك تتعلم PHP أكثر فأكثر باستعمال وتعلم Laravel.
  3. يشير الخطأ الى الموضع 17 من ملف main-sidebar.blade.php الموافق لـ Auth::user()->name . يحدث الخطأ في الغالب عندما تحاول الوصول الى صفحة تقوم باستعمال ملف العرض main-sidebar.blade.php بدون ان يتم توثيق تسجيل الدخول، فالقيمة Auth::user ليست كائنا وبالتالي لن يمكن قراءة الخاصية name منه. الحل: يجب اما حماية الصفحة التي تستعمل هذا الملف بطبقة وسيطة auth أو قراءة الخاصية name بشكل شرطي وليكن: Auth::user() ? Auth::user()->name : null
  4. استخدام الخاصية loading قد يكون حلا كافيا في بعض المتصفحات الحديثة ولكن رغم هذا الا انه يفضل عمل مقاربة تشمل كامل المتصفحات. يمكنك تخزين الرابط المصدري للصورة في خاصية مخصصة ولتكن data-source ثم عن طريق الجافاسكربت تحديد كامل عناصر الصور في الوثيقة وحقن القيمة المخزنة بـ source داخل src حتى يتم تفسيرها من المتصفح بشكل عادي. وبالطبع فان هذا يكون بعد عرضها في الوثيقة او بالاستماع لحدث ما. <img src="" data-source="./path/to/img.png" alt="image title" /> يتم الاستعانة بمفهوم مراقبات التقاطع Intersection observers لخدمة هذا الغرض في الغالب. يمكنك بها التعرف ما ان كانت الصورة معروضة او لم يتم الانزلاق اليها بعد. يمكنك كطريقة تنظيمية انشاء اكثر من ملف نعم، ولكن يفضل استعمال محددات عناصر سليلة للتعرف على تلك الخاصة باللغة العربية وتلك الخاصة بلغات اخرى. مثال: @tailwind base; @tailwind components; @tailwind utilities; body { // تنسيقات عامة } body.rtl { // تنسيقات مخصصة عربية }
  5. الذي تحاول فعله بالضبط غير واضح، هل تحاول تطبيق خصائص معينة على العنصر الابن عند عمل هوفر على الاب؟
  6. يمكنك ايضا الاستفادة من استخدام مفهوم الـ lazy loading لتحميل الصور وعرضها بالصفحة. والفكرة الاساسية فيه هو ان الصور يتم عرضها وتحميلها من موردها الاصلي بعد عرضها في الواجهة فقط وليس مع تحميل الصفحة. وهو ما سيقوم بتسريع اداء الموقع بشكل مبالغ فيه. قم بضغط وتقليل ملفات الجافاسكربت والcss التي تستخدمها داخل الموقع، استعمل تطبيقات ال minifier للتخلص من الفراغات والتعليقات وغيرها من الاشياء التي تقوم بتكبير حجم الملف. التزم بقواعد الشيفرات النظيفة ولا تكرر ما تقوم به، حاول اختصار شيفراتك وأعد صيانتها. لا تستعمل المكتبات إلا في حالة الحاجة لها حقا، لما قد تستعمل مثلا مكتبة بـ 100 ميزة وتستعمل منها واحدة فقط؟ تذكر انها على الجافاسكربت و الـ css وقم ببناء واحدة لك تخدم غرضك بالضبط.
  7. React Router او موجه رياكت هو في الاصل مكتبة تستعمل في التوجيه Routing من جانبي العميل والخادم. يمكن استعمالها على تطبيقات React سواء في الهاتف عن طريق ReactNative او الخادم بوساطة NodeJS او على الويب باستخدام React. بمعنى انها مثل الملحقة التي تقوم بخدمة هذا الغرض. فمثلما يمكن استعمال React لبناء عدد من المكونات التي تستعملها في صفحة الويب خاصتك يمكنك الاعتماد عليها بالكامل في انشاء تطبيقات ويب متعددة الصفحات يمكن استعمال ملحقة التوجيه بينها للتحصل على تصفح لطيف بينها يلخص عمل تطبيقات الصفحة الواحدة. يمكن تثبيته عن طريق تثبيت ملحقاته باستخدام مدير الحزم npm : npm install react-router-dom في المكون الجذر للتطبيق، قم باستيراد وحدة BrowserRouter وضع داخلها مكون التطبيق: import ReactDOM from "react-dom/client"; import { BrowserRouter } from "react-router-dom"; import App from "./App"; const root = ReactDOM.createRoot( document.getElementById("root") ); root.render( <BrowserRouter> <App /> </BrowserRouter> ); ثم بأي مكون ما يمكنك استعمال اي رابط للتنقل الى صفحة اخرى كـ: import { Link } from "react-router-dom"; export default function App() { return ( <div> <h1>اسم التطبيق</h1> <nav> <Link to="/contact-us">اتصل بنا</Link> </nav> </div> ); } يقتضي هذا ان يكون هنالك مكون باسم contact-us على ذات مستوى App.js
  8. هل تبحث عن طريقة لتخزين مصفوفة في قواعد البيانات؟
  9. نعم يمكنك بناء تطبيقات ويب وتطبيقات جوال في ذات الوقت عن طريق flutter او xamarin. فهاته التقنيات قادرة على انشاء تطبيقات cross-platform قادرة على الاشتغال في كلتا البيئتين. ولكنه لا ينصح بهما دوما في اغلب حلول الويب. فقد يفيان بالغرض في بناء لوحات تحكم او تطبيقات صفحة واحدة SPA's او تطبيقات الويب التقديمة PWA ولكنهما يفشلان في تقديم حلول لتطبيقات الويب التي تعتمد بشكل كبير على تحسين محركات البحث والتصفح SEO مثل المدونات والمواقع الشخصية والمنتديات وغيرها. فـ flutter مثلا يعتمد على ال hashes في التوجيه routing داخل الموقع وهو ما ليس جيدا بالنسبة لمحركات البحث. وهذا راجع الى كون flutter web يعتمد على الجافاسكربت في تصيير المكونات على المتصفح بعد طلب الصفحة. وهو الامر الآخر السيء بالنسبة لموضوع ال SEO. الويب ما يزال يعتمد على ال HTML الدلالي بشكل كبير وهو شيء لا تعوضه طريقة React او VueJS او Angular او Flutter في تصيير المكونات بصفحات الويب. بالنسبة لأطر عمل الواجهة الأمامية فقد تجاوز اغلبها هذا الموضوع بسبب ظهور موضوع التصيير على الخادم SSR والتصيير المسبق Pre-rendering ولكن هذا الامر لم يشمل flutter بعد. يأمل الكثيرون من مطوروه ان يتم تطويره ليستوعب هذا المفهوم ايضا. (يمكنك الاستفادة من متابعة نقاش حول هذا الموضوع على github).
  10. كطريقة تقليدية جدا يمكنك اعادة اعداد البريد كل مرة تريد فيها تبديل تلك التي تعدها في المشروع. استعمل التابع الثابت set عن الواجهة Config لتعيين قيمة جديدة لمفتاح معين: /** * ارسال رسالة بريد الكتروني باستخدام خدمة معينة * @return void */ public function sendMail() { // شيفرة ارسال الرسالة } /** * ارسال رسالة بريد الكتروني باستخدام خدمة غير الاولى * @return void */ public function sendMailUsingOtherService() { $this->switchMailer(); // شيفرة ارسال الرسالة } /** * اعادة اعداد خدمة البريد * @return void */ private function switchMailer() { Config::set('mail.encryption','ssl'); // طريقة تشفير جديدة Config::set('mail.host','smtps.example.com'); // مستضيف خدمة جديد Config::set('mail.port','465'); // منفذ جديد Config::set('mail.username','youraddress@example.com'); // اسم مستخدم جديد Config::set('mail.password','password'); // كلمة مرور جديدة Config::set('mail.from', ['address' => 'JhonDoe@gmail.com' , 'name' => 'JhonDoe']); Artisan::call('cache:clear'); // قد تكون هاته الخطوة ضرورية ايضا لاعادة التقاط التحديثات } اما كحل يلائم النسخ التي هي اكبر من النسخة 7.x فيوجد التابع mailer الذي يمكن من خلاله تحديد خدمة البريد التي تستهدفها بارسالك رسالة معينة: Mail::mailer('my_mailer') ->to($user()) ->send(new MyMailableClass()); راجع ايضا التعامل مع البريد الإلكتروني (Mail) في Laravel
  11. بالطبع يمكن. فآداء لارافيل مع قاعدة بيانات NoSQL شيء خرافي حقا. يتم الاستعمال عادة مع اعدادها بوساطة بيئات تطوير مثل Homestead. يوجد خيار mongodb يقبل قيمة بوليانية في ملف اعداد homestead مثلا. اما استعمالها بشكل منفصل فيكون بوساطة حزم composer توفر هاته الوظيفية (أظنها افضل). توجد مثلا حزمة jenssegers/mongodb. حيث تضيف هذه الحزمة وظائف إلى نموذج Eloquent ومنشئ لاستعلامات لـ MongoDB باستخدام واجهة التطبيق البرمجية للارافيل. وتستعمل نفس الوظائف بالضبط تماما. أي انك بعد عملية الضبط واعداد الاتصال الا التعامل مع Laravel Eloquent بشكل كلي. تثبت عن طريق تنفيذ الامر: composer require jenssegers/mongodb ويتم اعداد الاتصال في مصفوفة connections في ملف الاعداد database.php كـ: 'connections' => [ 'mongodb' => [ 'driver' => 'mongodb', 'host' => env('DB_HOST', '127.0.0.1'), 'port' => env('DB_PORT', 27017), 'database' => env('DB_DATABASE', 'homestead'), 'username' => env('DB_USERNAME', 'homestead'), 'password' => env('DB_PASSWORD', 'secret'), 'options' => [ 'database' => env('DB_AUTHENTICATION_DATABASE', 'admin'), // required with Mongo 3+ ], ], في الاستعمال، يجب وراثة صنف النموذج الاساسي للحزمة: use Jenssegers\Mongodb\Eloquent\Model; class Book extends Model { // } ثم يمكنك البدء باستعمالها بشكل عادي تماما.
  12. بجانب المشار اليه من قبل المدرب وائل يمكنك التحقق من انه تم ارسال رسالة بريد الكتروني في بيئة اختبارية عن طريق التوكيد assertSent use Illuminate\Support\Facades\Mail; .. /** @test*/ public function a_mail_is_sent() { Mail::fake(); $this->post('/path/to/target' ,$someData); Mail::assertSent(YourMailable::class); } او عددا معينا من المرات: Mail::assertSent(YourMailable::class, 2); او تفاصيل الرسالة: Mail::assertSent(YourMailable::class, function ($mail) use ($user) { return $mail->hasTo($user->email) && // مرسل الى $mail->hasFrom('...') && // مرسل من طرف $mail->hasSubject('...'); // موضوع المراسلة });
  13. ان كنت تقوم بتعريف قيمة لمتغير البيئة MAIL_MAILER في ملف env. فإنه سيتم اعتبارها مباشرة، وستترك القيمة log كقيمة افتراضية في حالة عدم اعداد هذا المتغير فقط. جرب ايضا تجاوز تعريف القيمة بملف متغيرات البيئة: MAIL_MAILER=log اجعلها log بدل smtp. لا تنسى ايضا محو التخزين المؤقت لملفات الاعداد لالتقاط الاعداد الجديد: php artisan config:clear
  14. لمعرفة القالب المستعمل في وردبرس نقوم اما باللجوء للتطبيقات والاضافات الكاشفة من مثل wpthemedetector أو satoristudio أو حتى اضافات قوقل كروم من مثل wordpress-theme-detector. تستقبل هاته التطبيقات رابط الموقع وتقوم بتحليل الشيفرات لتجد القالب المستعمل. يمكن ايضا معرفة ذلك يدويا، عن طريق الوصول الى الكود المصدري للصفحة والبحث عن ما يلي wp-content/themes/ فهو اسم القالب مباشرة. فعلى سبيل المثال، كل من المرفق سابقا يشير الى استخدام القالب الذي اسمه Publisher مقدم من BetterStudio.
  15. بجانب الاشارة الى المفتاح يجب الاشارة ايضا الى اسم الملف الحاوي للاعداد. فان كان الملف هو app.php نشير الى المتغير كـ: app.author ويكون استدعاءه كـ: {{ Config::get('app.author') }} او مباشرة باستعمال الدالة المساعدة config: config('app.author') الضبط في Laravel
  16. يحدث هذا لأن التابع update تابع غير ثابت، على عكس insert او create مثلا. يجب الاشارة الى انموذج من الصنف Feature لتعديل بياناته فأنت تستهدف عنصرا معينا. فبدل: Feature::update($request->id, Request::all()); للبحث عن "ميزة" معينة وتعديل بياناتها. نستعين بـ find للبحث والاستعلام و update للتحديث والتجاوز: Feature::find($request->id)->update(Request::all()); مقدمة إلى رابط الكائنات بالعلاقات Eloquent
  17. أنواع mime التي تقوم بوصفها هي ليست الا طريقة لتوصيف انواع الملفات، وقد يحتوي النوع الواحد على العديد من الصيغ او امتدادات الملفات. جرب اضافة qt: $validated = $request->validate([ 'file' => 'mimes:mp4,mov,ogg,qt | max:20480' // ... ]); فكل من qt و mov يشيران للنوع: video/quicktime ذكر كليهما سيضمن التعامل مع هذا النوع.
  18. ليس بالضرورة، يمكن انشاء جدول واحد فقط يحوي كامل هاته الطلبات باعتبارها مخاطبة. حيث يحمل عمودين مميزين: من sent_by الى sent_to يوضحان طرفي الخطاب. اما ان كان كل من الادارة والمنطقة والقطاع نماذج في قواعد البيانات فيمكنك انشاء العديد من الاعمدة الاجنبية foreign keys التي تقبل القيمة null في هذا الجدول حيث تكون هاته الاعمدة كـ: مرسل من الادارة sent_by_administration مرسل الى المنطقة sent_to_region و: مرسل من المنطقة sent_by_region مرسل الى القطاع sent_to_sector و: مرسل من القطاع sent_by_sector بهذا الشكل يمكنك انشاء العديد من الثنائيات التي تميز خطابا ما على نحو: مرسل من الادارة الى المنطقة مرسل من الادارة الى القطاع مرسل من القطاع الى الادارة مرسل من القطاع الى المنطقة مرسل من المنطقة الى القطاع مرسل من المنطقة الى الادارة ستكون القراءة سهلة من هذا الجدول، فلما نحاول مثلا جلب الطلبات التي ارسلتها الادارة الى القطاع نبحث فقط عن: الطلبات التي قيمة sent_by_administration وقيمة sent_to_sector فيها ليستا Null. ثم لما نحاول انشاء طلب جديد. نقوم فقط بتحديد الثنائيتين بحسب من يرسل الخطاب والى من.
  19. لا مشكلة في ذلك ايضا، كل طلب هو [انموذج بيانات] يحتوي خصائص معينة. وبما انه كذلك يمكن نمدجته كجدول يحتوي اعمدة في قواعد البيانات، هاته الاعمدة هي هاته الخصائص. فان كان الطلب يجب ان يحتوي تاريخا انشئ به نضيف العمود created_at. ان كان الطلب يجب ان يحتوي مرسلا ومستقبلا نضيف به العمود sent_by و sent_to . ان كان الطلب يندرج ضمن عدة انواع فان الطلب يمتلك نوعا. نضيف العمود type الى الجدول. هل تواجهين مشكلة بهاته النمذجة؟
  20. ما المشكلة في اعتبار هاته الطلبات نموذج بيانات مثلها مثل اي نموذج آخر؟ حيث ان مدير المدرسة هو من يقوم بإنشاء هاته الطلبات. يمكنك التوصل الى انشاء جدول orders يحوي تفاصيل هذا الطلب (منشئ من طرف، موجه الى المدير الفلاني ، نوع الطلب فيما ان كان طلب عجز، زيادة او شكوى او غيرها). يمكنك ايضا اضافة حقل seen او reviewed يخزن قيمة بوليانية تعبر عن ما ان كان الاطلاع عليه من قبل مدير الادارة. حيث: مدير المدرسة يمكنه انشاء طلبات، يمكنه الوصول الى هاته الطلبات في صفحة ما. مدير الادارة يمكنه الوصول الى الطلبات الموجهة له في صفحة مخصصة. ولنقل ايضا انه يمكنه تغيير حالتها كمقروءة مثلا، او حتى الرد عليها. واسطة كل من هؤلاء العملاء هي قاعدة البيانات، يمكنك الاعتماد على مركزيتها في انشاء اي نموذج بيانات ترغبيه.
  21. ما تتحدث عنه تسميه لارافيل التسلسل الى مصفوفات Serializing To Arrays والتسلسل Serialization في Eloquent هو عملية تحليل نموذج او تجميعة الى مصفوفة او كائن JSON. فعند بناء واجهات تطبيق برمجية نحتاج في الغالب تحويل النماذج الى مصفوفات او كائنات JSON ليسهل تصديرها واستيرادها والتعامل معها. يوجد التابع toArray لتحويل ناتج النموذج الى مصفوفة: $user = App\Models\User::first(); dd($user->toArray()); السلسلة في رابط الكائنات بالعلاقات Eloquent
  22. يوجد التابع exists عن الدالة المساعدة view، يمكنك الاستعانة به للتحقق من ما ان كان هنالك ملف عرض باسم معين. تستعمل كـ: view()->exists('path.to.myview') او عن طريق الواجهة View كـ: View::exists('path.to.myview') اقرأ أكثر عن الواجهات (Views) في Laravel
  23. أظن ان المشكلة في تضمين ملفات التنسيق الاساسية بالموقع، فالصفحات من مثل : https://abadc.com.sa/ar/courses/ و https://abadc.com.sa/ar/faq/ تقوم بتحميل ملفات التنسيقات بوساطة حزمة lightspeed بشكل عادي. في حين انه في الصفحة الرئيسية للموقع يتم استعمال ميزة Unique Css من هاته الحزمة لتحميلها. لاحظ ان روابط ملف التنسيقات فيه يبدوا كـ: https://abadc.com.sa/wp-content/litespeed/ucss/85cf37505c2be29695253ccf7665a43f.css?ver=cd0f4 في حين ان الاولى تبدوا كـ: https://abadc.com.sa/wp-content/litespeed/css/7f16c4ab4bbd2fc675a5d0002db20502.css?ver=cd0f4 يحتمل ان يكون هنالك مشكلة في اعداد حزمة Lightspeed للعمل مع تطبيقك. جرب الغاء ميزة Unique Css من صفحة الاعداد، يوجد خيار Generate Unique Css. الغ تفعيله. أظنه ما يسبب المشكلة. LiteSpeed Cache > Page Optimization > CSS Settings جربت تضمين ملف تنسيقات عادي من مجلد CSS مباشرة ونجح الامر.
  24. لا أظن ذلك، فعنوان الماك MAC أو عنوان التحكم في الوصول إلى الوسائط Media Access Control هو معرف فريد يتم تعيينه لاستخدامه كعنوان شبكة في الاتصالات بما في ذلك Ethernet و Wi-Fi و Bluetooth. بعض شركات التصنيع قد تدمج رمزا معينا يميزها ضمن عناوين MAC الخاصة بالجهاز الذي تصنعه. اي ان المعلومات التي يمكن جلبها منه محدودة جدا. اظن ان ما تبحث عنه هو تحليل عنوان IP. يمكنك عن طريق عنوان الـ IP معرفة نوع الجهاز، المتصفح والموقع وغيرها من المعلومات.
  25. نعم، لن يكون ذلك مشكلة ايضا. يمكنك التعامل مع مسألة جلب بيانات معلمي مدرسة معينة بشكل مستقل تماما.
×
×
  • أضف...