-
المساهمات
4657 -
تاريخ الانضمام
-
تاريخ آخر زيارة
-
عدد الأيام التي تصدر بها
30
نوع المحتوى
ريادة الأعمال
البرمجة
التصميم
DevOps
التسويق والمبيعات
العمل الحر
البرامج والتطبيقات
آخر التحديثات
قصص نجاح
أسئلة وأجوبة
كتب
دورات
كل منشورات العضو بلال زيادة
-
Bootstrap هو إطار عمل (framework) يبني على HTML وCSS، ويجعل تصميم المواقع أسرع وأكثر استجابة (responsive). إذا كنت قد أتقنت HTML/CSS/JS بالفعل، فتعلم Bootstrap يأخذ عادةً 1-2 أسابيع إذا كنت تدرس 2-4 ساعات يومياً. يركز على فهم المكونات مثل الشبكة (grid system)، الأزرار، والنماذج. يمكنك البدء بموقع Bootstrap الرسمي أو دورات مجانية على freeCodeCamp أو Udemy. افتراضاً إذا كانت الدورة تحتوي على مشاريع بسيطة فسيأخذ ذلك 2-4 أسابيع إضافية، مع تخصيص وقت للتصحيح والتحسين. المشاريع تساعد في تطبيق Bootstrap عملياً، مثل استخدام classes جاهزة للتصميم السريع. يمكنك التقدم فوراً أو بعد مراجعة سريعة (1-2 أيام). إجمالي الوقت المتوقع: 3-6 أسابيع كاملة، مع التركيز على الممارسة العملية لتجنب النظرية فقط.
-
CSR (Client-Side Rendering) - الرندر على جانب العميل في CSR، يتم إرسال ملفات JavaScript الأساسية (مثل bundle.js) إلى متصفح العميل (الكلاينت). ثم يقوم المتصفح بتنفيذ الكود لإنشاء الـHTML والمحتوى ديناميكياً. هذا يعني أن السيرفر يرسل صفحة فارغة أو هيكل أساسي، والرندر الحقيقي يحدث على جهاز المستخدم. المستخدم يطلب الصفحة. السيرفر يرسل ملف HTML فارغ مع روابط لـJS/CSS. المتصفح يحمّل الـJS ويبدأ في الرندر (مثل جلب بيانات من API). الصفحة تظهر بعد تنفيذ الـJS (قد يكون هناك تأخير إذا كان الإنترنت بطيئاً). تفاعلية عالية (مثل SPA - Single Page Applications)، تحديثات ديناميكية بدون إعادة تحميل الصفحة، أقل حمل على السيرفر. وقت تحميل أولي أطول (Time to First Paint)، سيء لـSEO لأن محركات البحث قد لا ترى المحتوى إذا لم يتم تنفيذ الـJS. // index.js (الرندر على الكلاينت) import React from 'react'; import ReactDOM from 'react-dom'; function App() { // هنا يحدث الرندر على الكلاينت: جلب بيانات ديناميكية const [data, setData] = React.useState(null); React.useEffect(() => { fetch('https://api.example.com/data') // جلب بيانات من API .then(response => response.json()) .then(json => setData(json)); }, []); return ( <div> <h1>مرحبا، هذا CSR!</h1> {data ? <p>البيانات: {data.message}</p> : <p>جاري التحميل...</p>} </div> ); } ReactDOM.render(<App />, document.getElementById('root')); // الرندر يحدث هنا على الكلاينت SSR (Server-Side Rendering) - الرندر على جانب السيرفر في SSR، يقوم السيرفر بإنشاء الـHTML الكامل (مع البيانات) قبل إرسالها إلى العميل. هذا يعني أن الصفحة جاهزة للعرض فوراً عند الوصول. المستخدم يطلب الصفحة. السيرفر ينفذ الكود (مثل جلب بيانات من DB أو API) ويبني الـHTML. يرسل الـHTML الجاهز إلى المتصفح. المتصفح يعرض الصفحة فوراً، ثم يمكن إضافة تفاعلية عبر JS (Hydration). تحميل أسرع (Time to First Contentful Paint أفضل)، جيد لـSEO لأن المحتوى موجود في الـHTML الخام، مناسب للمحتوى الديناميكي. حمل أكبر على السيرفر (يجب أن يرندر كل طلب)، قد يكون بطيئاً إذا كان السيرفر مزدحماً. // pages/index.js (SSR في Next.js) import React from 'react'; function Home({ data }) { return ( <div> <h1>مرحبا، هذا SSR!</h1> <p>البيانات من السيرفر: {data.message}</p> </div> ); } // هذه الدالة تعمل على السيرفر لكل طلب export async function getServerSideProps() { const res = await fetch('https://api.example.com/data'); // جلب بيانات على السيرفر const data = await res.json(); return { props: { data } }; // إرسال البيانات إلى الكومبوننت } export default Home; SSG (Static Site Generation) - توليد الموقع الثابت في SSG، يتم بناء الصفحات الثابتة (Static) أثناء عملية البناء (Build Time)، ثم يتم تخزينها كملفات HTML جاهزة على السيرفر أو CDN. لا يحدث رندر ديناميكي لكل طلب. أثناء البناء (npm run build)، يتم جلب البيانات وإنشاء الـHTML. السيرفر يخزن الملفات الثابتة. عند الطلب، يرسل السيرفر الـHTML الجاهز فوراً. أسرع تحميل ممكن (من CDN)، أقل حمل على السيرفر، أمان عالي (لا كود يعمل على السيرفر)، ممتاز لـSEO. غير مناسب للمحتوى الديناميكي المتغير كثيراً (يجب إعادة البناء للتحديثات)، لا يدعم تخصيص لكل مستخدم. // pages/index.js (SSG في Next.js) import React from 'react'; function Home({ data }) { return ( <div> <h1>مرحبا، هذا SSG!</h1> <p>البيانات الثابتة: {data.message}</p> </div> ); } // هذه الدالة تعمل أثناء البناء فقط export async function getStaticProps() { const res = await fetch('https://api.example.com/data'); // جلب بيانات أثناء البناء const data = await res.json(); return { props: { data } }; // الصفحة تُبنى مرة واحدة } export default Home; SEO (Search Engine Optimization) - تحسين محركات البحث SEO هو مجموعة من التقنيات لجعل موقعك يظهر أعلى في نتائج البحث (مثل Google). يتعلق بالمحتوى، السرعة، الهيكل، والوصولية. كيف يرتبط بالآخرين: CSR: سيء لـSEO لأن محركات البحث قد لا تنفذ الـJS، فترى صفحة فارغة. SSR/SSG: جيد لـSEO لأن الـHTML يحتوي على المحتوى الكامل، مما يسهل على الـCrawlers قراءته. استخدم meta tags، alt للصور، هيكل HTML جيد (h1, h2)، وأدوات مثل Google Search Console. في SSR/SSG، أضف getStaticPaths في Next.js للصفحات الديناميكية. // pages/index.js (مع SEO) import Head from 'next/head'; function Home() { return ( <> <Head> <title>عنوان الصفحة لـSEO</title> // يساعد في نتائج البحث <meta name="description" content="وصف الصفحة هنا" /> <meta name="keywords" content="SSR, SSG, CSR" /> </Head> <h1>مرحبا!</h1> </> ); } export default Home; نعم، يمكن استخدام SSR في تطبيقات الفرونت إند، لكن ليس بشكل مباشر "على الفرونت إند" لأن SSR يحدث على السيرفر. ومع ذلك، في إطارات مثل Next.js (لـReact) أو Nuxt.js (لـVue)، يمكنك دمج SSR مع الفرونت إند الديناميكي. الفرونت إند يتلقى الـHTML الجاهز من السيرفر، ثم يضيف التفاعلية عبر JS (Hydration). هذا يجعل التطبيق هجيناً: سريع مثل الثابت، وتفاعلي مثل CSR. إذا كنت تستخدم Vanilla JS بدون إطار، فSSR يتطلب سيرفر مثل Node.js/Express للرندر.
-
رسائل الخطأ والتحذير التي تظهر عند استدعاء مكتبة TensorFlow وKeras في الكود الخاص بك مرتبطة بمحاولة تسجيل مكونات CUDA (cuFFT، cuDNN، وcuBLAS) أكثر من مرة داخل بيئة التشغيل. هذه المشكلة تحدث عادةً عند استخدام TensorFlow مع وحدات معالجة الرسوميات (GPU) بسبب تضارب في تهيئة المكتبات أو إعدادات البيئة. الرسائل تشير إلى أن TensorFlow يحاول تسجيل مكونات CUDA (مثل cuFFT، cuDNN، وcuBLAS) لدعم العمليات على GPU، ولكن هذه المكونات قد تم تسجيلها مسبقًا. هذا قد يحدث إذا كنت تستخدم إصدارات متعددة من TensorFlow أو مكتبات أخرى تعتمد على CUDA في نفس الجلسة. قد يكون هناك عدم توافق بين إصدار TensorFlow وإصدارات مكتبات CUDA/cuDNN المثبتة على جهازك. على سبيل المثال، كل إصدار من TensorFlow يتطلب إصدارات محددة من CUDA وcuDNN. استيراد keras و tensorflow بشكل منفصل قد يسبب تضاربًا، خاصة إذا كنت تستخدم Keras كمكتبة مستقلة (وليس من خلال tensorflow.keras). في الإصدارات الحديثة، يُفضل استخدام tensorflow.keras لأن Keras مدمج الآن داخل TensorFlow.
- 3 اجابة
-
- 1
-
-
بما أنك تقول إنك نسيت أساسيات HTML على الرغم من كتابتك لها وفهمها سابقًا، فمن الأفضل أن تراجع أساسيات HTML قبل الانتقال إلى CSS. السبب هو أن HTML هو الأساس الذي يُبنى عليه CSS، وإذا لم تكن مرتاحًا تمامًا مع HTML، قد تجد صعوبة في فهم كيفية تطبيق CSS بشكل صحيح. لكن لا داعي للقلق، المراجعة لن تأخذ وقتًا طويلاً إذا كنت قد فهمت المادة من قبل، وستساعدك على استعادة الثقة.
-
ترتيبك منطقي لأنك تبدأ بأساسيات تطوير الواجهات الأمامية (Front-end) مع HTML, CSS, وJavaScript، وهي اللبنات الأساسية لبناء أي تطبيق ويب. الانتقال إلى React بعد إتقان JavaScript هو خيار ممتاز، لأن React يعتمد بشكل كبير على مفاهيم JS مثل الدوال، الكائنات، ومعالجة الحدث. دراسة MongoDB ثم Express وAPIs بعد ذلك مناسبة، لأنك تنتقل من الواجهة الأمامية إلى الخلفية (Back-end). تعلم MongoDB أولاً يساعدك على فهم قواعد البيانات قبل الخوض في بناء الـ APIs باستخدام Express. ربط الـ Front-end مع الـ Back-end هو الخطوة المنطقية الأخيرة لإكمال فهمك لمسار MERN.
-
حسنا، اخبرنا بالدورة التي انتهيت منها و تريد الدروس التدريبية أو المشاريع و سوف نعمل على طرح العديد من الدروس التدريبية و المشاريع لك و سوف نقوم بمراجعتها لك بعد تنفيذها .
-
سوف يجيبون على اسئلتك في أقرب وقت ممكن ، راجع صفحة الدعم كل فترة قصيرة و ستجد بأن مركز المساعدة قد رد عليك و عمل على حل مشكلتك
-
راجع الاجابة السابقة
-
يمكنك التواصل مع مركز المساعدة من هنا و اخبارهم بمشكلتك و سوف يعملون على حلها.
-
إذا كنت تدرس 2-3 ساعات يوميًا باجتهاد، فإن معظم الدورات قد تستغرق من 2 إلى 6 أسابيع و لكن يمكنك إكمال دورة متوسطة في 1-3 أسابيع إذا كنت مكثفًا (4-6 ساعات يوميًا)، قد تحتاج إلى 1-2 شهر إذا درست بوتيرة معتدلة (2-3 ساعات يوميًا)، لكن مع الاجتهاد يمكن تقليصها إلى 2-4 أسابيع. خصص وقتًا يوميًا ثابتًا: 3-5 ساعات يوميًا مع التركيز يمكن أن يختصر المدة. ركز على التطبيق العملي: الدورات التي تتضمن مشاريع عملية تساعدك على فهم أسرع. استخدم مصادر إضافية: إذا واجهت صعوبة، شاهد دروسًا مجانية على يوتيوب أو اقرأ مقالات لتوضيح المفاهيم. حدد أهدافًا يومية: مثل إكمال درس أو قسم معين يوميًا.
-
الفيديوهات مشروحة مسبقاً لن يكون أي شخص قادر على تخصيص وقته للدخول معك وشرح الدورة لك و بالتالي يجب عليك مشاهدة الفيديوهات تدريجياً ستجد الأمور أصبحت سهلة.
-
الدورة عبارة عن فيديوهات مشروحة مسبقاً و بالتالي يجب على الطالب الدخول و حضور الدورة بالترتيب و اي مشكلة تواجهك يجب عليك طرحها في أسفل الفيديو الذي واجهت فيه مشكلة عبر صندوق التعليقات سوف تجد الكثير من المدربين الذين سيعملون على حل مشكلتك.
-
يرجى ارفاق نص المشكلة و صورة لها.
-
تحقق مما إذا كان Python مثبتًا على جهازك. يمكنك تحميل أحدث إصدار من الموقع الرسمي وتأكد من اختيار خيار "Add Python to PATH" أثناء التثبيت. إضافة Python إلى PATH يدويًا ابحث عن "Environment Variables" في البحث على نظام Windows. افتح "Edit the system environment variables" واضغط على "Environment Variables". في قسم "System variables" أو "User variables"، ابحث عن متغير Path وأضف المسار إلى مجلد Python (مثل C:\Python39 و C:\Python39\Scripts). بعد تحديث المسار، أغلق وأعد فتح نافذة موجه الأوامر (Command Prompt) ثم جرب كتابة python --version مرة أخرى.
- 10 اجابة
-
- 1
-
-
تأكد أن إصدار بايثون الخاص بك متوافق مع إصدار TensorFlow الذي تقوم بتثبيته. TensorFlow عادةً يعمل مع بايثون 3.7-3.10 ثم تثبيت Microsoft Visual C++ Redistributable: هذه تبعية شائعة لـ TensorFlow على ويندوز. قم بتحميلها وتثبيتها من الموقع الرسمي لمايكروسوفت إذا كانت مفقودة. نفّذ pip install --upgrade pip ثم pip install tensorflow للتأكد من أن لديك أحدث إصدار وتثبيت نظيف ثم قم بإلغاء تثبيت TensorFlow باستخدام pip uninstall tensorflow ثم أعد تثبيته.
- 10 اجابة
-
- 1
-
-
يجب التأكد من أن ملف views/pos_templates.xml يحتوي على تعليمات XML صالحة لتعديل واجهة نقطة البيع (POS) كما هو مطلوب أضف الكود التالي إلى ملف views/pos_templates.xml لتعديل واجهة نقطة البيع بحيث تتضمن خيار تحديد نوع الطلب (استلام أو توصيل) وحقول التوصيل (عنوان، عامل التوصيل، رسوم التوصيل). <?xml version="1.0" encoding="UTF-8"?> <templates id="template" xml:space="preserve"> <!-- تعديل شاشة الإيصال لإضافة خيار نوع الطلب --> <t t-extend="PosTicket"> <t t-jquery=".pos-receipt" t-operation="after"> <div class="order-type-selector"> <label>Order Type:</label> <select class="order-type" onchange="setOrderType(this)"> <option value="pickup">Pickup</option> <option value="delivery">Delivery</option> </select> </div> <!-- إضافة تفاصيل التوصيل إذا تم اختيار التوصيل --> <t t-if="order.order_type == 'delivery'"> <div class="delivery-info"> <p>Delivery Address: <t t-esc="order.delivery_address"/></p> <p>Delivery Person: <t t-esc="order.delivery_person"/></p> <p>Delivery Fee: <t t-esc="order.delivery_fee"/></p> </div> </t> </t> </t> <!-- تعديل شاشة الدفع لإضافة حقول إدخال تفاصيل التوصيل --> <t t-extend="PaymentScreenWidget"> <t t-jquery=".paymentlines" t-operation="after"> <t t-if="order.order_type == 'delivery'"> <div class="delivery-details"> <label>Delivery Address:</label> <input type="text" class="delivery-address"/> <label>Delivery Person:</label> <input type="text" class="delivery-person"/> <label>Delivery Fee:</label> <input type="number" class="delivery-fee"/> </div> </t> </t> </t> </templates> تأكد من أن ملف __manifest__.py يشير إلى ملف views/pos_templates.xml بشكل صحيح وأن الأصول (assets) تشمل الملفات في static/src/js وstatic/src/xml إذا كنت تستخدم ملفات JavaScript أو XML إضافية في تلك المجلدات. الكود الذي قدمته في __manifest__.py يبدو صحيحًا، لكن دعنا نتحقق منه. { 'name': 'Custom POS Delivery and Pickup', 'version': '1.0', 'depends': ['point_of_sale'], 'data': [ 'views/pos_templates.xml', ], 'assets': { 'point_of_sale.assets': [ 'custom_pos_delivery/static/src/js/*.js', ], }, } الكود التالي يجب أن يكون موجودًا في static/src/js/pos_delivery.js odoo.define('custom_pos_delivery.pos_delivery', function(require) { 'use strict'; var models = require('point_of_sale.models'); var PosModel = models.PosModel; models.load_fields('pos.order', ['order_type', 'delivery_address', 'delivery_person', 'delivery_fee']); var _super_order = models.Order.prototype; models.Order = models.Order.extend({ initialize: function() { _super_order.initialize.apply(this, arguments); this.order_type = 'pickup'; this.delivery_address = ''; this.delivery_person = ''; this.delivery_fee = 0.0; }, set_order_type: function(type) { this.order_type = type; this.trigger('change', this); }, set_delivery_details: function(address, person, fee) { this.delivery_address = address; this.delivery_person = person; this.delivery_fee = parseFloat(fee) || 0.0; this.trigger('change', this); }, export_as_JSON: function() { var json = _super_order.export_as_JSON.apply(this, arguments); json.order_type = this.order_type; json.delivery_address = this.delivery_address; json.delivery_person = this.delivery_person; json.delivery_fee = this.delivery_fee; return json; }, }); var _super_posmodel = PosModel.prototype; models.PosModel = models.PosModel.extend({ initialize: function() { _super_posmodel.initialize.apply(this, arguments); this.on('change:order_type', this, this.add_delivery_fee); }, add_delivery_fee: function(order) { if (order.order_type === 'delivery') { var delivery_product = this.db.get_product_by_id(DELIVERY_PRODUCT_ID); // استبدل بمعرف المنتج if (delivery_product) { order.add_product(delivery_product, { price: order.delivery_fee }); } } }, }); return models; });
- 5 اجابة
-
- 1
-
-
لإنشاء زر تسجيل دخول ضمن نموذج (form) باستخدام HTML، مع إضافة حقول لإدخال اسم المستخدم وكلمة المرور، إليك مثالًا يوضح ذلك. يتضمن المثال نموذجًا بسيطًا مع زر تسجيل دخول وتصميم أساسي باستخدام CSS <html lang="ar"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>نموذج تسجيل الدخول</title> <style> body { font-family: Arial, sans-serif; display: flex; justify-content: center; align-items: center; height: 100vh; margin: 0; background-color: #f0f0f0; } .login-form { background-color: white; padding: 20px; border-radius: 8px; box-shadow: 0 0 10px rgba(0, 0, 0, 0.1); width: 300px; text-align: center; } .login-form h2 { margin-bottom: 20px; } .login-form input { width: 100%; padding: 10px; margin: 10px 0; border: 1px solid #ccc; border-radius: 4px; box-sizing: border-box; } .login-button { background-color: #4CAF50; color: white; padding: 10px; border: none; border-radius: 4px; cursor: pointer; width: 100%; font-size: 16px; transition: background-color 0.3s; } .login-button:hover { background-color: #45a049; } </style> </head> <body> <form class="login-form" action="/submit-login" method="POST"> <h2>تسجيل الدخول</h2> <input type="text" name="username" placeholder="اسم المستخدم" required> <input type="password" name="password" placeholder="كلمة المرور" required> <button type="submit" class="login-button">تسجيل الدخول</button> </form> <script> // يمكنك إضافة منطق JavaScript هنا إذا لزم الأمر document.querySelector('.login-form').addEventListener('submit', function(event) { event.preventDefault(); // لمنع إرسال النموذج مباشرة (لأغراض العرض) alert('تم محاولة تسجيل الدخول!'); // أضف منطق التحقق من البيانات أو إرسالها إلى الخادم هنا }); </script> </body> </html> لاحظي بأن زر كوده التالي <button type="submit" class="login-button">تسجيل الدخول</button>
-
قبل الغوص في الكود، حاول فهم الغرض من المشروع. ما المشكلة التي يحلها؟ ما هي الوظائف الرئيسية؟ قراءة وصف المشروع أو الـ README (إن وجد) ستساعدك على فهم السياق. لا تحاول استيعاب المشروع كاملًا دفعة واحدة. قسّم الكود إلى أجزاء صغيرة (مثل الدوال، الكائنات، أو الوحدات). ركز على فهم كل جزء على حدة قبل الانتقال إلى التالي. أثناء قراءة الكود، أضف تعليقاتك الخاصة لشرح ما يفعله كل جزء. إذا كنت تستخدم بيئة تطوير مثل VS Code، يمكنك كتابة ملاحظات بجانب السطور لتوضيح فهمك. لا تكتفِ بالمشاهدة فقط. قم بتنصيب المشروع على جهازك، وشغّل الكود. جرب تعديل أجزاء صغيرة منه (مثل تغيير قيم المتغيرات أو إضافة ميزة بسيطة) لفهم كيفية عمل المشروع عمليًا. استخدم أدوات التصحيح في بيئة التطوير (مثل نقاط التوقف Breakpoints) لتتبع كيفية تنفيذ الكود خطوة بخطوة. هذا سيعزز فهمك لتدفق البرنامج. حاول تتبع الكود يدويًا (مثلما تفعل عند حل مسائل الرياضيات). اكتب قيم المتغيرات أو النتائج المتوقعة على ورقة لفهم كيف يعمل الكود.
- 3 اجابة
-
- 1
-
-
لا يغني ابداً ، لان فعليا wordpress مكتوب بلغة PHP , html ,css الكثير من الثيمات الموجود ة و المخصصة لوردبريس مبرمجة باستخدام PHP, html , css و بالتالي لكي تستطيع انشاء أو تعديل أو تخصيص ثيم ما أو حتى إضافة يجب أن تكون على دراية كافية بكل من php, html , css ، و إلا بدونها لن تستطيع التعامل مع الوردبريس.
-
إضافة خيار قبل إنشاء الطلب (استلام من الفرع أو توصيل إلى المنزل) لإضافة خيار لتحديد نوع الطلب (استلام من الفرع أو توصيل) قبل إنشاء الطلب في جلسة نقطة البيع، يمكنك استخدام إضافة مخصصة (Custom Module) لتعديل واجهة المستخدم وسلوك النظام. قم بإنشاء موديول جديد في مجلد الـ addons الخاص بـ Odoo. قم بإنشاء الهيكلية التالية للموديول custom_pos_delivery/ ├── __init__.py ├── __manifest__.py ├── models/ │ ├── __init__.py │ ├── pos_order.py ├── static/ │ ├── src/ │ ├── js/ │ ├── xml/ └── views/ ├── pos_templates.xml عداد ملف __manifest__.py { 'name': 'Custom POS Delivery and Pickup', 'version': '1.0', 'depends': ['point_of_sale'], 'data': [ 'views/pos_templates.xml', ], 'assets': { 'point_of_sale.assets': [ 'custom_pos_delivery/static/src/js/*.js', 'custom_pos_delivery/static/src/xml/*.xml', ], }, } تعديل واجهة المستخدم (JavaScript وXML) في static/src/xml/pos_templates.xml، أضف زرين أو قائمة منسدلة لتحديد نوع الطلب (استلام أو توصيل) في واجهة نقطة البيع. <t t-extend="PosTicket"> <t t-jquery=".pos-receipt" t-operation="after"> <div class="order-type-selector"> <label>Order Type:</label> <select class="order-type" onchange="setOrderType(this)"> <option value="pickup">Pickup</option> <option value="delivery">Delivery</option> </select> </div> </t> </t> في static/src/js/pos_delivery.js، أضف منطقًا لتخزين نوع الطلب في جلسة نقطة البيع odoo.define('custom_pos_delivery.pos_delivery', function(require) { 'use strict'; var models = require('point_of_sale.models'); var PosModel = models.PosModel; models.load_fields('pos.order', ['order_type']); var _super_order = models.Order.prototype; models.Order = models.Order.extend({ initialize: function() { _super_order.initialize.apply(this, arguments); this.order_type = 'pickup'; // Default value }, set_order_type: function(type) { this.order_type = type; this.trigger('change', this); }, export_as_JSON: function() { var json = _super_order.export_as_JSON.apply(this, arguments); json.order_type = this.order_type; return json; }, }); return models; }); تعديل نموذج pos.order في Python في models/pos_order.py، أضف حقلًا لتخزين نوع الطلب from odoo import fields, models class PosOrder(models.Model): _inherit = 'pos.order' order_type = fields.Selection([ ('pickup', 'Pickup'), ('delivery', 'Delivery') ], string='Order Type', default='pickup') قم بتثبيت الموديول الجديد من خلال واجهة Odoo (Apps > Update Apps List > Install). تأكد من تمكين وضع المطور (Developer Mode) لتسهيل التعديلات. إضافة عنوان العميل، اسم عامل التوصيل، ورسوم التوصيل إذا تم اختيار "توصيل إلى المنزل"، يمكنك إضافة حقول لإدخال عنوان العميل، اسم عامل التوصيل، ورسوم التوصيل. إضافة حقول إضافية إلى نموذج pos.order في models/pos_order.py، أضف الحقول التالية from odoo import fields, models class PosOrder(models.Model): _inherit = 'pos.order' order_type = fields.Selection([ ('pickup', 'Pickup'), ('delivery', 'Delivery') ], string='Order Type', default='pickup') delivery_address = fields.Char(string='Delivery Address') delivery_person = fields.Char(string='Delivery Person') delivery_fee = fields.Float(string='Delivery Fee') تعديل واجهة نقطة البيع لإدخال التفاصيل في static/src/xml/pos_templates.xml، أضف حقول إدخال تظهر عند اختيار "توصيل" <t t-extend="PaymentScreenWidget"> <t t-jquery=".paymentlines" t-operation="after"> <t t-if="order.order_type == 'delivery'"> <div class="delivery-details"> <label>Delivery Address:</label> <input type="text" class="delivery-address"/> <label>Delivery Person:</label> <input type="text" class="delivery-person"/> <label>Delivery Fee:</label> <input type="number" class="delivery-fee"/> </div> </t> </t> </t> في static/src/js/pos_delivery.js، أضف منطقًا لحفظ بيانات التوصيل odoo.define('custom_pos_delivery.pos_delivery', function(require) { 'use strict'; var models = require('point_of_sale.models'); var PosModel = models.PosModel; models.load_fields('pos.order', ['order_type', 'delivery_address', 'delivery_person', 'delivery_fee']); var _super_order = models.Order.prototype; models.Order = models.Order.extend({ initialize: function() { _super_order.initialize.apply(this, arguments); this.order_type = 'pickup'; this.delivery_address = ''; this.delivery_person = ''; this.delivery_fee = 0.0; }, set_delivery_details: function(address, person, fee) { this.delivery_address = address; this.delivery_person = person; this.delivery_fee = parseFloat(fee) || 0.0; this.trigger('change', this); }, export_as_JSON: function() { var json = _super_order.export_as_JSON.apply(this, arguments); json.order_type = this.order_type; json.delivery_address = this.delivery_address; json.delivery_person = this.delivery_person; json.delivery_fee = this.delivery_fee; return json; }, }); return models; }); إذا كنت تريد إضافة رسوم التوصيل كعنصر في الفاتورة، قم بإنشاء منتج افتراضي في Odoo يسمى "رسوم التوصيل" (Delivery Fee) وقم بإضافته تلقائيًا إلى الطلب عند اختيار التوصيل في static/src/js/pos_delivery.js، أضف منطقًا لإضافة المنتج var _super_posmodel = PosModel.prototype; models.PosModel = models.PosModel.extend({ initialize: function() { _super_posmodel.initialize.apply(this, arguments); this.on('change:order_type', this, this.add_delivery_fee); }, add_delivery_fee: function(order) { if (order.order_type === 'delivery') { var delivery_product = this.db.get_product_by_id(DELIVERY_PRODUCT_ID); // استبدل بمعرف المنتج if (delivery_product) { order.add_product(delivery_product, { price: order.delivery_fee }); } } }, }); قم بتعديل قالب الإيصال في pos_templates.xml لإظهار عنوان التوصيل، اسم عامل التوصيل، ورسوم التوصيل <t t-extend="PosTicket"> <t t-jquery=".pos-receipt" t-operation="after"> <t t-if="order.order_type == 'delivery'"> <div class="delivery-info"> <p>Delivery Address: <t t-esc="order.delivery_address"/></p> <p>Delivery Person: <t t-esc="order.delivery_person"/></p> <p>Delivery Fee: <t t-esc="order.delivery_fee"/></p> </div> </t> </t> </t> إذا كنت تريد تحديد عامل التوصيل من قائمة موظفين، يمكنك إضافة حقل مرتبط بنموذج hr.employee class PosOrder(models.Model): _inherit = 'pos.order' delivery_person_id = fields.Many2one('hr.employee', string='Delivery Person') أو يمكنك إضافة جاهزة من Odoo Apps Store إذا كنت لا ترغب في تطوير موديول مخصص بنفسك، يمكنك استخدام إضافة مثل "POS TakeAway Order" من Odoo Apps Store، والتي تدعم إدارة الطلبات الخارجية وتفاصيل التوصيل.
- 5 اجابة
-
- 1
-
-
انصحك بالتوجه إلى شركات التي تبيع أجهزة الكترونية في بلدك و اقتراح عليهم المواصفات المطلوبة سيساعدونك في تجميعة مناسبة للميزانية لديك فكل بلد تختلف فيها الاسعار.
- 6 اجابة
-
- 1
-
-
استخدام الذكاء الاصطناعي (AI) في مشاريع البرمجة، خاصة باستخدام بايثون، يمكن أن يكون مفيدًا جدًا في العديد من السيناريوهات، ولكنه يتطلب فهمًا واضحًا لكيفية الاستفادة منه ومتى يُفضل تجنبه. إنشاء النماذج الذكية (Machine Learning & Deep Learning) يمكن استخدام مكتبات بايثون مثل TensorFlow، PyTorch، Scikit-learn، أو Keras لتطوير نماذج تعلم الآلة أو التعلم العميق. على سبيل المثال: بناء نماذج لتصنيف البيانات (مثل التنبؤ بما إذا كان العميل سيشتري منتجًا أم لا). معالجة اللغة الطبيعية (NLP) باستخدام مكتبات مثل Hugging Face Transformers لتطوير تطبيقات مثل الترجمة الآلية أو تحليل المشاعر. معالجة الصور باستخدام OpenCV أو Pillow لتطبيقات مثل التعرف على الوجوه أو تحليل الصور الطبية. حيث هذا الكود يقوم بناء نموذج للتنبؤ بالأسعار باستخدام Scikit-learn from sklearn.linear_model import LinearRegression import pandas as pd # تحميل البيانات data = pd.read_csv('housing.csv') X = data[['size', 'rooms']] # المتغيرات المستقلة y = data['price'] # المتغير المعتمد # تدريب النموذج model = LinearRegression() model.fit(X, y) # التنبؤ prediction = model.predict([[120, 3]]) # مساحة 120 متر، 3 غرف print(f"السعر المتوقع: {prediction[0]}") متى يُفضل تجنبه؟ إذا كان المشروع بسيطًا ولا يتطلب تعقيدات AI (مثل تطبيق ويب بسيط). إذا كانت الموارد محدودة (مثل عدم توفر بيانات كافية أو أجهزة قوية). إذا كان هناك مخاطر أخلاقية أو قانونية تتعلق بالبيانات. إذا كنت ترغب في تعزيز مهارات البرمجة الأساسية دون الاعتماد على أدوات AI.
-
تطوير Front-End (HTML، CSS، JavaScript، وأطر العمل مثل React وVue.js) لا يزال مطلوبًا بشدة في سوق العمل العالمي والعربي. مواقع الويب وتطبيقات الويب التفاعلية هي العمود الفقري للتجارة الإلكترونية، الشركات الناشئة، والخدمات الرقمية و الشركات مثل Google وAmazon وغيرها تبحث عن مطوري Front-End ذوي خبرة عملية في مشاريع حقيقية. في سوق الفریلانس (مثل منصات مستقل وخمسات)، مشاريع تصميم واجهات المستخدم (UI) وتجربة المستخدم (UX) لها طلب كبير، خاصة مع تزايد الشركات التي تتحول إلى الرقمنة. مع تطور الذكاء الاصطناعي وأدوات التصميم الآلي (مثل أدوات No-Code/Low-Code)، قد تتغير طبيعة عمل الـ Front-End قليلاً، لكن الطلب على المطورين الذين يفهمون التصميم التفاعلي، تحسين الأداء (Performance Optimization)، ودمج واجهات برمجية (APIs) سيظل قويًا.
- 1 جواب
-
- 1
-