لوحة المتصدرين
المحتوى الأكثر حصولًا على سمعة جيدة
المحتوى الأعلى تقييمًا في 04/04/22 في كل الموقع
-
كنت أقراء بعض أكواد PHP في أحد السكريبتات مفتوحة المصدر للتعلم منه، ولكن وجد كود يستعمل فيه المعامل :? لتغير قيمة متغير: $comments = $comments ?: do_something(); أنا أعلم ما هو المعامل الثلاثي ternary operator وكيف يتم إستعماله، ولكن كيف يتم إستعمال المعامل :? وما فائدته في PHP؟2 نقاط
-
لا أدري ما المُشكلة التي تحدث لك لكن السطر المسؤول عن حذف السجل من الجدول الوسيط ليس به خطأ: auth()->user()->servicesInCart()->detach($book->id); و أعتقد أنه يعمل. ما لاحظته أنه عند حذف كل المُنتج من السلة لا تقوم بعملية إسناد للقيمة الجديدة لاحظ هذا السطر: $book->number_of_copies - $oldQuantity; هنا أنت تقوم بعملية طرح فقط كأن تقول 10 - 2 لكن لا تحفظ القيمة الجديدة في خاصية number_of_copies لذلك الكائن. يجب عليك التعديل: $book->number_of_copies = $book->number_of_copies - $oldQuantity; // أو $book->number_of_copies -= $oldQuantity; بإمكانك إستخدام التوابع Increment & Decrement مباشرةً عوض اسناد القيمة للخاصية ثم إستدعاء التابع save. بهذا الشكل: $book->decrement('number_of_copies ', $oldQuantity); بهذا الشكل سيتم التعديل مُباشرة في جدول الكتب. لا تستدعي التابع save. و في حالة حذف نُسخة واحدة تستخدم: $book->decrement('number_of_copies '); لاحظ لم أمرر قيمة للمُعامل الثاني و في هذه الحالة سيتم إستخدام القيمة الإفتراضية و هي 1 أي أنه سيتم الإنقاص بـ 1 نفس الملاحظة في التابع increment يُمكنك إستخدامه في التابع addToCart.2 نقاط
-
انا ابحث عن طريقه لربط قاعده بيانات هاتف بقاعده البيانات تطبيق سطح مكتب . انا اعمل على تطبيق لسطح المكتب يعمل على تخزين بيانات معينه ،انا اريد ان اضيف خاصيه تسمح لاحد من المستخدمين اضافه بيانات معينه من هاتفه الى التطبيق وفي نفس الوقت ستظهر على تطبيق سطح المكتب. كيف يمكنني فعل ذلك؟؟ مع العلم اللغه المستخدمه هي Java.1 نقطة
-
في قوالب جانغو Django Templates يمكن زيادة قيمة متغير من خلال مرشح filter المسمى add على النحو التالي: {{ myvariable|add:123 }} ولكن كيف أقوم بإنقاص قيمة المتغير (الطرح منه) في قوالب جانغو Django؟ هل يوجد filter آخر لعملية الطرح أم يجب أن أقوم بضرب القيمة في -1 ثم أضيف القيمة السالبة إلى المتغير ليتم إنقاصه؟1 نقطة
-
يتوجب على كل شركة أن تطور خطة مبيعات ناجحة. وقد تستطيع الشركة أن تؤجل خطة المبيعات إلى حين الحصول على أول 100 أو 1000 زبون، ولكن في مرحلة ما سوف يتحتم عليها أن تحافظ على شعبيتها في السوق، وأن تزيد المبيعات. إن بناء استراتيجية مبيعات واضحة ومحددة هو الطريق الأمثل لتحقيق نمو مستمر. وإذا بنيت استراتيجية مبيعات صحيحة فسوف تضع شركتك على أول طريق النجاح، أما إذا اخترت العمل بدون استراتيجية مبيعات فأنت تعرض شركتك للفشل. وصياغة استراتيجية المبيعات صياغة صحيحة من شأنه أن يساعد فريق المبيعات لديك على العمل بتركيز أكبر، وذلك سواءً كنت تدير شركة صغيرة أم عملاقة، أو كنت تتبنى التسويق الضمني أم التسويق المكثف، أو كنت تسعى لاستقطاب زبائن جُدد، أم الحفاظ على الزبائن الحاليين. ويمكن القول إن سر النجاح يكمن في التركيز على استراتيجية المبيعات الملائمة لطبيعة عملك وتنفيذها بدقة واستمرارية. ولمساعدتك على بناء استراتيجية المبيعات، اختار موقع Intercom مجموعة من نصائح الخبراء العاملين في هذا المجال في شركة Intercom وخارجها، والتي تمثل خلاصة تجاربهم والدروس التي تعلموها في صياغة استراتيجيات المبيعات الناجحة. ولكن أولاً وقبل كل شيء.. ما هي استراتيجية المبيعات؟ تُعد استراتيجية المبيعات المحرك الرئيس لقدرة الشركة على المنافسة وتحقيق الأرباح. وهي تمثل خطة عملية لاستقطاب زبائن جُدد، وتطوير المبيعات للزبائن الحاليين. وبغض النظر عن عدد فريق المبيعات لديك، يمكن القول إن استراتيجية المبيعات تلعب دورًا مهمًا في قدرة الشركة على عقد الصفقات بسرعة وفعالية. وبصفة عامة، تتضمن استراتيجية المبيعات السوق المستهدف، ومواصفات الزبون المثالي، وكيفية الدخول إلى السوق، وطرق البيع وآلياته. لكن تذكر دومًا أنه يتوجب عليك تطوير استراتيجية مبيعاتك على نحو يتلاءم مع نمو شركتك. 1. فهم احتياجات الزبون المستهدف ديس تراينور Des Traynor المؤسس المشارك ومدير الاستراتيجيات في شركة Intercom سواءً كنت تقدم خدمة برمجية أو مادية، يجب عليك أن تفهم كيف تجذب الزبون المستهدف، وأن تقرر حجم الأرباح التي تريد أن تحصل عليها منه، إذ أن ذلك يمنحك القدرة على معرفة كيفية الوصول إلى الزبائن، ويضعك أمام ثلاثة خيارات: لقد وضع جويل يورك (Joel York) هذه المحاور، وهي تمثل ثلاثة نماذج أساسية للمبيعات في عالم الخدمات البرمجية، وهي تُعد وسيلة رائعة حتى تفهم خطوتك التالية. (الربع السفلي الأيمن يمثل استعمال طريقة مبيعات معقدة لاستقطاب زبائن ذوي قيمة منخفضة، وبالتالي فهو ليس قابلاً للتطبيق ولا يستحق أن يؤخذ في الحسبان.) وتجد العديد من الشركات الناشئة نفسها في الربع السفلي الأيسر عند استعمال هذا النموذج، فهو الأسهل لتحقيق التوسع، ولكن مشكلة هذا الربع تتمثل في وجود عدد كبير من الزبائن ذوي القيمة المنخفضة، وهو ما يحد من القدرة على استقطاب زبائن جدد، فإنفاق 300$ من أجل استقطاب زبائن لمنتج قيمته 99$ ليس فكرة جيدة من ناحية اقتصادية. ولذلك يجب أن تختار ربعك بناءً على مجال عملك، إذ أن اختيار الربع الخطأ قد يحكم عليك بالفشل قبل أن تبدأ. وإليك بعض الأمثلة: بعض المجالات معروفة بصعوبة الوصول إليها. على سبيل المثال، قد لا يكون التسويق بالمحتوى خيارًا ملائمًا لأطباء الأسنان، كما هو ملائم للمطورين، وذلك يعني أنه يتوجب عليهم الدفع من أجل استقطاب الزبائن. بعض المجالات تتعامل بالعقود السنوية، واتفاقيات الحفاظ على السرية، واتفاقيات مستوى الخدمة، وهذا يعني أنك بحاجة إلى الاستثمار في آلية للمبيعات. بعض المجالات تعتمد على عروض الباوربوينت، وتأهيل الموظفين الجدد، وتدريبهم في الموقع، وهو ما يعني أنك بحاجة إلى عقود ذات قيمة مرتفعة لتحقيق الأرباح من الزبائن. إن فهم المبيعات الذاتية والمبيعات المركبة، والاختيار بينهما، وتحديد قيمة الزبائن، يساعد بلا شك على معرفة كيفية الوصول إليهم. 2. معرفة مواضع استعمال المبيعات الذاتية والمبيعات المركبة جون باروز John Barrows مدرب مبيعات إذا كنت تبيع عقودًا ذات قيمة منخفضة للغاية، ولنقل 1000 دولار سنويًا، فمن الصعب بمكان استعمال نموذج المبيعات المركبة. ولكن إذا كانت دورة المبيعات لديك في حدود 20-30 يومًا، وكنت تتلقى مكالمتين أو ثلاثة من الزبائن على الأقل، فذلك يعني ضرورة استعمال نموذج المبيعات المركبة للتأكد من سير الأمور على ما يُرام. لا يشعر الناس عادةً بالقلق عند الشراء من الإنترنت، ولكن عندما يتعلق الأمر بمبلغ كبير مثل 5,000-10,000 دولار فهم يفضلون الحديث إلى شخص ما في البداية. ورغم عشوائية الرقم السابق لكن هذه العتبة موجودة بالفعل. 3. توزيع المهام بوضوح ودقة بين أفراد فريق المبيعات إل بي هارفي LB Harvery نائب رئيس المبيعات في شركة Intercom يحاول العديد من مندوبي المبيعات، وخصوصًا المبتدئين منهم، أن يتبعوا طرائق متعددة، ولكن ذلك ليس صحيحًا، إذ أن التركيز يقود إلى التفوق، لذلك احرص عند صياغة استراتيجية المبيعات أن تحدد أدوارًا منفصلة لأفراد فريقك، وأن تحفز طرق البيع الصحيحة وأن تمنحها الأولوية. لنأخذ التسويق الضمني والتسويق المكثف مثالاً، فهما يتطلبان مهارات وآليات عمل مختلفة تمامًا، إذ يتوجب على فريق التسويق الضمني أن يهتم بتحليل اتجاهات الزبائن على مواقع التواصل الاجتماعي، وأن يسعى إلى جلب زيارات عالية الجودة، وأن يزيد من معدل تحويل الزيارات إلى فرص باستعمال أساليب معينة مثل المحادثات الفورية، في المقابل يتوجب على فريق التسويق المكثف أن يبرز مزايا المنتج أمام الزبائن. والخلاصة، أنهما فريقان مختلفان يتطلبان مندوبين مختلفين وطرق بيع مختلفة. وأيًا كان النموذج الذي تختاره، فمن المهم اختياره عن اقتناع شخصي، وإدراك لإيجابيات وسلبيات كل نموذج، ومعرفة بكيفية استغلال هذه الإيجابيات. 4. تحديد مواصفات الزبون المثالي توماسز تونجوز Tomasz Tunguz شريك في Redpoint Ventures هل تستطيع بصفتك مديرًا لشركة ناشئة أن تصف زبونك المثالي؟ يجب أن تعلم أنك كلما كنت دقيقًا في وصف زبونك المثالي كان ذلك أفضل. ولكن وصف الزبون يجب ألا يكون مبهمًا على نحو يدفع الشركة إلى التركيز على قاعدة كبيرة للغاية من الزبائن المحتملين، ويؤدي إلى إضاعة الوقت والجهد في محاولة جذب عملاء غير مؤهلين. كذلك يجب ألا يكون وصف الزبون المثالي محددًا للغاية، فلا يجب أن يكون مثلاً: ميكانيكي محبط في الثلاثينات من العمر يحب لعب ألعاب الطاولة الألمانية ويقرأ لـ "نيتشه" ويشاهد فنون القتال المختلطة. وإنما يجب أن يكون وصف الزبون المثالي دقيقًا على نحو يمكنك وغيرك من التعرف عليه. ولكن كيف سأتعرف على الشخص في المثال إذا أردت أن أبيعه شيئًا؟ من أين أبدأ؟ من اجتماع الميكانيكيين؟ أم من لقاءات ألعاب الطاولة؟ أم في منتديات معجبي "نيتشه"؟ ويمكن القول إن وصف الزبون المثالي يجب أن يحقق ثلاثة أغراض: أن يتيح التعرف على الزبون المحتمل بسرعة. أن تستطيع وصفه بسهولة لشخص آخر حتى يستطيع بدوره أن يعثر على الزبائن المحتملين. أن يكون الوصف محددًا حتى يتسنى بناء أنظمة حاسوب تتعرف على الزبائن المحتملين. ومن الأمثلة الجيدة لوصف الزبون المثالي ما يلي: نائب رئيس التسويق في المناطق الخاضعة للنظام الأوروبي العام لحماية البيانات. رؤساء المبيعات الذين يعملون في مجال التكنولوجيا ويرأسون فرقًا يزيد عدد أفرادها عن 50 شخصًا. المدراء التنفيذيون لشركات التوريد الناجحة. إن كل مثال أعلاه يمثل وصفًا جيدًا للزبون المثالي الذي يسهل العثور عليه باستعمال أدوات جذب الزبائن، ويسهل وصفه لأعضاء الفريق الآخرين ليتدربوا عليه، ويسهل أيضًا إدخال وصفه إلى أنظمة الحاسوب وبرمجتها للعثور على هذا الزبون المحتمل. وبالتالي يجب على الشركات الناشئة أن تحدد بدقة مواصفات الزبون المثالي، إذ أن وجود وصف دقيق ومحدد يُعد أمرًا أساسيًا لتحقيق النمو. 5. تقديم النصيحة والمشورة للزبائن مارك روبيرج Mark Roberge محاضر بكلية هارفارد للأعمال، والمدير السابق للإيرادات في شركة Hubspot يتساءل كثير من الناس "ما الذي تغير في عالم المبيعات؟" قبل عشرين عامًا، كان يتوجب عليك الحديث لمندوبي المبيعات فقط عند الحاجة لشراء منتج ما، فهم يمتلكون المعلومات التي تحتاج إليها. وقد كان مندوبو المبيعات المتمرسون يمنحونك هذه المعلومات مقابل معلومات أخرى يحصلون عليها منك، مثل: كم ميزانيتك؟ وما هي احتياجاتك؟ ولكنك اليوم تستطيع أن تعثر على أفضل خمسة موردين في مجال معين، وأنت جالس في منزلك وعلى فراشك. إنك تستطيع أن تعرف ماذا يقدمون، وأوجه الاختلاف بينهم، وتكلفة الخدمات التي يقدمونها. كما تستطيع أيضًا أن تجرب العديد من المنتجات مجانًا. وبالتالي فقد أصبحت الحاجة إلى إدارة المبيعات في موضع شك، أليس كذلك؟ إن ذلك يُوجب على العاملين في مجال المبيعات أن يبذلوا المزيد من الجهد لتقديم خدمات ذات قيمة إضافية، لذلك: كن بمثابة المستشار والناصح لزبائنك. افعل ما بوسعك لتحسين التفاعل مع الناس. افهم الأهداف التي تسعى الشركة إلى تحقيقها والتحديات التي تسعى إلى التغلب عليها، واحرص على أن تكون استراتيجية التسويق العامة متوافقة مع طبيعة عمل الشركة. اروِ القصة من منظور زبائنك. لا تنسى أن تحافظ على التواصل مع الزبائن حتى بعد انتهاء العمل. هذه هي المهارات التي يستعملها أفضل مندوبو المبيعات لتطبيق استراتيجية المبيعات على نحو فعّال. 6. التأني قبل الصعود في السوق جويل يورك، مدير التسويق في شركة Accellion مع تطور شركة الخدمات البرمجية الناشئة من شركة صغيرة إلى شركة ناضجة، تظهر لديها طموحات بالنمو، ورغبة في توسيع استراتيجية التسويق للوصول إلى زبائن جدد، وزيادة تأثير المنتج لدى الزبائن الحاليين. ويُعد دخول السوق وفق نموذج المبيعات الذاتية المسار الطبيعي للتطور والنمو، إذ يتيح هذا النموذج لشركة خدمات برمجية ناشئة نجحت في بناء قاعدة زبائن كبيرة لمنتجات في غاية البساطة أن تدخل ميزات إضافية، وأن تقدم عروض سعر جديدة، وأن تضيف عددًا من مندوبي المبيعات إلى الطاقم، وذلك حتى تبدأ سعيها نحو زيادة متوسط سعر المبيعات الشهرية من 10$ إلى 100$ أو 1000$ أو 10,000$ أو حتى أكثر. مع ذلك، قد لا تكون هذه الأساليب البسيطة والمباشرة متلائمة مع الاستراتيجية العامة، والتحولات التشغيلية والثقافية اللازمة للوصول إلى النجاح. إذ أن نموذج المبيعات الذاتية، ورغم بساطته، ينطوي على سوق ضخم، ويتسم بانخفاض التكلفة وبالقدرة على المنافسة. في المقابل، يتمتع نموذج المبيعات المركبة لدى الشركات الكبرى بوجود منتج مميز يعتمد بالعادة على ابتكار متطور. إن الحفاظ على بساطة نموذج المبيعات الذاتية في شركات الخدمات البرمجية الناشئة سوف يؤدي إلى خلق منتجات وطرق بيع أكثر تعقيدًا، رغم أنها قريبة من المنتج الأصلي الذي يتسم بالبساطة. ويجدر التأكيد هنا أن هذه المنتجات والآليات سوف تتطلب تخطيطًا دقيقًا وتنفيذًا متأنيًا. هل يجب أن تُعرض المنتجات في عروض منفصلة، أم في أجزاء مختلفة من عرض واحد؟ هل يجب زيادة المبيعات السريعة من خلال التركيز على زبائن المبيعات الذاتية، أم أن الواجب هو إيجاد طرق جديدة للوصول إلى الزبائن؟ يُقال عادةً أن الصعود في السوق أسهل من النزول، وقد يكون ذلك صحيحًا، ولكن ليس من السهل الصعود دون التخلي عن زبائنك في الأسفل. 7. تجريب استراتيجية المبيعات قبل اعتمادها إليزابيث كين Elizabath Cain شريكة في Venture OpenView Partners يشعر مدير المبيعات، أو مؤسس الشركة، أو حتى مديرها التنفيذي أحيانًا بالحماسة تجاه بعض الأفكار الجديدة، ويرغب أن تسعى الشركة بأكملها وراء تنفيذ فكرته. ولكن التحرك السريع في اتجاهات مختلفة لن يخلق سوى حالة من الارتباك ويعيق تقدم الشركة. وعليه يجب ترسيخ ثقافة التجربة لدى الإدارة العليا نزولاً إلى الشركة بأكملها. إن إجراء الاختبارات والفشل والعودة مجددًا يتطلب قدرًا من الشجاعة، لذلك يجب على الإدارة أن تتيح المجال أمام التجربة، وأن تشجع الإبداع بدون عواقب. إذًا كيف تجري تجربة منضبطة؟ ابدأ بطرح الفرضية "ماذا تريد أن تختبر بالضبط؟" ثم حدد العوامل المختلفة، وصمم آلية التجربة، وحدد الإطار الزمني. كن واضحًا فيما يتعلق بالأهداف، ومعايير القياس ومؤشرات الأداء التي سوف تستعملها لتقرر نجاح التجربة من عدمه. بعد الانتهاء، قيّم التجربة على نحو صارم. وفي حال نجاح التجربة، فالخطوة التالية هي معرفة كيفية الاستفادة منها إلى أقصى درجة ممكنة. 8. الاستعانة بالشركاء لتسريع النمو، لا إيجاده من العدم ستيلي إيفتي Steli Efti المدير التنفيذي لشركة Close أولاً وقبل كل شيء: إذا كنت تسعى للحصول على أول 10 زبائن أو 100 زبون، فإن الموزعين واتفاقيات الشراكة في مجال المبيعات ليسوا قنوات ملائمة لك. إذا وجدت للتو منتجًا قابلًا للنمو وتحاول بيعه حتى تتعلم من الزبائن الحقيقيين، فإن هذه القنوات ليست ملائمة لك. إذا لم تكن تملك مستوىً ثابتًا ومستقرًا من الزبائن والدخل الشهري، فإن هذه القنوات ليست ملائمة لك. والسبب في ذلك: أن الموزعين واتفاقيات الشراكة هي استراتيجيات لتسريع نمو موجود بالفعل، لا لإيجاد نمو من العدم. أن هذه الاستراتيجيات جيدة فقط في حال وجود منتج فعّال، إذ أن الحافز لدى الموزعين والشركاء هو إرضاء العملاء وجني الأرباح، وإذا لم يكن منتجك يحقق لهم ذلك، فإنهم لن يستثمروا أي جهد لتسويقه. مع ذلك، إذا كان عمر شركتك يتراوح بين ستة أشهر إلى عام واحد، وكنت تمتلك منتجًا يحظى بشعبية واسعة ونمو متزايد، وإذا جربت التسويق بالمحتوى، والإعلانات المدفوعة، والتسويق الضمني، والتسويق المكثف، ونجحت في جلب دخل بمئات الآلاف أو ملايين الدولارات، فتلك إذًا قصة أخرى. والخلاصة لا تستعن بهذه القنوات إلا في الوقت المناسب عندما تكون مستعدًا لهذا النوع من التوسع. اجذب عملاء مستهدفين وحقق أهدافك التسويقية استعن بأفضل خدمات وحلول التسويق الرقمي من خمسات وحقق مبيعات استثنائية اطلب خدمتك الآن ترجمة -وبتصرف- للمقال 8 steps to create your winning sales strategy, according to industry leaders Rate لصاحبه Courtney Chuang1 نقطة
-
يمكن القيام بهذا الأمر من خلال عمل خادم server وتخزين البيانات عليه، بحيث يتم إرسال البيانات من الهاتف إلى الخادم لتخزينها عليه، ومن ثم يتم تحميل البيانات إلى تطبيق سطح المكتب تتم هذه العملية من خلال واجهة برمجية API بحيث يكون هناك واجهة خلفية Backend على الخادم وتقوم بإستقبال هذه البيانات وخفظها في قاعدة بيانات، ويمكن الوصول إلى هذه البيانات من خلال أي برنامج بغض النظر عن المنصة التي يعمل عليها (أندرويد - iOS - ويندوز .. إلخ). هنا مقالة تشرح مفهوم API بالتفصيل: هنا كذلك بعض الإجابات التي قد تساعد في فهس أكثر لمفهوم API:1 نقطة
-
1 نقطة
-
السلام عليكم هل يمكنني تحميل فيديوهات الشرح لاني لا اتمكن من الولوج الى الانترنيت في كل وقت مما يعيق العملية التعلمية انا اعلم ان الحقوق محفوظه انا لا اود النشر فقط تحميل الدروس على حاسوبي الشخصي جربت عدة برامج تحميل لا تعمل1 نقطة
-
شكرا على مجهودك و محاولتك مساعدتي و انا حاولت ان اقوم بجعل الموقع يتجاوب مع الشاشات الاخرى و قمت بالعمل على الاكواد التي ارسلتها و لكن لم اعرف ما الذي اعمله ارجو ان تقومو بارسال الكود و شكرا لكم1 نقطة
-
يمكنك أن تستخدم الدالة preg_replace لتقوم بإستعمال regex في البحث عن المسافات الأضافية وإستبدالها بمسافة: $bio = preg_replace('/\s+/', ' ', $bio); وتستطيع كذلك إستخدام الدالة trim مع المثال السابق لإزالة أي مسافات في بداية أو نهاية النص: $bio = trim(preg_replace('/\s+/', ' ', $bio)); وستحصل على النتيجة المطلوبة في النهاية: echo $bio; // "string multiline string with empty lines and extra spaces"1 نقطة
-
يمكنك فعل ذلك في ملف views.py من خلال الكود التالي thumbnail.objects.none() ثم التحكم في ذلك الأمر من خلال ملف الـ HTML عبر الكود التالي مع تعويض القيم المطلوبة <ul> {% for athlete in athlete_list %} <li>{{ athlete.name }}</li> {% empty %} <li>Sorry, no athletes in this list.</li> {% endfor %} </ul>1 نقطة
-
يمكنك الاستعانة بالوظيفة str_replace لاستبدال اي كسر للسطر line break بفراغ أو لا شيء، يعبر عنها بـ \r أو \n : <?php $bio = "string multiline string with empty lines and extra spaces"; $bio = str_replace(["\r", "\n"],'',$bio); echo $bio; الخرج: stringmultiline stringwith empty lines and extra spaces توثيق الدالة str_replace() في PHP1 نقطة
-
يمكنك التحقق من أن الحقل thumbnail ليس فارغاً باستخدام الخاصية name الموجودة في الصنف FileField على الشكل التالي: >>> note.thumbnail <FieldFile: None> >>> note.thumbnail.name is not None False لاحظ أننا استخدمنا الخاصة name وتحققننا من أنها ليست فارغة والنتيجة كانت خطأ ﻷن الحقل thumbnail فارغ. الخاصية name: تحتوي على اسم الملف الذي يقوم المستخدم برفعه. فإذا لم يكن بها قيمة فهذا يعني ان الحقل فارغ.1 نقطة
-
لديك عدة أخطاء كتابة الوسوم ، فهي متداخلة في بعضها و أيضاً عدم كتابة وسم الإغلاق لعدّة وسوم ، لذلك حاولت على ترتيبه بشكل أفضل <body> <h1>subscription</h1> <form> <table> <tr> <td> <label for="username">user name:</label> </td> <td> <input type="text" id="username" name="username"><br> </td> <td> <label for="pwd">password:</label> </td> <td> <input type="password" id="pwd" name="pwd"><br> </td> <td> <input type="submit" vlue="log in"> </td> </tr> </table> </form> <table> <tr> <td> <label for="username">user name:</label> </td> <td> <input type="text" id="username" name="username"><br> </td> <td> <label for="pwd">password:</label> </td> <td> <input type="password" id="pwd" name="pwd"><br> </td> <td> <input type="submit" vlue="log in"> </td> </tr> </table> <div> <label for="businees"> businees</label> <input type="radio" id="businees" name="plan" vlaue="businees"> <label for="starter">starter</label> <input type="radio" id="starter" name="plan" vlaue="starter"> <label for="premium">premium</label> <input type="radio" id="premium" name="plan" vlue="premium"> </div> <table> <tr> <td> <label for="agree">password</lable> </td> <td> <label for="agree">i agree to the terms and conditions</lable> <input type="checkbox" id="igree" name="agree"> </td> <td> <input type="submit" value="register"> </td> <td> <input type="reset" value="clear"> </td> </tr> </table> </body> أرجو منك الانتباه جيداً خلال كتابة الوسوم ومعرفة بداية ونهاية الوسم حتى لالا تداخل الوسوم في بعضها وتظهر لديك الأخطاء1 نقطة
-
تتطور نماذج تصميم الويب المتجاوب بصورةٍ متسارعة، ولكن يعمل عددٌ قليلٌ منها فقط جيدًا على الحواسيب المكتبية وعلى الأجهزة المحمولة معًا. يُمكن تصنيف معظم التخطيطات المُستخدمة في صفحات الويب المتجاوب إلى خمس فئات: المُنساب عمومًا mostly fluid؛ وإفلات العمود column drop؛ والتخطيط المُزاح layout shifter؛ والتعديلات الطفيفة tiny tweaks؛ وخارج اللوحة off canvas. مع الإشارة إلى أنه يُمكن للصفحة استخدام أكثر من نموذج معًا، مثل استخدام "إفلات العمود" مع "خارج اللوحة". تُشكّل هذه الفئات، والتي عرّفها أولًا لوك روبلسكي Luke Wroblewski)، نقطة انطلاقٍ أساسية لأي صفحةٍ متجاوبة. كُتبت جميع الأمثلة التالية بلغةٍ ترميزية باستخدام الصندوق المرن flexbox بهدف التبسيط وسهولة الفهم، وذلك مع حاويةٍ رئيسة div تضم ثلاث أو خمس حاويات div ثانوية، وبدءًا من العرض الأصغر، ومن ثم أُضيفت نقاطٌ حدّية عند الضرورة. تدعم المتصفحات الحديثة نمط تخطيط الصندوق المرن إلا أنه ما زال يتطلب بعض التعديلات من قبل المصنعين وصولًا للدعم الأمثل له. النموذج المنساب عموما Mostly Fluid يتكون النموذج المُنساب عمومًا من شبكةٍ انسيابية بصورةٍ أساسية؛ حيث تُحافظ هذه الشبكة على حجمها على الشاشات المتوسطة والكبيرة مع ضبط الهوامش على الشاشات الأوسع؛ بينما تتسبب بإعادة تدفق المحتوى الرئيسي مع تكديس الأعمدة عموديًا على الشاشات الصغيرة. من الميزات الأساسية لهذا النموذج عدم الحاجة إلا لنقطةٍ حدّيةٍ واحدة بين الشاشات الصغيرة والشاشات الكبيرة كما يُبين المثال التالي: تُكدَّس كل حاوية div عموديًا في العرض الأصغر؛ وعندما يتجاوز عرض الشاشة 600px، تُحافظ الحاوية div الأولى على العرض width: 100%؛ بينما تظهر الحاويات الأربع div الثانوية مثل عمودين أسفل الحاوية الأولى. عندما يتجاوز عرض الشاشة 800px، يُصبح عرض الحاوية الأساسية div ثابتًا مع توسيطها على الشاشة. من المواقع التي تستخدم هذا النموذج: A List Apart. Media Queries. SimpleBits. .container { display: -webkit-flex; display: flex; -webkit-flex-flow: row wrap; flex-flow: row wrap; } .c1, .c2, .c3, .c4, .c5 { width: 100%; } @media (min-width: 600px) { .c2, .c3, .c4, .c5 { width: 50%; } } @media (min-width: 800px) { .c1 { width: 60%; } .c2 { width: 40%; } /*لا يعمل استخدام 33.33 دومًا بسبب التقريب*/ .c3, .c4 { width: 33%; } .c5 { width: 34%; } } @media (min-width: 800px) { .container { width: 800px; margin-left: auto; margin-right: auto; } } نموذج إفلات العمود Column drop يكدِّس هذا النموذج الأعمدة عموديًا، عندما يُصبح عرض النافذة ضيقًا في التخطيطات متعدّدة الأعمدة والمُمتدة عرضًا على كامل الشاشة. ويُمكن أن يؤدي هذا إلى تكديس جميع الأعمدة عموديًا؛ لذلك يعتمد اختيار النقاط الحدّية لهذا النموذج على المحتوى وعلى تفاصيل التصميم. يُبين المثال التالي استخدام هذا النموذج: وكما الحال في النموذج المُنساب عمومًا، يُكدّس المحتوى في العرض الأصغر؛ إلا أنه عندما يتجاوز عرض الشاشة 600px، تأخذ الحاوية الأولى والثانية العرض الكامل للشاشة؛ أما عند تجاوز 800px، تأخذ جميع الحاويات الثلاث كامل عرض الشاشة. تُحدّد خاصية الترتيب order في أنماط CSS ترتيب الحاويات. من المواقع التي تستخدم هذا النموذج: Modernizr. .container { display: -webkit-flex; display: flex; -webkit-flex-flow: row wrap; flex-flow: row wrap; } .c1, .c2, .c3 { width: 100%; } @media (min-width: 600px) { .c1 { width: 60%; -webkit-order: 2; order: 2; } .c2 { width: 40%; -webkit-order: 1; order: 1; } .c3 { width: 100%; -webkit-order: 3; order: 3; } } @media (min-width: 800px) { .c2 { width: 20%; } .c3 { width: 20%; } } نموذج التخطيط المزاح Layout shifter يُعدّ هذا النموذج أكثر النماذج استجابةً مع عدّة نقاطٍ حدّية تُحدّد حسب عرض الشاشة؛ حيث يكمن الفرق الجوهري في هذا النموذج بطريقة تحريك المحتوى عوضًا عن إعادة تدفق المحتوى وإفلات الأعمدة أسفل بعضها بعضًا. يتطلب هذا النموذج تحديد مجموعةٍ من النقاط الحدّية، مما يُصعّب عمليات التعديل اللاحقة؛ إذ قد تتطلب كل نقطةٍ حدّية إجراء تغييرات على العناصر وليس على تخطيط المحتوى العام فقط. يُبيّن المثال التالي استخدام هذا النموذج: حيث يُكدَّس المحتوى عموديًا في الشاشات الأصغر، إلا أنه يتغير جذريًا على الشاشات الأكبر؛ إذ تُوضع حاوية div على اليسار وتُكدَّس حاويتان على يمينها. من المواقع التي تستخدم هذا النموذج: Andersson-Wise Architects. .container { display: -webkit-flex; display: flex; -webkit-flex-flow: row wrap; flex-flow: row wrap; } .c1, .c2, .c3, .c4 { width: 100%; } @media (min-width: 600px) { .c1 { width: 25%; } .c4 { width: 75%; } } @media (min-width: 800px) { .container { width: 800px; margin-left: auto; margin-right: auto; } } نموذج التعديلات الطفيفة Tiny tweaks يُجري هذا النموذج بعض التعديلات الطفيفة على التخطيط، مثل تعديل حجم الخط، أو تغيير حجوم الصور، أو تحريك المحتوى بطرقٍ بسيطةٍ جدًا. يُناسب هذا النموذج تخطيطات العمود الواحد، مثل مواقع الصفحة الخطية الواحدة والمقالات ذات النص الكبير. يُبين المثال التالي استخدام هذا النموذج: عمليًا، وكما يوحي اسم هذا النموذج، لا يتغير الكثير مع تغير حجم الشاشة؛ فكلما زاد عرض الشاشة، كبُر حجم الخط وزادت مساحة الحشوة padding. من المواقع التي تستخدم هذا النموذج: Ginger Whale. Future Friendly. .c1 { padding: 10px; width: 100%; } @media (min-width: 500px) { .c1 { padding: 20px; font-size: 1.5em; } } @media (min-width: 800px) { .c1 { padding: 40px; font-size: 2em; } } نموذج خارج اللوحة Off canvas عوضًا عن تكديس المحتوى عموديًا، يضع هذا النموذج المحتوى الأقل استخدامًا، مثل قوائم التنقل أو قوائم التطبيق خارج الشاشة، ويظهر هذا المحتوى عندما يصبح حجم الشاشة كبيرًا بدرجةٍ كافية فقط. أما على الشاشات الأصغر، فيجب النقر لإظهار هذا المحتوى المخفي. يُبين المثال التالي استخدام هذا النموذج: عوضًا عن تكديس المحتوى عموديًا، يَستخدم هذا المثال سمة التحويل لإخفاء حاويتين بوضعهما خارج الشاشة: 'transform: translate(-250px, 0)' تُستخدم JavaScript لإظهار الحاويات عن طريق إضافة الصف class المُسمى open إلى العنصر لجعله مرئيًا. ومع اتساع عرض الشاشة، تُزال مواضع العناصر خارج الشاشة فتعود هذه العناصر لتظهر ضمن إطار العرض المرئي. بما أن Safari for iOS 6 و Android Browser لا يدعمان flex-flow: row nowrap من flexbox، استُخدم التوضُّع المُطلق في هذا المثال. من المواقع التي تستخدم هذا النموذج: HTML5Rocks Articles. Google Nexus. Facebook's Mobile Site. body { overflow-x: hidden; } .container { display: block; } .c1, .c3 { position: absolute; width: 250px; height: 100%; /* حيلة لتحسين الأداء على المتصفح كروم See: http://aerotwist.com/blog/on-translate3d-and-layer-creation-hacks/ #perfmatters */ -webkit-backface-visibility: hidden; backface-visibility: hidden; -webkit-transition: -webkit-transform 0.4s ease-out; transition: transform 0.4s ease-out; z-index: 1; } .c1 { /* حيلة لتحسين الأداء على المتصفحات القديمة من كروم Using translate3d as a trick to improve performance on older versions of Chrome See: http://aerotwist.com/blog/on-translate3d-and-layer-creation-hacks/ #perfmatters */ -webkit-transform: translate(-250px,0); transform: translate(-250px,0); } .c2 { width: 100%; position: absolute; } .c3 { left: 100%; } .c1.open { -webkit-transform: translate(0,0); transform: translate(0,0); } .c3.open { -webkit-transform: translate(-250px,0); transform: translate(-250px,0); } @media (min-width: 500px) { /* استخدام الصندوق المرن إذا كان عرض الشاشة أكبر من 500 بكسل */ .container { display: -webkit-flex; display: flex; -webkit-flex-flow: row nowrap; flex-flow: row nowrap; } .c1 { position: relative; -webkit-transition: none 0s ease-out; transition: none 0s ease-out; -webkit-transform: translate(0,0); transform: translate(0,0); } .c2 { position: static; } } @media (min-width: 800px) { body { overflow-x: auto; } .c3 { position: relative; left: auto; -webkit-transition: none 0s ease-out; transition: none 0s ease-out; -webkit-transform: translate(0,0); transform: translate(0,0); } } ترجمة -وبتصرف- للمقالة Responsive Web Design Patterns للمؤلف: Pete LePage. اقرأ أيضًا أساسيات تصميم الويب المتجاوب ما هو الفرق بين التصميم المتجاوب (Responsive Web Design) والتصميم المتلائم (Adaptive Web Design) الدليل الشامل لشرح النقاط الحدية لصفحات الويب المتجاوبة1 نقطة
-
وضع الشيفرة كاملة في أقل عدد من الملفات أفضل من ناحية الأداء (نسبيًا) للموقع، حيث لن يحتاج الموقع عند الوصول إليه سوى لطلب ملف واحد فقط من المصدر، بينما إذا تطلب الأمر إرسال العديد من الطلبات سيؤثر ذلك على سرعة وأداء الموقع الأولية من ناحية الأداء نعم، يفضل تقليل عدد الملفات التي ستطلب من قبل الموقع ووضع الشيفرة كاملة في ملف واحد على الناحية الأخرى الملفات الطويلة تؤثر على المطور وتعيق عملية التطوير ومن الأسهل وجود العديد من الملفات الصغيرة كل منها وحدة منفصلة صغيرة وواضحة، لكن في بعض الحالات الاستثنائية تكون مضطرًا لوجود ملف ما طويل لا نتكلم عن ذلك هنا، من ناحية سهولة التطوير لا، فيجب تقسيم الشيفرة لقطع صغيرة بسيطة الفهم (قد تكون بعدة ملفات منفصلة أو ملف واحد لكن بوحدات كتوابع منفصلة صغيرة سهلة الفهم). ما الحل إذًا؟ الحل النهائي للمحافظة على الأداء وسهولة التطوير بآن معًا هو استخدام المحزّمات Bundlers، حيث تقوم بكتابة الشيفرة وتركز على الوضوح وسهولة التطوير ما أمكن، ويقوم المحزم خلال مرحلة البناء بدمج الوحدات (الملفات) التي قمت بكتابتها معًا في ملف واحد لرفع سرعة أداء الموقع، هكذا نكون حافظنا على الأداء وسهولة التطوير يمكنك استخدام Webpack لتطبيق ذلك، يمكنك الاستفادة من قراءة المقالات التالية:1 نقطة
-
قد يكون سبب هذه المشكلة هو المتصفح نفسه وليس فلاسك Flask وللتأكد من هذا الأمر حاول أن تقوم بتجربة المشروع بإستخدام متصفح مختلف فإذا تم تحميل الملفات بشكل صحيح وتحتوي على آخر التحديثات، فيجب أن تقوم بحذف الملفات المؤقتة من متصفح الويب الخاص بك من خلال أحد هذه الطرق (تختلف حسب نظام التشغيل لديك): ويندوز: Ctrl+F5 ماك: Cmd+Shift+R أو Cmd+Opt+R لينكس: Ctrl+Shift+R أيضًا تستطيع تغير اسم ملف JavaScript وسيقوم المتصفح بإعادة تحميله مرة أخرى بأحدث التعديلات عليه. يمكنك أيضًا أن تضيف متغير إلى رابط الملف كمعامل URL بالشكل التالي: script.js?some_variable=file_timestamp حيث تقوم بتغير قيمة المعامل file_timestamp بإستخدام فلاسك Flask في القالب بأي رقم عشوائي Random وحينها سيقوم المتصفح بإعادة تحميل الملف كل مرة، على النحو التالي: def last_updated_timestamp(folder): return str(max(os.path.getmtime(os.path.join(root_path, f)) for root_path, dirs, files in os.walk(folder) for f in files)) @app.route('/') def index(): return render_template('index.html', timestamp=last_updated_timestamp('./static')) # في القالب <script type="text/javascript" src="/static/script.js?u={{ timestamp }}"></script> وستكون النتيحة بالشكل التالي: <script type="text/javascript" src="/static/script.js?u=1641149029.12"></script> حل آخر وهو إخبار المتصفح بألا يقوم بحفظ الملفات لأكثر من فترة معينة من خلال تحديد الخاصية cache_control.max_age بعدد ثواني معينة بالشكل التالي: @app.route('/api/v1/users/') def get_users(): data = {"name": "sameh"} response = jsonify(data) response.cache_control.max_age = 60 * 60 * 24 # يوم واحد بالثواني return response بهذا الشكل لن يقوم المتصفح بحفظ الملفات الثابتة (ملفات CSS/JS/JSON .. إلخ) لفترة أطول من يوم واحد.1 نقطة
-
لتشغيل دالة في الخلفية (في thread مختلفة) تحتاج إلى إستعمال المكتبة threading بالشكل التالي: import time import threading from flask import Flask app = Flask(__name__) @app.route('/start') def start_handler(): # هذه الدالة ستعمل في الخلفية للقيام ببعض المهام def handle_sub_work(): for i in range(20): print(i, time.time()) time.sleep(1) # تشغيل Thread جديد threading.Thread(target=handle_sub_work).start() return "started" app.run(debug=True) بهذا الشكل سوف تعمل الدالة handle_sub_work في خيط Thread جديد، ولن يحتاج العميل الإنتظار لكي تنتهي هذه الدالة من العمل حتى يحصل على الطلب. ملاحظة: الدالة handle_sub_work تعمل في Thread جديد لذلك ليس لديها أي وصول إلى الكائن request الحالي، ولكن يمكن حل هذه المشكلة من خلال copy_current_request_context بالشكل التالي: @app.route('/start') def start_handler(): @copy_current_request_context def handle_sub_work(): for i in range(20): print(i, time.time()) print(request.url) # لتتأكد من إمكانية الوصول إلى الكائن request الحالي time.sleep(1) threading.Thread(target=handle_sub_work).start() return "started"1 نقطة
-
ام يعتبر ذلك غير احترافي؟ مثلا سأحتاج الى لوجو وSEO وإدارة حسابات شكبات اجتماعية. هل يجب أن اقوم بذلك بنفسي أم أوظف شخصا بدوام كامل أو جزئي أو أستعين بشخص على خمسات مثلا؟ ولو اعتمدت على شخص من خمسات فكيف سأدفع له؟ يعني مرة واحدة فقط؟ أم أقوم بشراء خدمات متكررة أم أدفع له مباشرة على حسابه؟1 نقطة