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

Mustafa Suleiman

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

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

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

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

    445

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

  1. هناك حلان لمثل تلك المشكلة، الأول هو أن يقوم صديقك بإنشاء حساب في أكاديمية حسوب ثم يقوم بالدفع والإشتراك في الدورة، ثم يقوم بإعطائك بيانات تسجيل الدخول وهما الإيميل والباسورد. والحل الآخر كما أشار إليك عمر وهو شراء بطاقات الهدايا وإعطائها لك ووسائل الدفع المتاحة هم البطاقة الائتمانية أو حساب PayPal. ولكن لا تقم باستخدام بطاقة مسبوقة الدفع أي Prepaid التي يتم شحنها حيث سيتم رفضها غالبًا عند الشراء، بل البطاقة يجب أن تكون من نوع Debit أو Credit أي مربوطة بحساب بنكي. وإذا واجهت أي مشكلة أخرى عليك بالتحدث لمركز المساعدة من خلال إدخال بريدك الإلكتروني وستصلك رسالة تأكيد على البريد قم بإدخال الكود الذي حصلت عليك وستظهر لك نافذة المحادثة، وعليك بالإنتظار ما بين 24 ساعة إلى 48 ساعة فأحيانًا يكون هناك ضغط.
  2. الكود الخاص بك هو ملف تعريف التطبيق (manifest) لتطبيق Chrome، والكود نفسه ليس له مشكلة وهو صحيح من الناحية النحوية syntax. حاول التأكد من وجود ملفي "jquery.min.js" و "popup.js" في نفس المجلد مع ملف التعريف وأنهما يحتويان على الكود الصحيح. وإصلاح الأخطاء التي أشرت إليك بها في السؤال الآخر هنا الخاص بك:
  3. السكريبت يحتوي على بعض الأخطاء، إليك الأخطاء المحددة: الدالة getinfont غير معرفة في السكريبت، يجب عليك تعريفها قبل استخدامها. في السطر المعلق بعد الكومنت، هناك خطأ في النحو في السطور المعلقة، تحتاج إلى إضافة علامة اقتباس مغلقة " بعد الخاصية background:url(https://i.ibb.co/gyzFHVS/150.jpg) no-repeat 50%'). في الجزء الأخير من السكريبت، يجب أن تحرص على إغلاق الأقواس الكبيرة } للتابع window.onload، وإغلاق الأقواس الكبيرة } للكائن document.onclick. وإليك السكريبت بعد تعديل الكود وإجراء بعد التعديلات: var string_id = 1231414; var page_title = document.title; var time_click = 0; var check_button = 0; var index_max = getinfont(1, 7); window.onload = function() { setTimeout(function() { $('div[class="gow-wrap"] img').remove(); }, 2000); setTimeout(function() { $('div[class="gow-tumbleweed"]').remove(); }, 2000); setTimeout(function() { $('span[class="gow-btn-mid__val"]').remove(); }, 2000); /*$('div[class="gow-fan"]').attr("style",'bottom:-150px; left:1%; width:100%; height:100%; background:url(https://i.ibb.co/gyzFHVS/150.jpg) no-repeat 50%');*/ document.onclick = function({ target }) { page_title = document.title; if (page_title.indexOf('Wild West Gold') !== -1) { console.log(page_title); let parent = target; if ( parent.className == 'gow-start-btn gow-btn gow-btn-green gow-btn-mid our-btn dont_touch' ) { console.log(0); get_format_new(); index_max = getinfont(1, 7); get_format(index_max); } if (parent.className == 'gow-btn gow-btn-brownl gow-get-price gow-btn-mid') { console.log(1); get_format_new(); } } }; }; function getinfont(min, max) { min = Math.ceil(min); max = Math.floor(max); return_tt = Math.floor(Math.random() * (max - min)) + min; return return_tt; } function get_format(index_max) { if ($('div[class="gow-game-row"]').eq(0).children('div[class="gow-game-cel"]').length == 2) { for (i = 0; i < index_max; i++) { var get_infont = getinfont(0, 2); $('div[class="gow-game-row"]') .eq(9 - i) .children('button') .eq(get_infont) .attr('style', 'background:url(https://v2l.cdnsfree.com/default/img/gold_of_west/gow-win-img.jpg)'); } } else { for (i = 0; i < index_max; i++) { var get_infont = getinfont(0, 3); $('div[class="gow-game-row"]') .eq(9 - i) .children('button') .eq(get_infont) .attr('style', 'background:url(https://v2l.cdnsfree.com/default/img/gold_of_west/gow-win-img.jpg)'); } } } function get_format_new() { $('div[style="background:url(https://v2l.cdnsfree.com/default/img/gold_of_west/gow-win-img.jpg)"]').attr('style', ''); }
  4. ما تريده يتطلب بعض الجهد ولا يتم من خلال CSS فقط، بل يجب استخدام جافاسكريبت أيضًا، وتستطيع استخدام مكتبة مثل https://thdoan.github.io/magnify/ أو https://www.npmjs.com/package/react-image-magnifiers لتنفيذ ذلك، بحيث تقوم بمحاكاة مؤشر الفأرة كما لو أنك أشرت إلى الصورة لكل فقاعة، وابحث عن React.js Image Zoom/Magnifier على اليوتيوب وستجد شروحات.
  5. إذا كنت ترغب في إضافة تأثير التكبير للفقاعة، فهناك خاصية transform: scale() في CSS لتكبير الفقاعة، حاول تجربة إضافة هذه الخاصية إلى تعريف الـ .bubble1 و .bubble2 في الكود الخاص بك، وذلك على النحو التالي: .bubble1 { /* تعريفات أخرى للفقاعة */ transform: scale(1.5); /* تكبير الفقاعة بنسبة 1.5 */ } .bubble2 { /* تعريفات أخرى للفقاعة */ transform: scale(2); /* تكبير الفقاعة بنسبة 2 */ } وتستطيع تعديل قيمة scale وفقًا للتكبير المطلوب للفقاعة. تذكر أنه يجب تحديد العناصر .bubble1 و .bubble2 في عنصر الـ .square أو أي عنصر آخر تستخدمه لعرض الفقاعات. بعد إضافة الـ transform: scale() للفقاعات، قد تحتاج إلى ضبط حجمها وموقعها بناءً على ما ترغب فيه داخل العنصر الأساسي .square باستخدام القيم المناسبة للـ width و height و position.
  6. في تطبيقات Laravel، توجد طرق مختلفة للتوجيه (Routing) للوصول إلى مسارات محددة في التطبيق، وتستخدم هذه الطرق لتعريف العمليات المتاحة لتطبيقك، مثل إنشاء سجل جديد، تحديث سجل موجود، استرجاع سجل معين، أو حذف سجل. تساعدك هذه الطرق في تنظيم وترتيب واجهة تطبيقك. فيما يلي شرح لبعض الطرق الشائعة في Laravel والغرض منها ومتى يتم استخدامها: 1- POST الغرض: تستخدم لإرسال طلب لإنشاء مورد جديد. مثال: إرسال طلب لإنشاء مستخدم جديد في تطبيقك. Route::post('/users', 'UserController@store'); // UserController.php public function store(Request $request) { // استلام البيانات المطلوبة لإنشاء المستخدم من الطلب $userData = $request->only(['name', 'email', 'password']); // قم بإنشاء المستخدم وحفظه في قاعدة البيانات $user = User::create($userData); // استعادة الاستجابة ببيانات المستخدم المنشأ return response()->json($user, 201); } 2- GET الغرض: تستخدم لاسترجاع معلومات محددة من المورد. مثال: استرجاع بيانات المستخدم الذي يحمل معرّف معين. Route::get('/users/{id}', 'UserController@show'); // UserController.php public function show($id) { // البحث عن المستخدم المرتبط بالمعرّف المحدد $user = User::findOrFail($id); // استعادة الاستجابة ببيانات المستخدم return response()->json($user); } 3- PUT/PATCH الغرض: تستخدم لتحديث مورد محدد. مثال: تحديث بيانات المستخدم الذي يحمل معرّف معين. وتستطيع استخدام PUT لتحديث جميع البيانات في المورد، بينما يمكن استخدام PATCH لتحديث جزء من البيانات فقط. Route::put('/users/{id}', 'UserController@update'); أو Route::patch('/users/{id}', 'UserController@update'); // UserController.php public function update(Request $request, $id) { // استلام البيانات المطلوبة لتحديث المستخدم من الطلب $userData = $request->only(['name', 'email']); // البحث عن المستخدم المرتبط بالمعرّف المحدد $user = User::findOrFail($id); // تحديث بيانات المستخدم $user->update($userData); // استعادة الاستجابة ببيانات المستخدم المحدثة return response()->json($user); } 4- DELETE الغرض: تستخدم لحذف مورد محدد. مثال: حذف مستخدم معين من قاعدة البيانات. الطرق الأربعة السابقة (POST، GET، PUT/PATCH، DELETE) تُعد الأكثر شيوعًا في RESTful API وتطبيقات الويب، وتستخدم في بناءً عمليات CRUD (Create، Read، Update، Delete) المتعارف عليها في تطوير البرمجيات. Route::delete('/users/{id}', 'UserController@destroy'); المسار هو "/users/{id}" للوصول إلى الدالة "destroy" في "UserController"، والتي تتولى حذف المستخدم المرتبط بالمعرف الممرر كمتغير في المسار. ثم يمكنك تنفيذ هذا المسار عن طريق استخدام طريقة DELETE في نموذج الاستدعاء عبر الشبكة. مثلاً، باستخدام إطار العمل Axios في JavaScript، يمكننا استخدام الرمز التالي لحذف المستخدم: axios.delete('/users/1') .then(response => { console.log('تم حذف المستخدم بنجاح'); }) .catch(error => { console.error('حدث خطأ أثناء حذف المستخدم'); }); وهناك العديد من الطرق الأخرى التي يمكن استخدامها في توجيه Laravel، إليك بعض الأمثلة الإضافية: OPTIONS الغرض: يُستخدم لاستعلام الخيارات المدعومة لمسار محدد. مثال: استعلام الخيارات المدعومة لمسار معين للاحتفاظ بمعلومات الخيارات المتاحة. Route::options('/users', 'UserController@options'); يتم تعيين المسار "/users" للوصول إلى الدالة "options" في "UserController" التي تستعرض الخيارات المدعومة لمسار المستخدم. HEAD الغرض: يُستخدم لاستعلام رأس الاستجابة فقط دون استرجاع البيانات الفعلية. مثال: التحقق من توفر المورد دون استعادة بياناته. Route::head('/users/{id}', 'UserController@head'); تم وضع المسار "/users/{id}" للوصول إلى الدالة "head" في "UserController" التي تعيد فقط رأس الاستجابة دون استرداد بيانات المستخدم.
  7. ما تريده يمكن تنفيذه من خلال مبرمج، عليك بشرح الأمر له والمتطلبات التي تريد تنفيذها على موقعك، تستطيع تعيين مبرمج محترف من خلال مواقع العمل الحر مثل مستقل وخمسات. حيث أنه من الصعب توفير ما تريده هنا لكونه يتطلب التعديل على قالب الموقع والربط بين العناصر والدوال لتنفيذ المطلوب، قم بالبحث عن متخصص في منصة بلوجر. يمكن مساعدتك إذا قمت بتوفير الكود وتريد حل مشكلة معينة تواجهك، وإذا أردت تنفيذ ما تريده بنفسك فعليك بتعلم HTML وCSS وجافاسكريبت، وإليك بعض المصادر:
  8. قم بتسجيل الدخول إلى حسابك في Blogger على منصة Google. اختر المدونة التي ترغب في تعديلها. انقر على "تخطيط" في القائمة الجانبية اليسرى. اختر الموقع الذي ترغب في إضافة الكود الHTML إليه (على سبيل المثال: صندوق التعليقات أو القائمة الجانبية). انقر على "إضافة أداة" (أو "Add a Gadget"). ستظهر قائمة بالأدوات المتاحة، حيث يمكنك البحث عن أداة "HTML/JavaScript" والنقر عليها. ستظهر نافذة جديدة تسمح لك بإدخال الكود الHTML. الصق الكود الHTML الذي ترغب في إضافته إلى المدونة. انقر على "حفظ" (أو "Save") لتطبيق التغييرات. بعد حفظ التغييرات، يجب أن يظهر الكود الـ HTML في موقع المدونة الذي قمت باختياره، وتأكد من أن الكود الذي تقوم بنسخه ولصقه هو كود HTML صحيح. وقد يفيدك الإطلاع على النقاش التالي: وأيضًا بعض النقاشات الأخرى المتعلقة:
  9. لكونه سؤال إختباري يمكن إرشادك لخطوات الحل فقط، وإذا قمت بتنفيذ الكود يمكن مساعدتك في حل المشاكل التي تواجهك. إليك خطوات الحل: تعريف الهيكل المرتبطة لعقدة القائمة المرتبطة، حيث يحتوي كل عقدة على قيمة (حرف) ومؤشر إلى العقدة التالية في القائمة. تعريف دالة لإنشاء قائمة مرتبطة تمثل السلسلة المعطاة. تعريف دالة لإزالة الأحرف المتكررة المتجاورة في السلسلة باستخدام القائمة المرتبطة. تعريف دالة لطباعة السلسلة النهائية بعد إزالة الأحرف المتكررة. تنفيذ الدالة الرئيسية التي تقوم بتحليل الإدخال واستدعاء الدوال المناسبة لحل المشكلة. https://academy.hsoub.com/programming/cpp/?d=2
  10. من الجيد القيام بمشاريع لأشخاص آخرين لاكتساب الخبرة، ويمكنك طلب ذلك من خلال حسابك على LinkedIn أو على مجموعات الفيسبوك الخاصة ببايثون، وأيضًا مجتمع البرمجة على منصة i/O . ونصيحتي إليك هي بالبدء فورًأ في تنفيذ المشاريع وعدم إنتظار أي شخص، حيث أن هناك الكثير من المشاريع التي يمكنك تنفيذها لاكتساب الخبرة ووضعها في معرض أعمالك، مثل إنشاء متجر إلكتروني كامل أو Bot. والأفضل هو رؤية المشاريع التي تطلب بكثرة على مواقع العمل الحر، مثل مستقل وبعيد وخمسات وتنفيذ تلك المشاريع ووضعها في معرض أعمالك، أو التقديم على تلك المشاريع بأقل تكلفة ممكنة وشرح ما سيتم تنفيذه لكي توضح لصاحب المشروع أنك تستطيع تنفيذه، ويكفي أن تعرف كيفية تنفيذ 60% من المشروع والباقي تستطيع البحث عنه وتعلمه أثناء التنفيذ. وأنصحك بقراءة المقالات الخاصة بالمستقلين على مدونة مستقل قبل تقديم العروض على المشاريع، لكي تتعامل بإحترافية مع العملاء.
  11. رسالة الخطأ "sqlite3.OperationalError: no such table: posts" تعني أن الجدول الذي تحاول الوصول إليه "posts" غير موجود في قاعدة البيانات الخاصة بك. عليك بالتأكد من الخطوات التي قمت بها حتى الآن: تأكد من أنك قمت بتشغيل الكود الذي يقوم بإنشاء الجدول بنجاح وبدون أي أخطاء، على الأقل يجب تنفيذ هذا الكود مرة واحدة قبل الوصول إلى الجدول. والأمر الذي يجب تنفيذه لإنشاء الجدول في قاعدة البيانات هو استخدام الأمر CREATE TABLE في SQL، وطالما أنك تستخدم Flask و SQLite3، تستطيع استخدام الكود التالي لإنشاء الجدول: import sqlite3 # اتصال بقاعدة البيانات conn = sqlite3.connect('اسم_قاعدة_البيانات.db') c = conn.cursor() # إنشاء الجدول c.execute(''' CREATE TABLE IF NOT EXISTS posts ( id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT NOT NULL, content TEXT ) ''') # حفظ التغييرات وإغلاق الاتصال بقاعدة البيانات conn.commit() conn.close() استبدل 'اسم_قاعدة_البيانات.db' باسم قاعدة البيانات الفعلي التي ترغب في استخدامها، و الكود ينشئ جدولًا بعناصر id، title، و content، حيث يتم تحديد id كمفتاح أساسي و title كعمود نصي إلزامي. بعد ذلك تحقق من أن اسم الجدول المستخدم في الاستعلام الذي يثير الخطأ هو "posts" بالضبط، وأنه مطابق تمامًا للاسم المستخدم في كود إنشاء الجدول. تأكد من أن قاعدة البيانات التي تستخدمها في تطبيق Flask هي نفسها قاعدة البيانات التي تم إنشاء الجدول فيها، فقد تكون قد قمت بإنشاء جدول في قاعدة بيانات مختلفة أو أنه تم حذف الجدول عن طريق الخطأ. إذا كنت تستخدم برامج لإدارة قاعدة البيانات والتي أنصخك باستخدامها مثل SQLite Browser أو phpMyAdmin، قم بفحص قاعدة البيانات للتأكد من وجود الجدول "posts" فيها.
  12. أرجو منك طرح السؤال أسفل الفيديو الخاص به في الدورة في المرة القادمة. بالنسبة لأول تطبيق فأحسنت عمل جيد فكل المطلوب منك أن تقوم بتنفيذ مشروع يعمل بشكل سليم بغض النظر عن جودته، ولكن بحاجة إلى تحسين وإعادة بناء المشروع ثم المتابعة مع شرح المدرب، وبالإضافة إلى ما ذكره عمر. يجب عرض رسالة قد ربحت أو خسرت عند تحقق الشرط لذلك وبشكل واضح، وأيضًا سقوط الطائر لأسفل بطيء بعض الشيء لذلك عليك بزيادة الحركة لصنع حركة إنسيابية وأيضًا زياة مساحة الخلفية المخصصة للعب. وقد يفيدك الإطلاع على لعبة flapy bird التالية ومحاولة تقليدها وستتعلم الكثير ويمكنك رؤية الخوارزمية الخاصة بها بالضغط على رؤية ما بالداخل أو see inside. https://scratch.mit.edu/projects/44251328/
  13. عند البحث لا يوجد موقع متخصص في ذلك، عليك بتعلم كيفية الرسم أو التحريك لإنشاء مشروعك وتستطيع البحث عن "شرح adobe animate" على اليوتيوب وستجد كورسات مجانية خاصة بذلك. وفي موقع adobe الرسمي هناك شروحات وملفات الشرح متوفرة عند الضغط على الدرس تستطيع استخدامها إذا أردت من خلال الرابط التالي: https://creativecloud.adobe.com/learn/app/animate اضغط على الدرس الذي تريده وستجد الملفات النهائية جاهزة للتحميل.
  14. لا يوجد دليل رسمي بخصوص ذلك، لكن حاول تجربة فتح الملف عن طريق الضغط على File بالأعلى ثم إختيار import ومنها اختر import to stage وإذا لم يفلح الأمر فعليك باستيراد الفيديو وليس ملف aep. حيث ستجد في قائمة import خيار باسم import video، وستظهر لك نافذة بخصوص الخيارات التي تريدها لاستيراد الفيديو وتستطيع البحث عن Importing and working with video - Adobe Animate CC وستجد فيديوهات تشرح لك الأمر. لكن ما هو مدعوم ومتاح وستجد له شروحات كثيرة، هو استيراد ملف adobe animate في برنامج After Effects من خلال قائمة File اضغط على Import ثم خيار file واختر ملف adobe animate الذي تريده. وتستطيع البحث عن Adobe Animate to After Effects Workflow وستجد شرح لذلك.
  15. عليك بالتوجه إلى الرابط التالي وتسجيل الدخول إذا طلب منك ذلك: https://accounts.hsoub.com/settings?service=11 ثم ستجد الاسم واسم العائلة، قم بتغييره للاسم الذي تريده، وبالأسفل اضغط على حفظ التعديلات. وستجد أنه تم تعديل الاسم هنا، وإذا لم يتم ذلك، قم بتسجيل الخروج ثم إعادة تسجيل الدخول.
  16. أرجو منك التعليق أسفل فيديو الدرس في المرة القادمة. المشكلة الخاصة بك يتم حلها من خلال وضع عرض أكبر من 13% لعناصر div داخل .h مثلاُ ثم قم بوضع 400px كعرض لها وأيضًا وضع margin لها بقيمة 20px لوضع مسافة بينها عندما تتراص بشكل رأسي. ولاحظ أن العرض يجب أن يكون قيمة وليس نسبة فعند وضعه كنسبة لن تتراص العناصر فوق بعضها وستتقلص لأنها تأخذ نسبة من مساحة الأب وتتقلص على أساسه. ولكن أنت قمت بكتابة الكثير من الأكواد التي لا يوجد داعي لها ولا مشكلة في ذلك طالما الكود يعمل في البداية، وبإمكانك تحسين الكود من خلال كتابته بالشكل التالي: HTML <section class="boxes"> <div>1</div> <div>2</div> <div>3</div> </section> CSS .boxes { display: flex; flex-wrap: wrap; } .boxes div { background-color: bisque; width: 400px; margin: 20px; font-size: 40px; }
  17. طالما أنك تستخدم HTML وجافاسكريبت فسيعمل الكود، أو عليك تعديل الكود ليعمل باللغة التي تستخدمها، فمثلاً لو أردت استخدامه في مشروع Django فعليك بتعديل الكود بالشكل التالي: <!DOCTYPE html> <html> <head> <title>شراء المنتج</title> <script src="{% static 'js/checkout.js' %}"></script> </head> <body> <div> <img src="{% static 'images/صورة_المنتج.jpg' %}" alt="صورة المنتج"> <p>وصف المنتج</p> <button id="checkoutButton">شراء المنتج</button> </div> <div id="checkoutForm" style="display: none;"> <h2>تأكيد الشراء</h2> <form id="purchaseForm" action="{% url 'purchase' %}" method="post"> {% csrf_token %} <label for="name">الاسم:</label> <input type="text" id="name" name="name" required><br><br> <label for="address">العنوان:</label> <input type="text" id="address" name="address" required><br><br> <label for="phone">رقم التليفون:</label> <input type="text" id="phone" name="phone" required><br><br> <input type="submit" value="تأكيد الشراء"> </form> </div> <script> document.getElementById('checkoutButton').addEventListener('click', function() { document.getElementById('checkoutForm').style.display = 'block'; }); document.getElementById('purchaseForm').addEventListener('submit', function(event) { event.preventDefault(); const name = document.getElementById('name').value; const address = document.getElementById('address').value; const phone = document.getElementById('phone').value; const productLink = window.location.href; const message = "اسم المنتج: " + productLink + "%0A" + "الاسم: " + name + "%0A" + "العنوان: " + address + "%0A" + "رقم التليفون: " + phone; const whatsappURL = "https://wa.me/رقم_الواتساب?text=" + encodeURIComponent(message); window.open(whatsappURL); // قد يكون من الأفضل إرسال طلب الشراء إلى الخادم هنا بدلاً من فتح نافذة واتساب مباشرة. // يمكن استخدام مكتبة AJAX أو fetch API لإرسال البيانات إلى عنوان URL لمشاهدة Django. }); </script> </body> </html>
  18. لا يوجد طريقة أفضل من كتابة الكود وبناء المشاريع عند تعلم البرمجة، فمهما شاهدت من شروحات وقرأت دروس ومقالات لن تحقق الكثير سوى أنك تمتلك معلومات فقط، ولكنها ليس منظمة وليست لها فائدة إلا من خلال التطبيق العملي لزيادة مهاراتك وتثبيت المعلومات. وتستطيع رؤية تصاميم كاملة من خلال المواقع التي تم ذكرها في النقاشات التالية: وإذا كان الأمر صعب عليك بخصوص تنفيذ تصميم كامل، فتستطيع تصميم مكون واحد فقط كقسم من الصفحة ثم تنفيذ مكون آخر حتى تنتهي من الصفحة، ثم تحاول ربط المكونات ببعضها. أو استمر في إنشاء المكونات أو التصاميم الصغيرة ثم بعد فترة قم بإنشاء تصميم كامل مكون من أكثر من صفحة.
  19. ما تريده تستطيع تنفيذه باستخدام HTML و جافاسكريبت بالشكل التالي: <!DOCTYPE html> <html> <head> <title>شراء المنتج</title> </head> <body> <div> <img src="صورة_المنتج.jpg" alt="صورة المنتج"> <p>وصف المنتج</p> <button onclick="redirectToCheckout()">شراء المنتج</button> </div> <div id="checkoutForm" style="display: none;"> <h2>تأكيد الشراء</h2> <form onsubmit="sendWhatsAppMessage(event)"> <label for="name">الاسم:</label> <input type="text" id="name" required><br><br> <label for="address">العنوان:</label> <input type="text" id="address" required><br><br> <label for="phone">رقم التليفون:</label> <input type="text" id="phone" required><br><br> <input type="submit" value="تأكيد الشراء"> </form> </div> <script> function redirectToCheckout() { document.getElementById('checkoutForm').style.display = 'block'; } function sendWhatsAppMessage(event) { event.preventDefault(); const name = document.getElementById('name').value; const address = document.getElementById('address').value; const phone = document.getElementById('phone').value; const productLink = window.location.href; const message = "اسم المنتج: " + productLink + "%0A" + "الاسم: " + name + "%0A" + "العنوان: " + address + "%0A" + "رقم التليفون: " + phone; const whatsappURL = "https://wa.me/رقم_الواتساب?text=" + encodeURIComponent(message); window.open(whatsappURL); } </script> </body> </html> وعليك باستبدال "صورة_المنتج.jpg" بمسار صحيح لصورة المنتج الخاصة بك، واستبدال "رقم_الواتساب" برقم واتساب حقيقي لحسابك. ووظيفية الكود هي إنشاء قسم يحتوي على صورة المنتج ووصفه، ثم زر "شراء المنتج"، وعند النقر على الزر، يتم عرض نموذج التحقق من الشراء، وبمجرد ملء النموذج والنقر على زر "تأكيد الشراء"، يتم فتح نافذة واتساب جديدة تحتوي على رابط المنتج والبيانات التي تم إدخالها في نموذج التحقق. حيث ستظهر البيانات في صيغة نصية، تحتوي على اسم المنتج، الاسم، العنوان، ورقم التليفون، وسيتم إرسالها إلى الرقم الذي قمت بتعيينه لحساب الواتساب الخاص بك.
  20. تحتاج إلى استخدام مكتبة خارجية أو برنامج مساعد يمكنك من تشغيل الملفات الصوتية، حيث أن لغة التجميع تعتبر لغة منخفضة المستوى وتركز بشكل أساسي على التحكم المباشر في وحدات المعالجة المركزية ومكونات النظام، وليست مصممة بشكل مباشر للتعامل مع الملفات الصوتية. فإذا كنت مهتمًا بتشغيل ملف موسيقى في برنامج بلغة التجميع، عليك بالبحث عن مكتبات خارجية تقوم بتنفيذ هذه المهمة وتوفير وظائف للتلاعب بالملفات الصوتية، وتعتمد الطريقة الدقيقة على نظام التشغيل الذي تستخدمه ونوع المعالج. والخطوات العامة هي البحث عن مكتبات تدعم تنسيقات الملفات الصوتية المختلفة مثل MP3 أو WAV. أيضًا تستطيع استخدام واجهات برمجة التطبيقات (APIs) المتاحة في بعض أنظمة التشغيل لتشغيل الملفات الصوتية من خلال برنامج بلغة التجميع، وهي الطريقة الأسهل، حيث يمكنك استدعاء واجهة برمجة التطبيقات المناسبة من برنامج التجميع الخاص بك. ومع ذلك، يجب أن تلاحظ أن استخدام لغة التجميع لتشغيل ملفات موسيقى أمرًا معقدًا ويتطلب خبرة متقدمة في لغة التجميع وهياكل البيانات وتنسيقات الملفات الصوتية.، ومن الأفضل استخدام لغة برمجة أعلى مستوى مثل C أو C++ أو Python لتنفيذ هذه المهمة، حيث تتوفر بهذه اللغات مكتبات جاهزة.
  21. قمت بتنفيذ الفكرة التي تريدها في الكود التالي لإنشاء <section> تحتوي على <div> وأربعة عناصر <div> داخليّة بأحجام متساوية، وسيتم تراصها فوق بعضها عند تصغير الصفحة: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8" /> <meta http-equiv="X-UA-Compatible" content="IE=edge" /> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <title>Document</title> <style> * { padding: 0; margin: 0; box-sizing: border-box; } section { width: 100%; height: 100vh; display: flex; justify-content: center; align-items: center; background-color: lightgray; } .container { display: flex; flex-wrap: wrap; justify-content: center; align-items: center; width: 80%; height: 80%; } .box { width: 45%; height: 45%; background-color: tomato; margin: 2.5%; } @media (max-width: 768px) { .box { width: 90%; height: 30%; } } </style> </head> <body> <section> <div class="container"> <div class="box"></div> <div class="box"></div> <div class="box"></div> <div class="box"></div> </div> </section> </body> </html> عند تصغير الشاشة إلى حجم أقل من 768 بكسل، سيتم ضبط أحجام العناصر الداخلية لتتناسب مع الشاشة الصغيرة وتظهر بشكل مناسب. أي أن المشكلة لديك كانت في تحديد العرض بنسبة 13% لعناصر div داخل عنصر <div class="h"> وبالتالي أنت بحاجة إلى تغيير العرض من خلال ميديا كويري كما فعلت في الكود. أرجو أنك تكون قد فهمت الفكرة، وإذا ما زال هناك أمور غير واضحة لك بالنسبة للتصميم المتجاوب فعليك بقراءة المقالات التالية بعناية:
  22. المشروع الخاص بك هو مشروع React ولذلك أنت بحاجة إلى قراءة الإرشادات التالية: وهل تواجه رسالة خطأ أو ما هي حالة المشروع على Netlify؟
  23. بالطبع عزيزي فسنك مناسب جدًا لتعلم البرمجة، وبإمكانك أن تصبح أفضل من المحترفين الحاليين إذا ما اجتهدت وإلتزمت بمسار تعليمي. ولكن عليك بالتأني وعدم الاستعجال فسنك ما زال صغيرًا والطريق طويلة أمامك، فاستفد من تلك الميزة بتعلم الأساسيات جيدًا سواء من خلال بايثون أو C++. وبإمكانك تعلم أساسيات البرمجة من خلال دورة علوم الحاسب في أكاديمية حسوب، أو أي مصدر تريده، المهم هو الإلتزام بمسار تعليمي حتى لو لم يكن الأفضل طالما أنك تفهم الشرح وتستطيع التطبيق. والشهادة والسيرة الذاتية لن تفيدك الآن، فحاليًا تستطيع تعلم البرمجة وبناء المشاريع ثم العمل على مواقع العمل الحر مثل خمسات ومستقل، ولكن يجب قراءة مقالات عن كيفية التعامل مع العملاء بشكل إحترافي. وعند بلوغك السن القانوني تستطيع العمل في شركات ووقتها ستستفيد بالشهادات والسيرة الذاتية بلا شك، لكن مجال البرمجة يعتمد على المهارة والإحترافية لا الشهادة وتجميع الكورسات. لذلك تحلى بالصبر ولا تتسرع وبعد تعلم الأساسيات قم بإختيار مجال البرمجة الذي تريده وأنصحك بمجال الويب كبداية، ثم قم ببناء المشاريع مرة مع الشرح أو المدرب ومرة بمفردك. وقد تم النقاش من قبل حول سؤال مماثل لسؤالك، أرجو منك قراءة النقاشات والمصادر التالية: دليل خدمة العملاء: كيف تقدم خدمة احترافية لعملائك؟
  24. في GitHub، تُستخدم تعابير "master" و "main" للإشارة إلى الفرع الافتراضي الرئيسي لمستودع Git. والفرق بينهما هو فقط في الاسم وليس في الوظيفة أو الأداء. فقديمًا، كان اسم الفرع الافتراضي في GitHub هو "master"، وهذا الاسم استُخدم للإشارة إلى الفرع الرئيسي الذي يحتوي على النسخة الرئيسية من المشروع. ومع ذلك، بدأت GitHub في اعتماد مصطلح "main" بدلاً من "master" بسبب القلق المتزايد حول المصطلح "master" وتأثيره اللاحق على العنصرية والتمييز العنصري. لذا، لجعل GitHub أكثر شمولًا ومتعدد الثقافات، قامت GitHub بتغيير اسم الفرع الافتراضي من "master" إلى "main". ومع ذلك، لا يزال بإمكان المستخدمين استخدام اسم "master" إذا كانوا يفضلون ذلك. أي أن استخدام "master" أو "main" في GitHub يعتبر مسألة تفضيل شخصي، ولا يؤثر ذلك على أداء مستودع Git أو إمكانياته. ولتحويل اسم الفرع الافتراضي في مستودع Git من "master" إلى "main" أو العكس، يمكنك اتباع الخطوات التالية: قم بفتح مستودع Git الذي ترغب في تغيير اسم الفرع الافتراضي فيه على GitHub. انتقل إلى صفحة الإعدادات (Settings) للمستودع. ابحث عن قسم يسمى "Branches" أو "Default Branch"، وسيعرض الفرع الافتراضي الحالي (مثل "master" أو "main"). انقر على الزر أو الرابط المرتبط بتغيير الفرع الافتراضي. ستظهر لك قائمة تحتوي على الفروع المتاحة في المستودع، حدد الفرع الجديد الذي ترغب في جعله الافتراضي (مثل "master" أو "main"). قد يُطلب منك تأكيد التغيير وإدخال كلمة مرورك. بعد التأكيد، ستتم عملية تحويل الفرع الافتراضي، وسيتم استخدام الفرع الجديد في المستقبل. يرجى ملاحظة أن تحويل اسم الفرع الافتراضي على GitHub لا يؤثر على تاريخ أو تاريخ الالتزامات الموجودة في المستودع، وهو مجرد تغيير في الاسم المستخدم للفرع الافتراضي.
  25. السجلات التي تظهر في إخراج البرنامج هي رسائل تنبيه ومعلومات تقنية من إطار العمل EclipseLink (المستخدم كإطار مستعار JPA) المستخدم في تطبيقك، وتقدم بعض المعلومات حول تكوين الكائنات المستمرة (persistent entities) والعلاقات بينها. وعليكي البحث عن رسائل خطأ أو استثناءات محددة في سجل الأخطاء الخاص بالتطبيق، فتلك الرسائل التي تظهر في إخراج البرنامج ليست ذات صلة مباشرة بقاعدة البيانات ولا توضح أي مشكلة محددة في الاتصال ب MySQL. لذا، يرجى توضيح المشكلة التي تواجهها مع قاعدة البيانات MySQL وتقديم المزيد من التفاصيل أو رسائل الخطأ إذا كانت متاحة.
×
×
  • أضف...