-
المساهمات
5233 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
52
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو Adnane Kadri
-
في jQuery يمكنك استعمال التابع isEmptyObject للتحقق من ما ان كان الكائن فارغا، إذ يتحقق هذا التابع من الخصائص الموجودة على الكائن نفسه ومن الخصائص الموروثة من النماذج الأولية. يستقبل هذا التابع معاملا يعبر عن الكائن المشار اليه. يكون الاستعمال العام لها كـ: jQuery.isEmptyObject({}); // true jQuery.isEmptyObject({ foo: "bar" }); // false
-
لاحظ ان الصور التي لديك تظهر وبشكل عادي على: https://site.com/public/storage/logo1.png في حين انها غير متوفرة على: https://site.com/storage/logo1.png يعني هذا ان لا مشكلة في تكوين الرابط الرمزي symlink فهو يعمل وبشكل عادي تماما. الفكرة هنا هي في ان هنالك مشكلة في تكوين روابط ملفات الاصول مثل الصور. اعد ارفاق مسارات صحيحة الى خصائص src الخاصة بهاته الصور.
- 9 اجابة
-
- 1
-
-
هل يمكنك الاشارة الى لغة البرمجة التي تعتمدينها؟ عموما، يتم ذلك عن طريق تصيير الصفحات على مستوى الخادم وحقن الترجمات بما يوافق لغة معينة. فعلى سبيل المثال في PHP، لا نصف عنوان الموقع كـ: <title> عنوان الموقع </title> بل يكون ضمن صفحة بامتداد PHP كـ: <title> <?php echo translate('page title'); ?> </title> حيث ان هنالك وظيفة translate تستقبل معاملا يعبر عن الكلمة المراد ترجمتها والبحث ضمن مصفوفة او ملف ترجمات. مثال: function translate($key) { $language = 'ar'; if($language == 'fr'){ return [ 'page title' => 'titre de la page' ][$key]; }elseif($language == 'en'){ return [ 'page title' => 'page title' ][$key]; }else{ return [ 'page title' => 'عنوان الصفحة' ][$key]; } } يمكن التوسع في الفكرة اكثر وفصل كل مكون على حدة. مثال: يمكن جلب وقراءة اللغة المستهدفة كمعامل في الرابط او كترويسة في الطلب. يمكن ايضا فصل ملف الترجمات الخاص بكل لغة وتحميل الملف المناسب بحسب اللغة المطلوبة. فالفكرة واحدة، يمكن تطبيقها وفق اي منطق ما ووفق اي لغة ما. ف PHP هنا هي مثال لا أكثر.
-
ما المشكلة اذن؟ هل تواجه مشكلة باستعراض الصور في المتصفح او الوصول اليها؟
- 9 اجابة
-
- 1
-
-
يفترض ان يبقى على نفس مستوى ملف index.php بالنسبة لـلرابط الرمزي، قد لا يعمل بشكل صحيح ان كنت تحاول تنفيذ الامر php artisan storage:link بعد التعديل على هيكلة الملفات. وبما انه لم يكن هنالك مشكلة في انشاء رابط رمزي اول مرة، فيمكنك على كل حال انشاءه بشكل مخصص. يوجد الدالة symlink في php لفعل ذلك قم بـ: انشاء ملف وليكن symlink.php على نفس مستوى index.php يحتوي هذا الملف السطر التالي: <?php symlink('/home/username/folder_name/storage/app/public' ,'/home/username/public_html/storage'); حيث ان المعامل الاول يعبر عن الملف الاصل الذي ستشير اليه الوصلة. في حين ان المعامل الثاني يشير الى اسم الوصلة ووجهتها. قم بتعديله وفق ما هو لديك. لتنفيذ هذا الملف قم بفتحه على المتصفح وانتظر الى حد توقف الصفحة عن التحميل. هل قام هذا بحل مشكلتك؟ من المهم حذف الملف symlink بعد انشاء الوصلة او الرابط الرمزي. الدالة symlink() في PHP
- 9 اجابة
-
- 1
-
-
هل يتم انشاء الرابط الرمزي symlink بشكل عادي ثم لا تعمل الصفحات؟ هل يمكنك ارفاق محتويات ملف htaccess لديك؟ ايضا يرجى الاشارة ان كنت تمتلك ملف htaccess آخر ضمن مجلد المشروع
- 9 اجابة
-
- 1
-
-
هو لا يخص لارافيل على وجه الخصوص، وانما يخص خوادم Apache. فملف htaccess هو ملف اعداد من قبل خوادم Apache يحدد كيفية تقديم أشكال مختلفة من البيانات والتعامل مع طلبيات HTTP. ويتم ذلك عن طريق وصف مجموعة من الموجهات Directives. هاته الموجهات تحدد كيفية الترخيص والتوثيق، تخصيص رسائل الاخطاء واكوادها، تجاوز واعادة كتابة الروابط، اعداد الكاش وغيرها.. يمكن تعميم هاته الكيفيات على كامل الانماط والمجلدات والملفات الفرعية، كما يمكن تخصيص طرق للتعامل مع كل مجلد او ملف بشكل مستقل. وهذا هو سبب تسميته بملف التكوينات الموزعة او distributed configuration files حسب التوثيق الرسمي له. هذا المنطق يفرض عليه الكيفية التي هو عليها في كتابته. ورغم انه مكتوب بلغة Apache إلا انه لا يجب عليك معرفة الا ما تحتاجه منه بالضبط. لنأخذ كلا من الأمثلة: Header add Sample-Header "My Value" يقوم هذا باضافة ترويسة Sample-Header بالقيمة My Value لكامل الطلبيات. وهذا تعليق: # Header add Sample-Header "My Value" اي قواعد هنا سيتم تطبيقها في نمط mod_expires: <IfModule mod_expires.c> # fff </IfModule> استعن بالتوثيق الرسمي لخادم Apache لفهم محتوى ملف ما لديك. ستجد مجموعة موجهات متعلق بكل نمط على حدى. اعرف اكثر عن تلك التي تخصك. ملف htaccess معد بشكل جيد في لارافيل. لا أظن انك تحتاج اعادة تجاوزه. مرفق.
- 9 اجابة
-
- 1
-
-
دورة تطوير التطبيقات باستخدام python تتضمن كلا من المسارات التالية: أساسيات لغة بايثون Python تطبيقات عملية باستخدام بايثون Python أساسيات إطار العمل جانغو Django تطوير متجر إلكتروني باستخدام جانغو Django تطوير واجهة برمجية لتعديل الصور باستخدام فلاسك Flask ولا يشمل اي من ذلك التعامل مع الذكاء الاصطناعي، يمكنك الاستفادة من مجموعة المقالات المنشورة ضمن هذا التصنيف في أكاديمية حسوب.
-
هل جربت انشاء دالة مخصصة لذلك؟ لنسميها sleep ايضا! تقوم هاته الدالة بجلب الوقت time الذي تم فيه استدعاءها ثم تنفيذ حلقة while مقيدة بشرط ان يكون وقت تنفيذ التكرارة الواحدة من الحلقة اقل من الوقت الذي تم فيه استدعاء الدالة مضافا اليه الوقت الذي نريد تمريره الى الدالة sleep. تطبيق عملي لها: function sleep(duration){ // جلب الوقت time الذي تم فيه استدعاءها var now = new Date().getTime(); // تنفيذ حلقة while مقيدة بشرط ان يكون وقت تنفيذ التكرارة الواحدة من الحلقة اقل من الوقت الذي تم فيه استدعاء الدالة مضافا اليه الوقت الذي نريد تمريره الى الدالة sleep while(new Date().getTime() < now + duration){ /* لا شيء */ } } function exampleFunc(){ sleep(2000); console.log("Hello"); } exampleFunc() لاحظ ان القيمة المسندة لـ now يتم تنفيذها مرة واحدة. وبالتالي فهي تخزن مرة واحدة في التخزين المحلي. في حين ان تلك التي استعمالها في شرط الحلقة while يتم تحديثها كل حلقة من التكرار الى حد انتفاء الشرط.
-
يمكنك ايضا عن طريق الجافاسكربت جلب قيمتي الازاحتين: الأفقية والعمودية للصفحة او الوثيقة. ثم الاستماع الى الحدث onscroll لإعادة المستخدم الى هاتين الازاحتين كل مرة يتم فيها محاولة عمل تمرير. يعني هذا: منع المستخدم من التمرير. يكون ذلك كـ: // جلب الازاحتين الافقية والعمودية لصفحة الويب let TopScroll = window.pageYOffset || document.documentElement.scrollTop; let LeftScroll = window.pageXOffset || document.documentElement.scrollLeft, // اعادة المستخدم الى الموضع المحدد بهاتين الازاحتين window.onscroll = function() { window.scrollTo(LeftScroll, TopScroll); }; فهم الأحداث في جافاسكربت
-
هل حاولت الاطلاع على دورات الأكاديمية؟
-
يمكنك ايضا استعمال التابع entries عن الكائن Object لطباعة كل مفتاح وقيمة على التوالي، يكون ذلك كـ: Object.entries(obj) يعيد هذا التابع مصفوفة ثنائية البعد Two-dimensional Arrays ذات ثنائيات مفتاح قيمة كـ: [["p1", "value1"], ["p2", "value2"], ["p3", "value3"]] يمكنك المرور عليها عن طريق اي تكرار، وليكن for in : for (const [key, value] of result) { console.log(key, value); } فتكون كاملة الشيفرة: const myObj = { a: 1, b: 2, c: 3 }; let i = Object.entries(myObj); for (const [key, value] of i) { console.log(key, value); } الناتج: "a", 1 "b", 2 "c", 3 الكائن Object في JavaScript التابع Object/entries في جافاسكربت
-
يمكنك انشاء دالة مخصصة تقوم بالأمر عليك، فيما يلي منطق عمل الدالة: تقوم هاته الدالة باستقبال العدد المراد اضافة بادئة صفرية اليه num وعدد الاصفار المراد اضافتها اليه num_of_zeros. تقوم الدالة بتكرار السلسلة النصية "0" عدد num_of_zeros مرة. وتخزنها في متغير محلي. في حالة ما كان العدد موجبا فإن الدالة ستقوم مباشرة باضافة الاصفار الى بدايته. في حالة ما كان العدد سالبا فان الدالة ستقوم بحقن الاصفار بعد علامة ال -. مثال عملي: /** * اضافة بادئة اصفار الى عدد * * @param num * @param num_of_zeros * @return string */ function padZeros(num, num_of_zeros) { var zeros = ('0').repeat(num_of_zeros); return num >= 0 ? zeros + num : String(num).substr(0, 1) + zeros + String(num).substr(1) ; } مثال عن الاستعمال: console.log(padZeros(-4, 10)) // "-00000000004" console.log(padZeros(1, 4)) // "00001" الكائن String في JavaScript التابع Repeat في جافاسكربت التابع substring في جافاسكربت
-
بداية، قم بتثبيت tailwindcss وملحقاتها: npm install -D tailwindcss postcss autoprefixer قم بتكوين ملف اعداد tailwindcss: npx tailwindcss init -p قم بتوصيف امتدادات الملفات المراد التعامل معها في ملف tailwind.config.js: module.exports = { content: [ "./index.html", "./src/**/*.{vue,js,ts,jsx,tsx}", ], theme: { extend: {}, }, plugins: [], } اضف موجهات tailwindcss الى ملف التنسيقات الرئيسي لديك: @tailwind base; @tailwind components; @tailwind utilities; قم بتضمين ملف التنسيقات بملف الجافاسكربت الرئيسي لديك: import './css/style.css'; قد تحتاج كخطوة اضافية تضمين tailwindcss و autoprefixer ضمن اضافات postcss في ملف اعداد postcss.config.js: module.exports = { plugins: [ // ... require('tailwindcss'), require('autoprefixer'), // ... ] } وأخيرا تشغيل الامر npm run dev والبدء في استعمال tailwindcss ضمن مشروعك.
- 2 اجابة
-
- 1
-
-
لا مشكلة بشيفرة الـجافاسكربت او الـ HTML. ولكن كون شيفرة الجافاسكربت لا تطبع شيئا بعد نجاح تقديم طلب الاجاكس يعني انها لا تلتقط قيمة معادة من الواجهة الخلفية الاصلية. جرب اعادة قيمة من شيفرة الـ PHP كـ: if (isset($_GET['ed']) && isset($_GET['text'])) { $comNum=$_GET['ed']; $text=$_GET['text']; $stmt=$conn->prepare(" UPDATE comments set c_text=? where c_id=? "); $stmt->execute(array($text,$comNum)); if ($stmt) { $stmt=$conn->prepare(" SELECT * from comments where c_id=? "); $stmt->execute(array($comNum)); $com=$stmt->fetch(); if (!empty($com)) { return "<span>". $com['c_text'] ."</span>"; } } }
-
مبدئيا، هي صور تحوي يتم التحكم في حدودها وزواياها بشكل يجعلها تظهر بالشكل الذي هو عليه. ولكن يمكنك ايضا اضافة المزيد من الصور والطبقات والعناصر فوق الصورة والتأكد من جعلها تتموضع بشكل صحيح. قد تمتلك هاته الصور اجزاء شفافة بشكل ما يجعل ظهور الصورة الاخرى يظهر بشكل منحني او مائل او دائري. فعلى سبيل المثال: ليكن المكون banner على الشكل: <div class="banner"> <img width="200px" src="my-img.png" alt="text" /> </div> لنضف طبقة جزء منها شفاف كـ: <div class="banner"> <img class="my-img" src="path/to/img" alt="text" /> <img class="layer" src="path/to/layer"> </div> ولنطبق التنسيقات التالية عليهما: .banner{ position: relative; } .banner .layer{ position: absolute; /*جعل الطبقة تتموضع بشكل مطلق*/ top: 0; right: 0; width: 100%; } تفحص المثال. ابحث عن layers png وستجد الكثير من الاشكال التي يمكن وضعها فوق صورة ما لتعطي ناتجا يظهر بشكل جميل.
-
بداية، يمكنك اختصار الشيفرات التالية: function toggleOn(){ if(toggleBtn.classList.contains('toggle-on')){ toggleBtn.classList.remove('toggle-on'); toggleBtn.classList.add('toggle-off'); navMenu.classList.remove('w-[75px]'); navMenu.classList.remove('rounded-[40px]'); navMenu.classList.add('w-[250px]'); navMenu.classList.add('rounded-[20px]'); container.classList.remove('left-[70px]'); container.classList.add('left-[250px]'); }else{ toggleBtn.classList.remove('toggle-off'); toggleBtn.classList.add('toggle-on'); navMenu.classList.remove('w-[250px]'); navMenu.classList.add('w-[75px]'); navMenu.classList.remove('rounded-[20px]'); navMenu.classList.add('rounded-[40px]'); container.classList.remove('left-[250px]'); container.classList.add('left-[70px]'); } لتصبح: function toggleOn(){ if(toggleBtn.classList.contains('toggle-on')){ toggleBtn.classList.remove('toggle-on'); toggleBtn.classList.add('toggle-off'); navMenu.classList.remove('w-[75px]' ,'rounded-[40px]'); navMenu.classList.add('w-[250px]' ,'rounded-[20px]'); container.classList.remove('left-[70px]'); container.classList.add('left-[250px]'); }else{ toggleBtn.classList.remove('toggle-off'); toggleBtn.classList.add('toggle-on'); navMenu.classList.remove('w-[250px]' ,'rounded-[20px]'); navMenu.classList.add('w-[75px]' ,'rounded-[40px]'); container.classList.remove('left-[250px]'); container.classList.add('left-[70px]'); } ثم ما الحاجة من كل هاته التلاعبات بشجرة الوثيقة؟ لما لا يكفي تغيير صنف واحد وليكن هو حاوي قائمة التصفح. قم بتبديل صنف واحد مثلا وليكن is-enabled function toggleOn(){ if(toggleBtn.classList.contains('toggle-on')){ navMenu.classList.add('is-enabled') }else{ navMenu.classList.remove('is-enabled') } أو حتى: function toggleOn(){ navMenu.classList.toggle('is-enabled') ثم تعامل مع الباقي عن طريق الـ css و tailwindCSS: .nav-menu { // اي تنسيقات } .nav-menu .toggle-btn{ // اي تنسيقات } .nav-menu .container{ // اي تنسيقات } .nav-menu.is-enabled { // اي تنسيقات } .nav-menu.is-enabled .toggle-btn{ // اي تنسيقات } .nav-menu.is-enabled .container{ // اي تنسيقات } او عن طريق sass: .nav-menu { // اي تنسيقات .toggle-btn{ // اي تنسيقات } .container{ // اي تنسيقات } &.is-enabled { // اي تنسيقات .toggle-btn{ // اي تنسيقات } .container{ // اي تنسيقات } } } يوجد قاعدة تسعى لتحسين تجربة الاستخدام تسمى Less Javascript, more HTML and CSS أي "اقل جافاسكربت ، اكثر HTML و CSS". حاول التقليل من الاعتماد على جافاسكربت كليا في اشياء يمكن القيام بها عن طريق css (رغم انها قادرة).
- 1 جواب
-
- 1
-
-
بطبيعة الحال لأن الشرط المقيد بها غير محقق. فـقيمة pshirt لا تساوي قيمة ite. راجع القيم التي يحتويها كلا المتغيران. أظنك تحتاجين تنظيم الشيفرة وتهويتها اكثر، بجانب اعطاء اسماء اكثر دلالية للمتغيرات. ما الذي قد يعنيه ite مثلا؟
-
لا أظن ان هنالك مجالا للمقارنة او الحصر، فاللجوء الى استعمال اطار العمل يفترض ان لا يكون الا بعد استيعاب المفاهيم التي بني عليها ولو الأساسيات. فهو لن يضيف عليك اشياء وانما سيختصر عليك التعامل مع اشياء كنت بالفعل قد مررت عليها وتعاملت معها. ومن الطبيعي ان يمر المتعلم من استعمال الاصل الى اشياء جاهزة لتجنب التكرار بعد مدة معينة من التدريب والتعلم. وبالطبع فان استعمال اطر العمل سيكون افضل من دونها. ستجد انها تأخذ مفاهيم كنت تأخذ وقتا في تطبيقها على نحو يسهل التعامل معها. بجانب نقطة الأمان التي يهتم لتغطيتها كثيرا. وسلسلة من الدوال والاصناف المساعدة. الخلاصة، عندما تحس أنك متوسط الى جيد في Core PHP يمكنك الانتقال الى تعلم Laravel. ستجد ايضا انك تتعلم PHP أكثر فأكثر باستعمال وتعلم Laravel.
-
يشير الخطأ الى الموضع 17 من ملف main-sidebar.blade.php الموافق لـ Auth::user()->name . يحدث الخطأ في الغالب عندما تحاول الوصول الى صفحة تقوم باستعمال ملف العرض main-sidebar.blade.php بدون ان يتم توثيق تسجيل الدخول، فالقيمة Auth::user ليست كائنا وبالتالي لن يمكن قراءة الخاصية name منه. الحل: يجب اما حماية الصفحة التي تستعمل هذا الملف بطبقة وسيطة auth أو قراءة الخاصية name بشكل شرطي وليكن: Auth::user() ? Auth::user()->name : null
- 1 جواب
-
- 1
-
-
استخدام الخاصية 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 { // تنسيقات مخصصة عربية }
- 4 اجابة
-
- 1
-
-
الذي تحاول فعله بالضبط غير واضح، هل تحاول تطبيق خصائص معينة على العنصر الابن عند عمل هوفر على الاب؟
- 5 اجابة
-
- 1
-