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

محمد طاهر5

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

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

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

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

    24

آخر يوم ربح فيه محمد طاهر5 هو نوفمبر 7 2019

محمد طاهر5 حاصل على أكثر محتوى إعجابًا!

المعلومات الشخصية

  • النبذة الشخصية
    مبرمج ومترجم تقني. مهتم بالمصادر المفتوحة. حاصل على شهادة الماجستير في الكيمياء الفيزيائية.
  • الموقع

آخر الزوار

9814 زيارة للملف الشخصي

إنجازات محمد طاهر5

عضو نشيط

عضو نشيط (3/3)

160

السمعة بالموقع

1

إجابات الأسئلة

  1. وفقًا لتوثيق Laravel يجب عليك أن تضيف هذه الأسطر إلى resources/js/app.js، على فرض أنك تستخدم هذه المجلدات: import.meta.glob([ '../images/**', '../fonts/**', ]); الآن سيعالج Vite هذه الأصول الموجودة في هذه المجلدات عند تنفيذ الأمر npm run build، وستكون قادراً على استخدام Vite::asset للإشارة إلى الملفات الموجودة في هذه المجلدات داخل ملفات Blade. راجع الفقرة الخاصة بهذا الموضوع في التوثيق: https://laravel.com/docs/9.x/vite#working-with-blade-and-routes
  2. إنّ الهدف الرئيسي من عملية التسويق هي الحصول على المزيد من العملاء لمشروعك التجاري، ولكن من السهل أن ينسى المرء في خضمّ ذلك عملاءه الحاليين وأنّهم مهمّون أيضًا، وقد يكونون الأكثر أهمّية. أظهرت الدراسات أن احتمالية تحوّل العملاء الحاليين إلى المنتجات والخدمات الجديدة أكبر بمرتين من احتمالية تحوّل العملاء الجدد، وقد وجدت BI Intelligence أن نسبة تحوّل العملاء الجدد هي 2.4% مقارنة بـ 4.5% وهي نسبة تحوّل العملاء الحاليين. ولا يتعلّق الأمر بمعدلات التحويل فقط، فقد وُجد أنّ معدّلات اﻹضافة إلى سلّة المشتريات ترتفع بصورة ملحوظة وأنّ معدلات الارتداد bounce rate قد انخفضت كذلك بصورة ملحوظة بالنسبة للعملاء الحاليين، إذ يغادر 34.8% من العملاء الجدد دون إتمام عملية الشراء مقابل 24.4% من العملاء العائدين. صحيح أنّ هناك الكثير من العملاء الجدد الذين يمكن الحصول عليهم، ولكن ألا يستحقّ أولئك الذين أبدوا الاهتمام بمنتجك أو خدمتك أن يحصلوا على شيء من اهتمامك؟ أنت تمتلك أصلًا معلومات التواصل معهم بل وربّما معلومات أكثر تفصيلًا، مثل اﻷشياء التي قاموا بشرائها، والمدة التي استغرقوها في اتخاذ قرار الشراء، ومقدار المال الذي أنفقوه، وهل أثّرت قسائم التخفيضات على قرارهم في الشراء، و… الخ. هذا يعني أنّ معدّل تحويل العملاء الحاليين أفضل بكثير، إضافة إلى أنّك تمتلك جميع الأدوات اللازمة لتفتح أمامهم باب العودة إليك مرة أخرى بعد. يمكنك أن تقارن ذلك بما ستفعله للحصول على عملاء جدد والجهود التي ستبذلها للحصول على معلوماتهم اﻷساسية فقط. سأعرض عليك فيما يلي كيفية زيادة عمليات الارتقاء بالصفقة في متجرك الإلكتروني باستخدام التسويق بالبريد اﻹلكتروني. أضفِ على رسائلك الطابع الشخصي من الجيد أن ترسل إلى عملائك رسالة إلكترونية حول منتجاتك وخدماتك الجديدة (هذا الأسلوب يدعى بالبيع العابر Cross selling)، ولكن يمكن أن تقوم بما هو أكبر من ذلك، فبعد إتمام عملية البيع اﻷولى، تصبح لديك المعلومات الكافية حول عملائك لتقدّم إليهم المزيد من الاقتراحات المخصّصة والموجّهة إليهم. وتنطبق هذه النصيحة على بقية الأمور التي سنذكرها في هذه المقالة، إذ يجب عليك إضفاء الطابع الشخصي على أي استراتيجية ستعتمدها في التعامل مع العملاء، وينبغي عليك أن تُجري التعديلات المطلوبة في طريقة تواصلك مع عملائك (أو مع شريحة منهم على اﻷقل) وجعلها أكثر تخصيصًا. ويجعل هذا الأمر عملية تقسيم قوائم البريد اﻹلكتروني إلى شرائح مختلفة أمرًا في غاية الأهمية، ومع استحالة إضفاء الطابع الشخصي بالكامل في كل مرّة تتواصل فيها مع عملائك، فإن تقسيم قوائم البريد اﻹلكتروني ستساعدك في الوصول إلى مجموعات محدّدة في قاعدة عملائك. المصدر اعرض العناصر التي اشتراها العميل مؤخّرًا من أفضل اﻷمثلة على إضفاء الطابع الشخصي وتوطيد العلاقة التي تربطك بالعميل هو عرض المنتجات التي اشتراها العميل مؤخّرًا والحديث عنها. اسأل عملائك عمّا إذا كانوا راضين عن منتجاتك أو خدماتك، وإن كانوا كذلك فاطلب منهم أن يكتبوا آرائهم ومراجعاتهم، ولا تتردّد أبدًا في تذكيرهم بأنّ إنفاقهم لأموالهم وشرائهم لمنتجاتك يعني أنّهم قد وضعوا ثقتهم فيك وأنّ الأمر قد عاد بالفائدة عليهم، فلماذا لا يكرّرون هذا التجربة مرة أخرى؟ تعدّ عملية الشراء عملية عاطفية بالنسبة لأغلب الناس وعادة ما ترافق هذه العملية - سواء قبلها أو بعدها - الكثير من العوامل والمؤثّرات. ويمكن تحفيز هذه العوامل لدى العملاء عن طريق عرض المنتجات التي قاموا بشرائها مسبقًا، وبذلك يتذكّر العميل التجربة الإيجابية التي مرّ بها في السابق، وهنا تظهر أهمّية الدعم اللاحق لعملية الشراء والتسويق المخصّص. تقدّم Amazon مثالًا رائعًا في هذا الصدد، وهي تقوم بهذا الأمر في كل الأوقات، وأنا لا أقترح أن تبالغ في الأمر بشدّة (مع أنّ الأمر يأتي بفائدة كبيرة عليهم) ولكن يمكنك أن تبدأ بإرسال رسالة لاحقة بعد بضعة أيام من شراء العميل لأحد منتجاتك. بعد شراء جهاز Kindle Voyage، ترسل أمازون رسالة إلكترونية تعرض على العملاء حافظات خاصة بأجهزتهم الجديدة تساعد على حمايتها من الصدمات. احرص على إضافة بعض الصور الخاصة بالمنتج ليتمكن المتلقّي من ربط الرسالة بالموضوع. التوقيت المناسب من الصعب تقديم نصيحة محدّدة في هذا المجال لأنّ الأمر يعتمد كلّيًا على طبيعة مشروعك التجاري. يجب عليك أن ترسل رسالة البيع العابر أو الارتقاء بالصفقة عندما تشعر بأنّ العميل مستعدّ للشراء. والمقصود بالتوقيت المناسب هو الوقت المناسب من اليوم أو اليوم المناسب من الأسبوع، ولكن اﻷهمّ من ذلك أن تصل رسالتك عندما يكون العميل في مرحلة اتخاذ القرار. المصدر عليك أن تحرص أيضًا على أن لا تكون رسالتك مزعجة بالنسبة للمشتركين؛ لذا عليك الانتباه إلى موضوع التوقيت بصورة جيدة، والتخطيط لرحلة العميل من اللحظة التي تعرّف فيها على علامتك التجارية ﻷوّل مرّة وإلى حين إتمام عملية شراء منتجك أو خدمتك. يتوقّف أغلب المسوقين عند مرحلة الشراء على الرغم من أنّ ما يقارب 1 من كل 3 عملاء يشترون مرّة أخرى في السنة نفسها. تذكّر دائمًا مرحلة “الارتداد” التي تتبع نموذج قمع المبيعات التقليدي والتي قد تؤدّي إلى تنبيه العميل لاحتياجات جديدة. فعلى سبيل المثال، إن كنت تبيع الأجهزة اﻹلكترونية فيمكنك أن تقدّم إلى العملاء بعد شرائهم لأحد الأجهزة عروضًا لأهم الملحقات مثل حافظة للحاسب المحمول الجديد أو ملصق حماية الشاشة للهاتف الجديد. وإذا كنت مثلًا تبيع أحذية الركض فأنت تعرف أنّ عملائك يبدّلون أحذيتهم كل ستة أشهر تقريبًا؛ لذا سيؤدي إرسال الرسائل في هذه الفترات إلى زيادة ملحوظة في احتمالية شراء اﻷحذية من متجرك مرة أخرى. أما بالنسبة لأصحاب المتاجر اﻹلكترونية، فإنّ التوقيت المناسب يعتمد في العادة على تقديرات مستندة إلى دورة المبيعات وتدعمها بيانات الطلبات التي أجراها العملاء، ويمكنك أيضًا إيجاد طرق ذكية للاستفادة من البيع العابر بالاستناد إلى طريقة الاستخدام، كأن تقدم عرضًا في أسفل صندوق للمناديل أو ما شابه. إن كنت تستهدف عملائك بالاعتماد على طريقة الاستخدام، فقد أصبحت مطمئنًّا الآن إلى أنّك تستهدف العملاء في البقعة الحلوة Sweet Spot عندما يكونون بحاجة ماسّة إلى الحصول على المزيد من منتجاتك. كن طبيعيًا لا يرغب كثير من الناس في أن تباع لهم اﻷشياء، لذا حاول قدر الإمكان أن لا تبدو بمظهر البائع حين تتواصل معهم، وكلّما كنت طبيعيًا وعفويًا أكثر ازدادت فرص نجاحك. لا يحب الناس الشعور بأنّهم يتعرضون للخداع، وهذا هو السبب الذي يدفع الكثير منهم إلى عدم قراءة الرسائل اﻹلكترونية الترويجية أو النقر عليها. إن بدت رسالتك اﻹلكترونية كأي إعلان ترويجي آخر، فهناك احتمال كبير بأن يتجاهلها الناس؛ لذا احرص على أن تكون عروضك الترويجية ذات فائدة أكبر بالنسبة للعملاء لتقوية العلاقة التي تربطك بهم. إحدى الطرق الشائعة هي اقتراح ارتقاء في الصفقة من خلال رسالة في نظام خدمة العملاء تلي عملية الشراء مباشرة، مثل: الرسالة السابقة ودّية أكثر من هذه الرسالة: ثم اعرض بضاعتك لاحقًا في رسالة إلكترونية: وهكذا تكون قد قدّمت نصيحة إلى العميل بدلًا من محاولة بيعه سلعة ما، وكما ترى، فإن هذا اﻷسلوب أكثر لطافة وودّية، وأفضل مكان لاستخدام هذه العبارات هو إضافتها كملاحظة بسيطة في نهاية رسالة إلكترونية غير مخصّصة لبيع المنتجات. من الأساليب الرائجة أيضًا في هذا الصدد دمج المحتوى الخاص بالبيع العابر للمنتجات بمحتوى آخر، فمثلًا لو كنت ترسل إلى عملائك نشرة بريدية أسبوعية، يمكنك حينئذٍ الاستفادة من هذه الفرصة وإضافة بعض العروض إلى تلك النشرات البريدية. يمكنك أيضًا إنشاء نسخة خاصة من تلك النشرة اﻷسبوعية ترسلها إلى العملاء السابقين الذين اشتروا منتجات معيّنة. لنفرض أنّك تمتلك متجرًا للثياب الفاخرة على سبيل المثال، يمكنك أن ترسل بعض العروض الترويجية الخاصّة بمجموعة من الملحقات الفاخرة في حال اشترى العملاء إحدى الحقائب الجلدية، أما العملاء الذين اشتروا أحذية للأطفال فيتلقّون عروضًا ترويجية خاصّة بملابس اﻷطفال. لست مضطرًّا إلى تكرار اﻷمر برمّته، إذ يمكنك استخدام المحتوى ذاته لجميع القراء، ولكن انتقِ قسمًا واحدًا من ذلك المحتوى وغيّره بحسب الشريحة المستهدفة من العملاء. اطلب المساعدة قد تصبح الأمور متعبة إن كنت تقوم بها لوحدك؛ ولكن لماذا تتعب نفسك بهذه الطريقة عندما يكون بمقدورك طلب المساعدة من العملاء في تقديم المساعدة إليهم، وتأكد أن الكثير منّهم ستقبّل ذلك برحابة صدر. يمكن للتواصل مع العملاء لأجل الحصول على تغذيتهم الراجعة سيعود عليك بفائدتين هما: ستتمكن من تحسين الاقتراحات التي تعرضها عليهم عن طريق الاستفادة من المعلومات التي يقدّمونها إليك، وكلما كانت الاقتراحات أقرب إلى العملاء زادت معدّلات التحول وارتفعت المبيعات. ستعمل على توطيد علاقتك بالعملاء وذلك بمعرفة المزيد من المعلومات عنهم والاستفادة منها في عملك. إن كنت تقدّم للعملاء اقتراحات لمنتجات معيّنة بالاعتماد على تاريخ الشراء، فيجدر بك أن تتيح لهم فرصة الولوج إلى موقعك اﻹلكتروني والتصويت السلبي على بعض الاقتراحات التي يشعرون بأنّها غير ذات صلة برغباتهم واحتياجاتهم. وسيتاح لك بهذه الطريقة الحصول على مدخلات مباشرة وتحسين الاقتراحات التي تعرضها ليس فقط لهؤلاء العملاء بل لجميع العملاء الذي يمتلكون اهتمامات متشابهة. ليس المطلوب أن تكون الاقتراحات محدّدة أو تقنية للغاية. اطرح على القراء بعض اﻷسئلة المفتوحة مثل: “ما هو الأمور التي تفضّلها في الصيد؟” “باعتقادك ما هي الصيحات التي ستكون رائجة في الخريف القادم؟” “ما هو أكبر تحدٍّ تواجهه عندما تتعلم العزف على الغيتار؟” ستمنحك هذه اﻷسئلة بعض التصورات عن المشاكل التي يواجهها العملاء لتتمكّن من تقديم المنتج الأكثر ملائمة لهم. عادة ما تأتي هذه الأسئلة في مراحل مبكّرة من دورة الارتقاء بالصفقة أي قبل إرسال العروض الترويجية الحقيقية إلى القراء. روّج لمنتجاتك أعتقد أن هذه النقطة واضحة من عنوانها، ولكن عليك أن تحرص على تقديم بعض الاقتراحات أو العروض في مرحلة من ما من مراحل حملتك الترويجية. وأفضل طريقة للقيام بذلك في الغالب هي أن تربط العرض الجديد بإحدى المشتريات السابقة، وأن توضّح للعميل كيف أنّ العرض الجديد سيساعدك في تقديم قيمة إضافية إلى القيمة التي تلقّاها العميل عند شرائه للمنتج اﻷول. المصدر إليك بعض اﻷمثلة: هل حصلت على حاسوب محمول جديد؟ رائع! يمكنك إطالة عمر حاسوبك والحصول على المزيد من هذا الاستثمار مع لوحة التبريد هذه… هل أحببتِ حقيبة اليد التي اشتريتها الشهر الفائت؟ لدينا الأحذية التي تلائم تلك الحقيبة. تساعد هذه الطريقة في تسريع عملية اتخاذ القرار لدى العملاء، والمرور بالاحتياجات والوعي والاهتمامات والوصول إلى الرغبات مباشرة. أنت تعرف مسبقًا أنّ العملاء يحتاجون إلى اﻷشياء ويرغبون في الحصول عليها فهو السبب الذي دفعهم إلى شراء منتجك في المقام اﻷول. وها أنت الآن تخبرهم عن طريقة الحصول على المزيد من الأشياء التي سيحبّونها والتي ستساعدهم في حلّ مشاكلهم مهما كانت طبيعتها. ولكن ليس في وسعك القيام بالكثير. أنا لا أرغب في التقليل من شأن البيع العابر بصورة عامة، إذ أنّه لا يزال أسلوبًا فعّالًا للغاية عند استخدامه في البريد اﻹلكتروني، فإن اشترى العميل الكثير من الأحذية، ما عليك إلا أن ترسل إليه المزيد من العروض الخاصة بالأحذية، وسينجح الأمر. غاية ما في الأمر هو أن توصل للعميل وبأقصى سرعة ممكنة الفوائد التي سيجنيها من شراء المنتج الذي تروّج له، واستخدام صورة جيدة للمنتج، واستخدام دعوة قوية للإجراء. يمكنك الآن الارتقاء في صفقاتك إن لم تستخدم بعدُ أسلوب البيع العابر أو الارتقاء بالصفقة مع عملائك، فقد حان الوقت الآن للقيام بذلك (أفضل وقت لاتباع هذه اﻷساليب هو 5 دقائق بعد عملية البيع اﻷولى). وإن استخدمت هذه الأساليب مع عملائك فهذا أمر رائع. يمكنك الاستفادة من هذه النصائح لتضمن زيادة نسب التحويل. ترجمة - وبتصرّف - للمقال How to Increase E-commerce Upsells with E-mail Marketing لصاحبه Brian Barr. حقوق الصورة البارزة محفوظة لـ Freepik
  3. من منّا لا يعرف الرسائل المزعجة؟ على الرغم من أن البرامج والمرشحات المضادة للرسائل المزعجة تعمل على التقاط الكثير من هذه الرسائل؛ إلا أنّها لا زالت تشكّل ما يصل إلى 45% من الرسائل اﻹلكترونية بصورة عامّة وذلك حسب دراسة أجراها موقع SpamLaws.com. تأتي معظم الرسائل المزعجة من مصادر مشبوهة تحاول خداع المشتركين، ولكن في بعض اﻷحيان ترسل العلامات التجارية المشهورة عن طريق الخطأ رسائل لا تمرّ من خلال مرشّحات الرسائل المزعجة وينتهي بها المطاف في مجلد الرسائل المزعجة بدلًا من وصولها إلى صندوق البريد. وكمسوق، فمن المؤكّد أنّك ترغب في أن لا تصل رسائلك اﻹلكترونية إلى مجلد الرسائل المزعجة على اﻹطلاق، ولتضمن عدم حدوث ذلك أقدّم إليك فيما يلي ما يجب عليك معرفته حول الرسائل المزعجة. ما هي الرسائل المزعجة؟ يعرّف معظم الناس الرسائل المزعجة بأنّها رسائل تافهة وغير مفيدة، ومع أنّ هذا التعريف قد يبدو بسيطًا ولكنّه تعريف جيّد في الواقع. أما التعريف الأدقّ للرسائل المزعجة فهي الرسائل غير المرغوبة والتي لا تحتوي على مواضيع مهمّة بالنسبة إليك. عادة ما تُرسل الرسائل المزعجة بدفعات كبيرة على أمل أن يفتحها أحد ما، وفي بعض الأحيان ترسل شركة حقيقية هذا النوع من الرسائل أملًا في الحصول على بعض العمل، ولكن يُرسل بعض الأشخاص المشبوهين رسائل مزعجة بهدف اﻹيقاع بالناس وخداعهم، وبصرف النظر عن الهدف المبتغى من إرسال الرسالة فإن هذه الرسائل تُرسل دون إذن المستلم وتعدّ رسائل مزعجة. ومع هذا كله، فإنّ مجرمي الشابكة الذين يحاولون اﻹيقاع بالناس وخداعهم ليسوا هم المصدر الوحيد للرسائل المزعجة، فحتّى أكثر الشركات وثاقة قد ترسل في بعض اﻷحيان رسائل مزعجة دون أن تدرك ذلك. كيف تعمل المرشحات والبرامج المضادّة للرسائل المزعجة؟ تمسح المرشحات والبرامج المضادّة للرسائل المزعجة الرسائل اﻹلكترونية بحثًا عن رايات حمراء red flags، وتحدّد هذه الرايات بالاعتماد على بعض السمات العامّة التي تمتاز بها الرسائل المزعجة. تمسح المرشحات الرسائل اﻹلكترونية منذ إرسالها إلى حين وصولها لصندوق بريدك اﻹلكتروني وتحدّد المكان الذي ستستقرّ فيه الرسالة، فإمّا في صندوق الرسائل الواردة، أو في مجلد الرسائل المزعجة. عندما ترسل إليك جهة ما رسالة إلكترونية، فإنّ مزوّد خدمة اﻹنترنت (ISP) ومزوّد خدمة البريد اﻹلكتروني مثل Gmail أو Yahoo! يرسلان الرسالة عبر مرشحّات بُنيت في اﻷنظمة الخاصة بهما. وتأخذ هذه اﻷنظمة الكثير من اﻷمور في نظر الاعتبار مثل محتوى رسائلك اﻹلكترونية، وعدد الرسائل التي ترسلها، وما يسمى بسمعة الإرسال Sending reputation. تنظر المرشحات في أجزاء معيّنة من الرسالة اﻹلكترونية، مثل العنوان ومحتوى الرسالة اﻹلكترونية وحتى بيانات الترويسة والتي تعدّ بمثابة جهاز تحديد المواقع GPS بالنسبة للرسائل اﻹلكترونية حيث يتعقبّ مصدر الرسالة ووجهتها ووقت وصولها إلى وجهات متعددة. تبحث المرشحات ضمن هذه البيانات عن أيّ شيء خارج عن المألوف، وتصنّف الرسالة اﻹلكترونية كرسالة مزعجة إذا ما وجدت أي شيء مريب فيها. باﻹضافة إلى ما سبق، فهناك قائمة بمرسلي الرسائل المزعجة تدعى [بالقائمة السوداء]، وإذا ما اكتشف المرشح أنّ الرسالة اﻹلكترونية مرسلة من أحد الأطراف المدرجة في هذه القائمة فإنّه يمنع الرسالة من الوصول إلى صندوق البريد الوارد. تتفحص المرشحات محتوى الرسائل أيضًا، وتبحث عن العلامات التي يمكن أن توحي بأنّها رسالة مزعجة، كالعناوين المشبوهة، أو اكتظاظ المحتوى بالصور، أو وجود روابط مختصرة … الخ. إن لم تكن مطّلعًا على هذه الرايات الحمراء فمن المحتمل أن تحصل رسائلك على وسم الرسائل المزعجة دون أن تعي ذلك. التطور المستمر لمرسلي الرسائل المزعجة وللمرشحات مرسلو الرسائل المزعجة أذكياء، فهم يعرفون آلية عمل المرشحات ويطوّرون على الدوام أساليبهم لتجاوز هذه المرشحات وإيصال رسائلهم المزعجة إلى صندوق البريد الوارد. ولحسن الحظ، فإنّ المرشحات تتطوّر بنفس الوتيرة وكذلك اﻷمر بالنسبة لصناديق البريد اﻹلكتروني والتي أصبحت تقدّم المزيد من اﻷدوات التي تساعد أصحابها في التحكّم فيما يشاهدونه. وقد سهّلت الشركات المزوّدة لخدمة البريد اﻹلكتروني على المشتركين وسم الرسالة اﻹلكترونية بوسم الرسالة المزعجة، فلنفترض مثلًا أنّك تلقّيت رسالة تروّج لدواء يعالج نزلات البرد، ولم يكن لديك أدنى فكرة عن مصدر هذه الرسالة، فيمكنك حينها وسم تلك الرسالة بوسم الرسائل المزعجة وإرسالها إلى المجلد الخاص بهذا النوع من الرسائل. تتفحّص المرشحات الخاصة بصناديق البريد اﻹلكترونية الرسائل التي يسمها المشتركون حول العالم بوسم الرسالة المزعجة، وعن طريق إيجاد أوجه التشابه بين هذه الرسائل واستخدام المعلومات التي تقدّمها يمكن لهذه المرشحات أن تزداد قوة في مواجهة الرسائل المزعجة. وبمعنى آخر، فإنّ المشتركين يساعدون مرشحات الرسائل المزعجة في التفريق بين الرسائل المزعجة والرسائل العادية، وبالتالي في زيادة قوّتها. إنّه لمن الجيد معرفة أن مرشحات الرسائل المزعجة في تطور دائم، فهذا اﻷمر يجعل من الإنترنت مكانًا آمنًا بالنسبة للمستخدمين، ولكن لزيادة مقدار اﻷمان قدر المستطاع قد تلتقط هذه المرشحات بعض الرسائل التابعة لعلامتك التجارية، ولكن يمكنك تعلّم الطريقة الصحيحة ﻹرسال الرسائل والتي ستبعدك عن هذه المرشحات وعن مجلد الرسائل المزعجة. كيف ترسل رسائل إلكترونية أفضل وكيف تتجنب مرشحات الرسائل المزعجة؟ عادة ما يعاقب المشتركون المرسلين بأن يسموا الرسائل غير المتوقّعة في صندوق بريدهم اﻹلكتروني بوسم الرسائل المزعجة، وبمجرد أن تحصل رسالتك على هذا الوسم فإنّ سمعتك تصبح أسوأ وأسوأ بالنسبة لمرشحات الرسائل اﻹلكترونية؛ لذا عليك الابتعاد عن هذا الطريق فعواقبه وخيمة. ومن المؤكد أنّ السؤال التالي يدور في بالك الآن: كيف تتجنّب مرشّحات الرسائل المزعجة؟ إليك الطريقة التي تضمن لك أنّ رسائل حملتك البريدية لن تكون رسائل مزعجة. أرسل الرسائل إلى المشتركين المسجّلين في قائمتك البريدية فقط إنّ من القواعد الأساسية في التسويق بالبريد الإلكتروني هي إرسال الرسائل اﻹلكترونية إلى اﻷشخاص المشتركين طوعًا في القائمة البريدية، وهذا يعني أنّه لا يجوز شراء قائمة بريدية وإرسال الرسائل اﻹلكترونية إلى أشخاص لا يعرفونك ولا يعرفون منتجك. كذلك يجب عليك أن لا تفترض أنّ مجرد تبادل بطاقات العمل مع أحد اﻷشخاص في معرض تجاري مثلًا يعني رغبته في استقبال رسائلك اﻹلكترونية. لتتأكد من رغبة المشتركين في تلقّي رسائلك عليك أن تعتمد عملية اشتراك ذات خطوتين، فعندما يشترك أحد اﻷشخاص طوعًا في قائمتك البريدية عليك أن ترسل رسالة تأكيد إلى حسابه تطلب منه الموافقة على استقبال رسائلك اﻹلكترونية. رحّب بالمشتركين الجدد في أسرع وقت بعد أن ينضمّ مشترك جديد إلى قائمتك البريدية عليك أنت ترحّب به في أسرع وقت ممكن، فإن تأخرت قد ينسى المشترك بأنّه قد سجّل في السابق في قائمتك البريدية وسيسم رسائلك بوسم الرسائل المزعجة. ولتجنب ذلك عليك إرسال رسالة ترحيبية إلى المشتركين الجدد خلال الـ 24 ساعة الأولى، ولكنك لست مضطرًا إلى مراقبة قائمتك البريدية وإرسال الرسائل الترحيبية يدويًّا، بل يمكنك أتمتة هذه العملية وذلك بإنشاء رسالة ترحيب يتلقّاها جميع المشتركين وتُرسل إلى المشتركين الجدد في قائمتك البريدية. يجب أن تتضمّن الرسالة عبارات الترحيب وأن تعرّف المستخدم بك وبعلامتك التجارية، كما في المثال التالي من شركة Flight Center وهي شركة متخصّصة في حجوزات السفر. أضفِ على رسائلك طابعًا شخصيًا تبحث مرشّحات الرسائل المزعجة عن أي دليل يشير إلى معرفتك بالشخص الذي تراسله، ويمكنك القيام بذلك عن طريق إضفاء الطابع الشخصي على الرسالة اﻹلكترونية. يمكنك استخدام حقول الدمج ‘merge fields’ لإضافة اسم المشترك اﻷول إلى عنوان الرسالة أو إضافة وظيفة المشترك إلى متن الرسالة أو استخدام بيانات أخرى تابعة للمشترك بغية إضفاء المزيد من الطابع الشخصي على الرسالة. يؤدي إضفاء الطابع الشخصي على الرسائل اﻹلكترونية إلى نيل رضا المرشحات عن الرسالة إضافة إلى أنّ هذا اﻷسلوب يساهم في زيادة معدﻻت فتح الرسالة، فقد أظهرت الأبحاث ازدياد نسبة فتح الرسائل اﻹلكترونية ذات العناوين التي تمتاز بطابع شخصي بنسبة 26%. أرسل الرسائل اﻹلكترونية من النطاق التابع لشركتك يرسل المسوقون الجادّون رسائل إلكترونية من عناوين بريد إلكتروني تابعة لشركاتهم، وليس من الحسابات المجانية التي توفّرها خدمات مثل Gmail و Hotmail وغيرها. تبحث مرشحات الرسائل المزعجة عن المصداقية في الرسائلة اﻹلكترونية والرسائل التي تنتهي بالمقطع @gmail.com أو @hotmail.com لا تتوافق مع هذه المتطلبات. إضافة إلى ما سبق، احرص على أن يكون اسم المرسل معروفًا وذا سمعة حسنة، فرسالة إلكترونية من عنوان مثلSnowflake@ABCCompany.com لن توحي بالكثير من الثقة للمشترك. إليك مثالًا رائعًا من CoSchedule حيث اسم المرسل هو: “Breonna from CoSchedule.” وعندما يمرر المستخدم مؤشر الفأرة فوق الاسم في Gmail، يظهر عنوان البريد اﻹلكتروني إضافة إلى الصورة الخاصة بالمرسل. تجنّب استخدام الكلمات المزعجة تبحث مرشحات الرسائل المزعجة عن الكلمات المزعجة “buzz words” التي يستخدمها مرسلو هذا النوع من الرسائل بكثرة، وفيما يلي قائمة بأكثر الكلمات المزعجة استخدامًا بحسب Mequoda. هناك بعض الكلمات الواضحة التي يفضل مرسلو الرسائل المزعجة استخدامها بكثرة مثل “احصل على المزيد من المال” أو “مجّاني 100%” ولكن هناك بعض الكلمات التي قد تستخدمها العلامات التجارية المعروفة مثل “هدية مجانية” أو “اطلب اﻵن”. يجب عليك تجنّب استخدام هذه الكلمات قدر الإمكان في الرسائل التي ترسلها إلى قائمتك البريدية، ولكن إن كنت تقدّم هدية مجّانية فلا بد حينئذٍ من استخدام كلمات مثل “هدية مجّانية”؛ لذا إن كنت بحاجة إلى استخدام مثل هذه الكلمات فحاول إدخالها في السياق الصحيح، فعلى سبيل المثال: “سامر، يمكنك الحصول على هدية مجانية عند شرائك بمقدار 20$ من متجر الزمردة الزرقاء” وهكذا سيبدو عرضك مقبولًا. تجنب استخدام الروابط المختصرة عادة ما يختصر مرسلو الرسائل المزعجة الروابط لإخفاء أي دليل يكشف عن هويّتهم؛ لذا فإنّ وجود هذه الروابط في الرسالة يعدّ بالنسبة لمرشحات الرسائل المزعجة راية حمراء. وكمسوق فإنّه من الضروريّ جدًّا أن تكون مدركًا لهذا اﻷمر، ولربّما تكون قد تعوّدت على استخدام أدوات اختصار الروابط مثل Bitly ولكن يجب عليك تجنّب هذا اﻷمر في رسائلك اﻹلكترونية. استخدم مزوّد خدمة البريد اﻹلكتروني يمتلك خاصية اختبار الرسائل المزعجة تقدّم الكثير من مزوّدات خدمة البريد الإلكتروني اختبارات للرسائل المزعجة، وتمنح هذه الاختبارات المسوقين القدرة على تفحّص رسائلهم بواسطة مرشّح الرسائل المزعجة قبل إرسالها إلى المشتركين. ويمكن لمستخدمي Campaign Monitor على سبيل المثال إجراء اختبار الرسائل المزعجة والحصول على نصائح لتجنب هذا النوع من الرسائل: تقدّم هذه الخاصية طبقة حماية إضافية تمنع الرسائل اﻹلكترونية من الوصول إلى مجلد الرسائل المزعجة. الخلاصة صحيح أن الرسائل المزعجة هي مشكلة شائعة، ولكن آلية الكشف عن هذه الرسائل وكيفية إرسالها إلى المجلدات المخفية هو أمرٌ لا يدركه الكثيرون. يمكنك الآن وبالاستعانة بالمعلومات السابقة إنشاء حملتك التسويقية القادمة وكلّك ثقة بأنّك قد اتخذت جميع الإجراءات الاحترازية لضمان عدم وصول رسائلك اﻹلكترونية إلى مجلد الرسائل المزعجة. ترجمة - وبتصرّف - للمقال What’s Considered Email Spam and How to Avoid It لصاحبته Andrea Robbins. حقوق الصورة البارزة محفوظة لـ Freepik
  4. تعدّ النشرات البريدية اﻹلكترونية إحدى الوسائل المثالية للتواصل مع العملاء، فالناس يتصفحّون رسائلهم الإلكترونية في وسائل النقل أو أثناء تناول وجبات الطعام أو عند مشاهدة التلفاز. وعلى الرغم من أن التسويق بالبريد الإلكتروني يقدم عائدًا على الاستثمار (ROI) يقدّر بـ 44$ لكل دولار يُنفق على هذا التسويق، فإن صندوق البريد الشخصي يعدّ بيئة تنافسية، فبحسب دراسة أجرتها Emfluence فإنّ معدّل النقرات على الرسائل الموجّهة للأفراد (B2C) يصل إلى 4% في حين أن معدّل فتح هذه الرسائل يصل إلى 22%. كيف تتمكّن إذًا من حثّ الناس على اتخاذ الإجراء المطلوب عند استقبالهم لنشرتك البريدية؟ الإجابة هي عن طريق التصميم. إن لم تكن رسائلك الإلكترونية مصممّة بصورة جيّدة، فقد تحصل على نتائج مخيّبة للآمال. سنتحدّث في هذا المقال عن الطرق التي يمكنك اتّباعها لتحسن تصميم نشراتك البريدية ولتزيد بالتالي معدل النقرات عليها وتحصل على نتائج أفضل. تقليل الخيارات يزيد من فرصة اتخاذ اﻹجراء هل سمعت من قبل بالدراسة التي أجرتها Sheena Lyengar والمعروفة بدراسة المربى Jam Study؟ طُلب في هذه الدراسة من مجموعة من المتبضعين الاختيار من 24 نكهة مختلفةً من المربى، في حين طُلب من مجموعة أخرى الاختيار من بين 6 نكهات فقط. وكانت النتيجة مذهلة بحق، إذ كانت نسبة من اشترى المربى في المجموعة التي عُرض عليها 6 نكهات فقط هي 30%، أما المجموعة التي عُرض عليها 24 نكهة فقد كانت نسبة من اشترى المربى فيها هي 3% فقط. تبيّن هذه الدراسة أنّ الإنسان قد لا يتمكن من الاختيار في حال واجهته العديد من الخيارات، وعلى الرغم من أنّ الأمر قد يبدو مخالفًا للبديهة، إلا أنّ تقديم الكثير من الخيارات قد يكون أمرًا مربكًا للغاية. من الواضح أنّه يمكن تطبيق هذا المبدأ على تصميم النشرات البريدية لزيادة عدد النقرات، وأفضل طريقة للقيام بذلك هي تقليل عدد الخيارات المتاحة للمشتركين قدر اﻹمكان. ويمكن لهذا الأسلوب أن يأتي بنتائج إيجابية في الأنواع الأخرى من الرسائل اﻹلكترونية، سواء أكانت حملة تسويقية أو نشرة بريدية أسبوعية. وقد بينت دراسة أجرتها Ascend2 أنّ الدعوة إلى اﻹجراء Call to action التي تمتاز بكونها معبّرة وغير عامّة هي الوسيلة الأكثر فعالية لزيادة عدد النقرات. وهكذا، فإن تقليل عدد الخيارات التي تقدّمها إلى المشتركين سيزيد من عدد النقرات لا محالة، فلم لا تقدّم لهم إذًا خيارًا واحدًا بدلًا من ثلاثة خيارات؟ كيف تحسّن تصميم نشرتك البريدية استخدم قالبًا مختلفًا يمكن للقالب الذي تستخدمه في تصميم نشرتك البريدية أن يساعد في زيادة عدد النقرات، ولكنّك سرعان ما تصبح عرضة للاعتماد على نفس القوالب، فما إن تحصل على عدد من قوالب الرسائل الإلكترونية الفعّالة حتى تقع في فخ إرسال نفس النوع من الرسائل الإلكترونية مرارًا وتكرارًا، وهذا هو أحد الأسباب التي تؤدي إلى الحصول على معدّل نقرات مخيّبٍ للآمال، فقد سَئِمَ المشتركون من مشاهدة الرسالة الإلكترونية ذاتها مرة بعد أخرى. هناك تنسيق شائع للنشرات البريدية تعتمده معظم العلامات التجارية وعادة ما يكون بهذا الترتيب: يكون الإعلان أو المقالة المميزة في رأس النشرة البريدية. سطر أو سطران من النصوص الترويجية. رابط لندوة عبر الإنترنت، أو دورة تعليمية، أو ميزات منتج جديد.. الخ. مقالتان إضافيتان. يعدّ التسويق بالبريد الإلكتروني أحد أكثر الوسائل فعّالية في زيادة التفاعل مع العملاء وفي رفع نسب التحويل، ولكن الكثير من الشركات لا تستخدم هذه الوسيلة على الوجه الصحيح. أرسل الكثير من الرسائل الإلكترونية والقليل من المحتوى أجرى فريق Kayako عددًا من التعديلات على تصميم نشرتنا البريدية وحصلوا على بعض النتائج المثيرة للاهتمام. تضمّنت التعديلات الانتقال من رسالة إلكترونية نصف شهرية تحتوي على نصوص عادية إضافة إلى ثلاثة روابط لمواضيع مختلفة في المدونة، إلى رسالة أسبوعية ذات تصميم جذّاب، وأضفنا في التصميم الجديد رابطًا للمقالة التي نعتقد بأنّها ستكون محطّ اهتمام المشتركين في ذلك الأسبوع. لاحظ التعديلات التي أجريت على تصميم الرسالة: النصوص أصبحت قليلة جدًّا، فخير الكلام ما قلّ ودلّ. زر الدعوة إلى الإجراء بارز ويجذب الانتباه. مجموعة ألوان جذابة. صورة خاصة في الترويسة. أزرار وسائل التواصل الاجتماعي. اختيار واحد فقط للنقر عليه. وكانت نتائج هذه التعديلات صادمةً بحقّ، فقد تضاعف معدل النقرات في ذلك الشهر، حيث قدّرنا الزيادة بنسبة 97.03%، وكان هذا نجاحًا باهرًا. أجرِ اختبارات A/B على تصميم نشرتك البريدية ولكن ما هو المحتوى الذي يجب عليك استخدامه في حملتك التسويقية؟ يمكنك إجراء اختبارات A/B على حملتك البريدية لمعرفة المحتوى الذي يأتي بأفضل النتائج بدلًا من إرسال الرسائل وانتظار النتائج. وفي حالتنا هذه، كنّا نعرف مسبقًا بأنّ المشتركين يستجيبون لحملتنا البريدية الأسبوعية بصورة أفضل من الحملة نصف الشهرية، لأنّ النشرة الأسبوعية تتضمّن خيارًا واحدًا فقط بالنسبة للمحتوى. كانت الخطوة القادمة بالنسبة لنا هي معرفة مدى أهمية الاختيار في تحديد نسب النقر على الرسائل الإلكترونية. وبالاعتماد على النجاح الكبير الذي حقّقناه مسبقًا عن طريق تغيير تصميم النشرة البريدية، أجرينا اختبارًا على تصميمين مختلفين هما: النسخة A: مقالة مميزة، وثلاثة روابط داعمة. النسخة B: مقالة مميزة فقط. لقد افترضنا أنّه للحصول على المزيد من النقرات لكل رسالة إلكترونية؛ يجب علينا أن نضيف ثلاثة روابط لمقالات إضافية في حال لم تنل المقالة المميزة التي اخترناها استحسان القارئ. هذه هي النسخة A من التصميم: توجد في النسخة B مقالة مميزة واحدة فقط ولا وجود لأي روابط أخرى: امتدّ الاختبار لثمانية أسابيع باستخدام بيانات Kayako، وكانت النتيجة أنّ النسخة A كانت أفضل بقليل من النسخة B، حيث حصلت على 13 نقرة إضافية. لم يكن المشتركون ينقرون على الروابط الإضافية، ولكن وجودها لم يشكل عائقًا في وجه القراء ولم يدفعهم إلى عدم النقر على أي شيء بتاتًا. لهذا فقد استنتجنا أن إتاحة عددٍ من الخيارات قد لا يكون أمرًا مثبّطًا بالضرورة ولكن يجب توخي الحذر في هذا الجانب، ومن الضروري جدًّا أن تكون الرسائل الإلكترونية معبّرة وأن تُرسل بصورة منتظمة. يجب أن يتيح البرنامج الذي تستخدمه للتسويق بالبريد الإلكتروني إجراء اختبارات A/B لحملتك التسويقية، وعادة ما تُجرى هذه الاختبارات بإرسال كلّ نسخة إلى شريحة مختلفة من المشتركين في القائمة البريدية. اجعل المحتوى في غاية التركيز والوضوح تميل الرسائل الإلكترونية الموجّهة للشركات (B2B) إلى اتباع التنسيق ذاته، وغالبًا ما تفشل في جذب انتباه القراء، في حين أنّه يجب على الرسائل الإلكترونية الموجّهة للأفراد أن تكون ذات جودة عالية جدًّا لتحصل على فرصة للوصول إلى صندوق بريد المشتركين، فالمنافسة على جذب انتباه الجمهور أشدّ ضراوة بكثير. إن إرسال الكثير من الرسائل الإلكترونية يعني أنّ هناك الكثير من الخيارات؛ لذا حاول أن تتجنب الوقوع في هذه المشكلة بجعل المحتوى الذي ترسله في رسائلك التسويقية في غاية التركيز والوضوح، فلا تربك قرّاءك مثلًا بتقديم جميع المقالات التي نشرتها في الشهر الفائت. أخبر المشتركين عن موضوع رسالتك الإلكترونية في عنوان الرسالة (لا تبالغ في ذلك) والتزم بذلك الموضوع في متن الرسالة. تذكّر أنّ معظم القرّاء سيطالعون رسالتك الإلكترونية باستخدام هواتفهم الذكية، وأن التركيز على هذه الشاشات الصغيرة أمرٌ صعبٌ للغاية، ولا تنس كذلك أنّ أغلب القراء مستعجلون؛ لهذا يجب أن يدفعك كل ذلك إلى اختصار رسائلك الإلكترونية التسويقية وجعلها مركّزة ومنظّمة وسريعة. ختامًا إنّ الهدف من زيادة عدد النقرات في الرسائل الإلكترونية هو محاولة تحسين نسب التحويل والحصول على المزيد من المبيعات في نهاية المطاف. وبطبيعة الحال يجب أن يساهم كل جزء من المحتوى الذي تقدّمه إلى القرّاء في تحقيق هذا الهدف الاستراتيجي وأن ينال اهتمام المشتركين واستحسانهم على الدوام. قد تظنّ بأنّ تقديم أكبر قدر ممكن من المحتوى في الرسائل الإلكترونية سيؤدي إلى تحفيز المشتركين للنقر على رسائلك الإلكترونية، ولكنّ تقديم الكثير من الخيارات قد يكون في الواقع سببًا لتثبيط المشتركين ودفعهم إلى الامتناع عن النقر. اجعل تصميم نشرتك البريدية بسيطًا وأجرِ اختبارات A/B على أشكال مختلفة من المحتوى، ثم راقب النتائج. ترجمة - وبتصرّف - للمقال How to Update Your Email Newsletter Design to Increase Clicks لصاحبه Adam Rogers. حقوق الصورة البارزة محفوظة لـ Freepik
  5. يتطلّب جذب العملاء إلى علامتك التجارية تقديم المحتوى الملائم قدر الإمكان، وسواء أكان المحتوى المقدّم عبارة عن رسالة إلكترونية، أو منشور في وسائل التواصل الاجتماعي أو حتى ورقة مطبوعة، فعليك أن تحرص على إضفاء الطابع الشخصي على ذلك المحتوى. تقدّم الرسائل الإلكترونية ذات الطابع الشخصي 6 أضعاف ما تقدّمه الرسائل الإلكترونية العادية من العائدات، وقد لاحظ المسوّقون زيادة في العائدات تقدّر بـ 760% في حملات التسويق المجزّئة. هذا يعني أن إضفاء الطابع الشخصي يأتي بنتائج ممتازة، وأنّ عليك اتباع هذا الأسلوب بصورة واسعة في رحلة التعامل مع عملائك. نعم رحلة! لو فكّرت في الأمر قليلًا سترى بأنّ كلّ عميل من عملائك في رحلة، ففي البداية سمع العميل عنك في مكان ما - ربّما في فيسبوك أو في إعلان تجاري أو في مدوّنة - فأصبحت مألوفًا بالنسبة إليه، بعدها بادر إلى التسجيل في قائمتك البريدية واشترى أحد منتجاتك وأصبح بذلك أحد عملائك. لكل عميل رحلة فريدة وخاصّة به، وهو الأمر الذي يجعل من أسلوب تخصيص المحتوى وإضفاء الطابع الشخصي عليه أسلوبًا مهمًّا للغاية. وسنتحدّث في هذا المقال عن كيفية الاستفادة من هذا الأسلوب خلال الرحلة التي يقطعها العميل معك بغية إرسال رسائل ملائمة وذات طابع شخصي، لتكون النتيجة في النهاية الحصول على أكبر مقدار ممكن من العائدات على الاستثمار عن طريق حملات التسويق بالبريد الإلكتروني. استخلص المعلومات عند انضمام المشتركين إلى قائمتك البريدية يستخدم المسوقون في العادة معلومات الشراء السابقة لإضفاء الطابع الشخصي على الرسائل التي يرسلونها إلى المشتركين، ولكن يجدر بك البدء باتباع هذا اﻷسلوب في أسرع وقت ممكن. يمكن استخلاص المعلومات التي يقدّمها من يبادر إلى التسجيل في قائمتك البريدية، ويمكن الاستفادة من هذه المعلومات لإضفاء الطابع الشخصي على المحتوى الذي ستقدّمه إليه. فعلى سبيل المثال، يطلب موقع Topshop عند التسجيل في القائمة البريدية إضافة الاسم وتاريخ الميلاد واسم الدولة، وتحديد ما إذا كان الشخص طالبًا أو لا. تقدّم Topshop باستخدام هذه المعلومات محتوًى ذا طابع شخصي وعلى نطاق واسع، وتحرص Topshop على تلقّي كل مشترك في القائمة البريدية على رسالة عيد ميلاد مخصّصة أو رسائل إلكترونية حسب الموقع الجغرافي. جمع المعلومات ليس مقتصرًا على نماذج التسجيل وحسب، بل يمكن استخدام عنوان IP الخاص بالمشترك للحصول على معلومات حول موقعه الجغرافي، وبهذا يمكن إرسال رسائل ذات طابع شخصي تقدّم عروضًا مرتبطة بالموقع الجغرافي للمشترك. قدم الاقتراحات بناءً على المشتريات السابقة وأسلوب التصفح ما الذي يحدث عندما يتّخذ المشترك اجراءات معيّنة في موقعك الإلكتروني؟ يمكن أتمتة عملية إرسال الرسائل الإلكترونية حسب الإجراء trigger-based الذي يتّخذه المشترك في الموقع الإلكتروني. بهذه الطريقة، يمكن تهيئة مجموعة من الرسائل الإلكترونية لضمان حصول كل مشترك على رسائل مرتبطة بالإجراءات التي اتّخذها، وذات طابع شخصي في نفس الوقت. فمثلًا، لو قضيت بعض الوقت في استعراض الصفحات المرتبطة بكراسي غرف الطعام على موقع Room & Board، فإنّك ستتلقّى ولمدّة ثلاثين يومًا رسائل إلكترونية ترويجية عن الكراسي تتضمّن مراجعات إيجابية. زامن العروض الرقمية مع سلوك العملاء في المتجر الحقيقي يكثر الحديث عن الجهود التي يجب عليك أن تبذلها في التسويق الرقمي، ولكن من النادر أن تجد من يذكر شيئًا عن مزامنة هذه الجهود مع ما يجري في المتجر الحقيقي. ومع ذلك، فإن الوقت المثالي لتسجيل العملاء في القائمة البريدية هو في الغالب عندما يكونون في المتجر الحقيقي. يمكنك استخدام المعلومات التي تحصل عليها في المتجر لإرسال رسائل إلكترونية مؤتمتة تتمتّع بطابع شخصي. فعلى سبيل المثال، إن تبنّيت قطّة ضمن إحدى فعاليات التبنّي التي تقيمها PetSmart سيُطلب منك التسجيل في برنامج جوائز PetPerks والذي يخوّلك الحصول على عروض ترويجية خاصّة، وبعد التسجيل ستحصل على رسالة إلكترونية مؤتمتة من PetSmart يشكرونك فيها على الشراء من متجرهم. ادع المشتركين إلى متجرك حسب موقعهم الجغرافي إنّ الاستفادة من الموقع الجغرافي للعميل هي من أفضل الوسائل التي يمكن استغلالها لإضفاء الطابع الشخصي على الرسائل المرسلة إليه، وبهذه الطريقة يمكنك دعوة العميل إلى زيارة متجرك وباستخدام الرسائل الإلكترونية المؤتمتة فقط. يتلقّى المشتركون في Kate Spade New York رسائل إلكترونية تتضمّن معلومات حول المتاجر القريبة منهم، ويمكن تبديل هذه المعلومات بصورة تلقائية بالاعتماد على الموقع الجغرافي للمشترك، فلو كنت تعيش في بوسطن Boston مثلًا، ستدعوك الرسالة إلى زيارة المتجر القائم في Newbury Street. أرسل تحديثات مؤتمتة إن كنت تمتلك معلومات عن المشتركين فيمكنك الاستفادة منها في إرسال تحديثات مؤتمتة تطلعهم فيها على المستجدّات وتذكّرهم بالعودة إلى متجرك والشراء مرة أخرى. يبعث Sephora وهو متجر متخصّص في أدوات التجميل تحديثات مؤتمتة للمشتركين من فئة VIB لإطلاعهم على آخر المستجدات. تتمتّع الرسائل الإلكترونية بطابع شخصي وتعرض النقاط التي حصل عليها المشترك، ومقدار المال اللازم إنفاقه للبقاء ضمن الفئة الحالية. اسأل المشتركين عن رأيهم في أدائك إنَّ طلب التغذية الراجعة من العملاء هو جزء من أجزاء الرحلة التي يقطعونها معك. كيف كانت تجربة العميل؟ وهل سينصح أصدقائه وزملائه بالتعامل معك؟ يمكنك إنشاء استبيانات مؤتمتة يتلقّاها المشترك بعد إكماله لحدث معين، فعلى سبيل المثال ترسل Oak Tree Mazda استبيان صافي نقاط الترويج NPS وذلك بعد أن يأخذ العميل سيارته إلى ورشة الصيانة التابعة لهم. الخلاصة التسويق المؤتمت هو أفضل وسيلة لتحسين تجربة العملاء، إذ يمكن إرسال المحتوى للشخص المناسب في الوقت المناسب، وبإضفاء طابع شخصي على ذلك المحتوى ستضمن أنّه ملائم للعميل قدر الإمكان. ترجمة - وبتصرّف - للمقال How to Incorporate Personalization Into the Customer Journey for Massive Relevance لصاحبته Samantha Ferguson. حقوق الصورة البارزة محفوظة لـ Freepik
  6. قد تصبح عملية التسويق لخدمتك أو مشروعك التجاري عملية مكلفة، وبالرغم من أن ذلك استثمار سيعود عليك بنتائج ممتازة على المدى الطويل، إلا أن الحصول على التمويل اللازم لتغطية التكاليف أمرٌ لا يخلو من الصعوبة، خصوصًا في الأيام الأولى من عمر الشركة. تحتاج معظم عمليات التسويق إلى ميزانية متوسطة على الأقل، ولكن هناك بعض الطرق الفعّالة التي يمكنك اتّباعها في الترويج لمشروعك التجاري دون أن يكلِّفك ذلك شيئًا على الإطلاق؛ إذ يمكن الاستعانة بقوة وسائل التواصل الاجتماعي في الترويج لخدمتك أو مشروعك التجاري، وفي تثقيف الناس حول ما تقدّمه والطريقة التي يمكنك مساعدتهم بها، وكلّ ذلك بالمجّان. لنلقِ نظرة على أفضل طرق التسويق للخدمات والمشاريع التجارية عبر وسائل التواصل الاجتماعي والتي لا تكلّف درهمًا واحدًا. 1. اشترك في Twitter Chats تعدّ محادثات تويتر (Twitter Chats) وسيلة ممتازة لجمع الأفراد المهتمّين بموضوع أو صنعة أو شركة معيّنة. ولما كان الجميع مرتبطين بوسم (hastag) معين فيمكن حينئذٍ استخدام محادثات تويتر لجذب عملاء جدد من الجمهور المستهدف. بصورة عامة، يبدأ المدير أو قائد الشركة بمحادثة في تويتر وذلك بتغريد سؤال واحد أو أكثر وتتضمن هذه التغريدات وسمًا خاصًّا بها، ويمكن للمشتركين الإجابة عن هذه الأسئلة باستخدام الوسم نفسه، وهكذا تكون جميع التغريدات ذات الصلة مرتبطةً بعضها ببعض. يمكن للمشتركين تقديم أفكارهم الخاصة، وعرض آراء متباينة، والتفاعل مع بعضهم البعض، وعادة ما تُنظَّم محادثات تويتر في الوقت نفسه كل أسبوع وتُطرَح مواضيع جديدة للنقاش في كل مرة. تخضع كل محادثة إلى قواعد وقوانين خاصة يضعها مُنشئ تلك المحادثة، ولكن ترويج المنتجات والخدمات بصورة مباشرة أمرٌ غير محبّذٍ على اﻹطلاق. ومع هذا، تشجع محادثات تويتر على إجراء المحاورات بين الأعضاء المهتمين بمواضيع متشابهة، لذا ستزداد فرصك في التواصل مع بعض الأشخاص من الجمهور المستهدف. يمكنك مثلًا إضافة روابط للمحتوى أو المنتج أو الخدمة التي تقدمها والتي تمثّل في نظرك حلًّا للمشاكل التي يواجهونها وذلك بعد إجراء محادثة بسيطة معهم في البداية. احرص فقط أن تكون المحادثة عفوية وطبيعية قدر الإمكان. تتنوع المواضيح المطروحة في محادثات تويتر تنوّعًا كبيرًا، وعليك أن تعرف المواضيع الملائمة لعملك. حاول التواصل مع بعض الروّاد في مجال عملك لتتعرّف عن طريقهم على بعض المحادثات المعروفة، وتابع على الدوام الأوسمة المرتبطة بمجال عملك، مع التذكير بأنّك قادر على إنشاء محادثة خاصّة بك. تذكّر عند المشاركة في المحادثات بأنّها تتحرّك وتتغير بسرعة؛ لذا حافظ على تركيزك وحاول التواصل مع أكبر قدر ممكن من الأشخاص، حتى لو لم تكن متأكّدًا من كونّهم جزءًا من جمهورك المستهدف. 2. كن نشطًا في مجموعات فيسبوك مجموعات فيسبوك هي طريقة أخرى لجمع الأشخاص المهتمّين بموضوع أو فكرة أو صنعة معيّنة عبر وسائل التواصل الاجتماعي. ولكن، على العكس من محادثات تويتر، فإن مجموعات فيسبوك تكون دائمية، ويمكن للأشخاص الانضمام إلى هذه المجموعات والخروج منها حسب رغبتهم، ويمكنهم كذلك ترك الرسائل وإضافة التعليقات وطرح الأسئلة في أي وقت يشاؤون. يمكن تشبيه مجموعات فيسبوك بالمنتديات، حيث هناك مدراء للمجموعات يضعون القواعد التي من شأنها تنظيم المجموعة وضمان التزام جميع أعضاءها بمواضعيها العامة، ويمكن للأعضاء إنشاء المحادثات وطرح الأسئلة والإجابة على المنشورات بكل حرية. تعتمد القواعد المفروضة في المجموعة - كما هو الحال في محادثات تويتر - على مؤسّسي المجموعة ومديريها، ولكن ليس من المحبّذ بصورة عامّة الترويج لمشروعك التجاري بصورة مباشرة في أيِّ مكان. يتطلب الترويج الفعال لمشروعك التجاري عبر مجموعات فيسبوك الحضور الدائم والفعّال، ومشاركة المحتوى الذي يقدّم حلولًا للمشاكل التي يواجهها أعضاء المجموعة وإجاباتٍ مفيدة للأسئلة التي يطرحونها. في بعض الأحيان تُطرح أسئلة معينة وبصورة متكرّرة في المجموعة دون أن يتمكّن أحدٌ من اﻹجابة عنها، وفي هذه الحالة عليك أن تستغلّ الفرصة وتُجري الأبحاث اللازمة لتقدّم محتوىً جديدًا يملأ هذه الفجوة. يمكن العثور على مجموعات فيسبوك - كما هو الحال مع محادثات تويتر - عن طريق البحث بالكلمات المفتاحية المرتبطة بمجال عملك، أو التركيز على الأماكن التي يتواجد فيها جمهورك المستهدف. احرص على أن تكون فعّالًا بعد الانضمام إلى المجموعة، إذ كلّما تعرّف أعضاء المجموعة عليك وعلى علامتك التجارية بصورة أكبر، ازدادت فرصة زيارتهم لموقعك الإلكترونيّ وربّما شراء منتجاتك. 3. تبنّى المحادثات ثنائية الأطراف تستخدم معظم المشاريع التجارية الصغيرة منصّات التواصل الاجتماعي لإرسال روابط للمحتوى والموقع الإلكتروني والمنتجات والخدمات التي تقدّمها. ولكن عادة ما يتجاهل الناس هذه الروابط عندما تُرسل في السياق الخاطئ، ومع أنّ الكثير من العملاء المحتملين إضافة إلى الجمهور المستهدف يرغبون في التفاعل والتواصل مع علاماتهم التجارية المفضّلة، فقد يؤدي أسلوب التواصل هذا والذي يكون من طرف واحد فقط إلى نفور هؤلاء الأشخاص وقد تكون النتائج سلبية. من الضرورة بمكان إدراك الطريقة الفعّالة لترويج الخدمات والمحتوى الذي تقدّمه على صفحات التواصل الاجتماعي، فالبدء بالمحادثة من الأمور المهمّة لجذب الانتباه إليك، ولا تتوقع أبدًا أن تحوز اهتمام المجتمع حينما لا تكون منتبهًا إلى السياق العام عند إرسال الروابط الخاصّة بك، وبطبيعة الحال فإن عدم حصولك على اهتمام الناس يعني أنّهم لن يتوجّهوا إلى موقعك اﻹلكتروني لشراء منتجاتك. هذا لا يعني عدم استخدام الروابط في وسائل التواصل الاجتماعي على الإطلاق، ولكن يجب عليك الانتباه إلى عدم الإلحاح في هذه المسألة، فالروابط وسيلة مهمّة لإيصال جمهورك المستهدف إلى موقعك الإلكتروني للتواصل معك أو لشراء المنتجات التي تقدّمها، ولكن عليك أن تحرص على استخدام الروابط في الجزء المناسب من المحادثة لتحفّز القرّاء على الاستجابة أو لتُطْلِعَهم على المزيد من المعلومات. الهدف الرئيسي هنا هو أن تكون المحادثة ثنائية الأطراف، ما يعني أنّ عليك أن تكون الطرف الفعّال في المحادثة، وإن استجاب أحد الأشخاص لمنشوراتك فعليك أن تردّ عليه من غير إبطاء لكي لا تتوقف المحادثة عند هذا الحدّ. أنصت دائمًا لما يطلبه جمهورك المستهدف، وقدّم إليهم المحتوى أو المعلومات أو المنتجات أو الخدمات التي تساعدهم في تحقيق طلباتهم وحلّ مشاكلهم. 4. تواصل مع الأشخاص المؤثرين يجب أن لا يقتصر التواصل على العملاء المحتملين فقط، فإلى جانب الجمهور المستهدف يجب عليك الاستفادة من منصّات التواصل الاجتماعي في التواصل مع الأشخاص المؤثّرين في مجال عملك، والمقصود بالأشخاص المؤثُرين هم الصحفيون والمدونون والروّاد في مجال عملك، بل وحتّى العلامات التجارية الأخرى التي لا تكون مُنافسةً لك بصورة مباشرة. يمكن أن لا يكون الأشخاص المؤثرون من عملائك، ولكنّهم يمتلكون على الأرجح قاعدة جماهيرية عريضة تضمّ جزءًا كبيرًا من الجمهور المستهدف والذي يمتلك ثقة كبيرة في اختيارات هؤلاء المؤثرين وفي آرائهم. إن تمكّنت من التواصل مع الأشخاص المؤثرين وكسب صداقتهم، فسيتعرّف عليك العديد من الأشخاص الجدد حينئذ وقد يفكّر هؤلاء في أن يصبحوا عملائك في المستقبل. يكفيك مثلًا أن يذكرك أحد الأشخاص المؤثرين في صفحته أو أن يعيد نشر إحدى منشوراتك وستحصل على عدد من العملاء الجدد لعلامتك التجارية. يمكنك بناء مثل هذه العلاقات بالتحاور مع أحد الأشخاص المؤثرين في مجال عملك، ويمكنك مثلًا الرد على منشوراتهم، أو مشاركة المحتوى الذي يقدّمونه لمتابعيهم، أو التواصل معهم عبر محادثات تويتر أو مجموعات فيسبوك، وسيساعد ذلك على توطيد العلاقة التي تربطك بهم وبنفس الطريقة التي تتبعها في حياتك الشخصية، وكلما ازداد التواصل أصبحت العلاقة أقوى وأقوى. احرص كذلك على أن تكون علاقتك بالأشخاص المؤثّرين علاقةً متبادلةً، بمعنى أن تشارك أنت أيضًا ما يقدّمونه من محتوى مع متابعيك، وأن توضّح لهم مدى قدرتك على مساعدتهم في تحقيق أهدافهم. الخلاصة يرتبط نجاح مشروعك التجاري ارتباطًا وثيقًا باتّباع الأسلوب الملائم في التسويق، غير أن هذا لا يعني أنّك بحاجة إلى إنفاق أموال طائلة لجذب العملاء المحتملين. إن كنت غير قادرٍ على إنفاق الكثير من المال أو كنت تبحث عن طريقة لتوفيره، فيمكنك الاستفادة من وسائل التواصل الاجتماعي في الترويج لخدماتك ومنتجاتك وبصورة فعّالة دون أن تنفق قرشًا واحدًا. لنراجع معًا الوسائل الأربعة التي يمكنك اﻻستفادة منها في الترويج لخدمات مشروعك التجاري عبر وسائل التواصل الاجتماعي وبالمجان: شارك في محادثات تويتر لتتواصل مع أفراد جدد في الجمهور المستهدف. كن نشطًا في مجموعات فيسبوك لتقديم الأفكار القيمة والمفيدة. ابدأ محادثات ثنائية الأطراف، وشارك المحتوى المفيد عندما يحتاج الجمهور المستهدف ذلك. احرص على تكوين علاقات مع الصحفيين والمدوّنين والرواد في مجال عملك. ما هي الوسيلة التي ستتبعها الآن من هذه الوسائل الأربعة المجانية؟ أخبرنا بذلك في التعليقات. ترجمة - وبتصرّف - للمقال 4 Free Ways to Find Clients Using Social Media Marketing لصاحبه Tom Ewer. حقوق الصورة البارزة محفوظة لـ Freepik
  7. اكتشفت مؤخرًا المتعة الكبيرة في استخدام مكتبة [Fractal المقدّمة من PHP League] لإنشاء استجابات للواجهات البرمجية التي تعطي مخرجات من نوع JSON وذلك عند العمل على نماذج Eloquent في إطاري العمل Laravel و Lumen للحصول على المخرجات التي أرغب بها. هذه الحزمة مشابهة إلى حدٍّ كبير لمكتبة ActiveModel Serializer في إطار العمل Rails، إذ إنّها تتيح لك التحكّم الدقيق بالمخرجات التي ترغب في وصولها إلى المستخدم، إضافة إلى أنّها تفصل الشيفرة المسؤولة عن إنشاء كائن JSON عن نموذج Eloquent وهذا أمر في غاية الأهمية. والآن بعد أن أتيح لي تطوير عدد من الواجهات البرمجية لفترة زمنية لا بأس بها، خطر لي أن أتحدّث عن الطرق التي اتبعتها في ربط Fractal مع تطبيقات Laravel و Lumen (تختلف طريقة الربط في إطار Lumen لأنّه لا يدعم ماكروات Response). المُسَلسِلات المخصّصة Costum Serializers بادئ ذي بدء، تدعم Fractal عددًا من المُسَلسِلات Serializers لتكوين بنية خاصة بالاستجابة، وتستخدم بصورة افتراضية المسَلسِل الذي يدعى بـ DataArraySerializer والذي يضيف مفتاح جذر root key يحمل الاسم data إلى الاستجابة، لذا إن كنت لا تمانع من استخدام هذا المُسَلسِل فيمكنك تجاوز هذه الخطوة. أما لو كنت ترغب في استخدام مُسَلسِل آخر فعليك تسجيل الصنف Manager مع حاوية IoC في مزوّد الخدمة AppServiceProvider أو في مزوّد خدمة آخر إن كنت ترى أنّه يناسبك أكثر، ولكن عليك الانتباه إلى أنّ دعم JSON-API غير مكتمل حتى الآن (المقالة الأصلية نشرت سنة 2015. (المترجم)). public function register() { $this->app->bind('League\Fractal\Manager', function($app) { $manager = new \League\Fractal\Manager; // Use the serializer of your choice. $manager->setSerializer(new \App\Http\Serializers\RootSerializer); return $manager; }); } إنشاء المحوّلات Transformers بعد ذلك سنحتاج إلى إنشاء بعض المحوّلات - محوّل لكل نوع من أنواع نماذج Eloquent التي ترغب في تخريجها بواسطة الواجهة البرمجية - وفي مثالنا هذا سأستخدم مدوّنة حيث يضمّ النموذج AppUser عددًا من نماذج AppPost وسنعرض المستخدم مع المقالات الخاصّة به. أنشأت مجلّدً للتحويلات داخل مجلّد Http: app/Http/Transoformers، والآن يمكنني إنشاء محوّلين، الأول لنموذج User والثاني لنموذج Post. محوّل المستخدمين User سيكون سهلًا، إذ أنّه سيُرجع الحقول المطلوبة من قبل واجهتي البرمجية. في هذا المثال، يمتلك النموذج User خاصّية is_admin وهي عبارة عن قيمة منطقية boolean. ويمكنني التعبير عن ذلك في المحوّل بواسطة العبارة (bool) $user->is_admin ولكن اعتبارًا من الإصدار 5.0 وما بعده من Laravel أصبح بالإمكان استخدام خاصّية $casts في النموذج وسيكون Eloquent قادرًا بعدها على معالجة عملية الوصف بالنيابة عنك. يستحسن معالجة مثل هذه الأمور ضمن النموذج لأنّها ستكون متاحة في التطبيق برمّته. <?php namespace App\Http\Transformers; use App\User; use League\Fractal\TransformerAbstract; class UserTransformer extends TransformerAbstract { /** * Turn this item object into a generic array. * * @param \App\User $user * @return array */ public function transform(User $user) { return [ 'id' => $user->id, 'first_name' => $user->first_name, 'last_name' => $user->last_name, 'email' => $user->email, 'is_admin' => $user->is_admin, 'created_at' => $post->created_at->toDateTimeString(), 'updated_at' => $post->updated_at->toDateTimeString() ]; } } بما أنّ خصائص التاريخ في نماذج Eloquent هي نسخ من مكتبة Carbon يمكن إذًا استخدام الدوال المساعدة التي تقدّمها هذه المكتبة لإرجاع التاريخ بالصيغة التي نرغب بها. وفي مثالنا سنستخدم الدالة toDateTimeString() وسيكون التاريخ بالصيغة التالية: Y-m-d H:i:s (السنة - الشهر - اليوم الساعة:الدقائق:الثواني). والآن سنحتاج إلى محوّل لأجل نموذج Post، وسيكون هذا المحوّل مختلفًا عن السابق لأنّنا نرغب في تضمين النموذج User المرتبط بنموذج Post مع هذه الاستجابة. <?php namespace App\Http\Transforers; use App\Post; use League\Fractal\TransformerAbstract; class PostTransformer extends TransformerAbstract { /** * List of resources possible to include * * @var array */ protected $availableIncludes = ['user']; /** * List of resources to automatically include. * * @var array */ protected $defaultIncludes = ['user']; /** * Turn this item object into a generic array. * * @param \App\Post $post * @return array */ public function transform(Post $post) { return [ 'id' => $post->id, 'title' => $post->title, 'content' => $post->content, 'created_at' => $post->created_at->toDateTimeString(), 'updated_at' => $post->updated_at->toDateTimeString(), 'published_at' => $post->published_at->toDateTimeString() ]; } /** * Include user. * * @param \App\Post $post * @return League\Fractal\ItemResource */ public function includeLevels(Post $post) { return $this->item($post->user, new UserTransformer); } } لاحظ أنّه بالإمكان إرجاع $this->collection داخل المحوّل إن كنت ترغب في ربط مجموعة بدل من عنصر واحد. إنشاء الاستجابات في Laravel عادة ما أنشئ مزوّد خدمة Fractal FractalServiceProvider والذي يضمّ التابع register() الذي قمت بوصفه سابقًا، ثم أسجّل بعض الماكروات في التابع boot() كما تلاحظ هنا. سيؤدي ذلك إلى إضافة تابعين إضافيين إلى معمل (factory) Response في Laravel وسيسهّل إرجاع الاستجابات على هيئة عناصر أو مجموعات. لاحظ أنّي حدّدت نوع (type hint) المحوّل ليكون نسخة من الصنف TransformerAbstract وذلك لأنّي أنشئ دائمًا المحوّلات من الاستجابات بدلًا من صيغة الدالة المغلقة closure لأنّي أرى بأنّ هذه الطريقة ستحافظ على ترتيب الشيفرات التي أكتبها. لكن إن كنت تفضل استخدام الدوال المغلقة بدلًا من المحوّلات فيمكنك بكل ساطة أن لا تحدد نوع المحوّل ضمن المعاملات. public function boot() { $fractal = $this->app->make('League\Fractal\Manager'); response()->macro('item', function ($item, \League\Fractal\TransformerAbstract $transformer, $status = 200, array $headers = []) use ($fractal) { $resource = new \League\Fractal\Resource\Item($item, $transformer); return response()->json( $fractal->createData($resource)->toArray(), $status, $headers ); }); response()->macro('collection', function ($collection, \League\Fractal\TransformerAbstract $transformer, $status = 200, array $headers = []) use ($fractal) { $resource = new \League\Fractal\Resource\Collection($collection, $transformer); return response()->json( $fractal->createData($resource)->toArray(), $status, $headers ); }); } والآن أصبح من السهل إنشاء استجابة واحدة (لمستخدم واحد مثلًا) ومجموعة من الاستجابات (لجميع مقالات المدوّنة مثلًا). /** * GET /users/1 * * @param int $userId * @return \Illuminate\Http\Response */ public function showUser($userId) { $user = \App\User::findOrFail($userId); return response()->item($user, new \App\Http\Transformers\UserTransformer); } /** * GET /posts * * @return \Illuminate\Http\Response */ public function showPosts() { $posts = \App\Post::with('user')->get(); return response()->collection($posts, new \App\Http\Transformers\PostTransformer); } إن كنت ترغب في استخدام حالة استجابة HTTP أخرى مثل 201 (تم الإنشاء) أو 204 (لا يوجد محتوى) يمكنك وبكل سهولة تمرير رمز الحالة كمعامل ثالث إلى الماكرو. إنشاء الاستجابات في Lumen يتطلّب إنشاء الاستجابات في Lumen اتباع أسلوب مختلف قليلًا؛ ذلك لأنّ Lumen لا يدعم الماكروات في معمل Response؛ لذا سأضيف هذه التوابع إلى المتحكّم الرئيسي في الواجهة البرمجية. /** * Create the response for an item. * * @param mixed $item * @param \League\Fractal\TransformerAbstract $transformer * @param int $status * @param array $headers * @return Response */ protected function buildItemResponse($item, \League\Fractal\TransformerAbstract $transformer, $status = 200, array $headers = []) { $resource = new \League\Fractal\Resource\Item($item, $transformer); return $this->buildResourceResponse($resource, $status, $headers); } /** * Create the response for a collection. * * @param mixed $collection * @param \League\Fractal\TransformerAbstract $transformer * @param int $status * @param array $headers * @return Response */ protected function buildCollectionResponse($collection, \League\Fractal\TransformerAbstract $transformer, $status = 200, array $headers = []) { $resource = new \League\Fractal\Resource\Collection($collection, $transformer); return $this->buildResourceResponse($resource, $status, $headers); } /** * Create the response for a resource. * * @param \League\Fractal\Resource\ResourceAbstract $resource * @param int $status * @param array $headers * @return Response */ protected function buildResourceResponse(\League\Fractal\Resource\ResourceAbstract $resource, $status = 200, array $headers = []) { $fractal = app('League\Fractal\Manager'); return response()->json( $fractal->createData($resource)->toArray(), $status, $headers ); } يمكنك الآن استدعاء أي تابع من هذه التوابع في أي متحكّم موروث من هذا المتحكّم لإنشاء نفس الاستجابات التي أنشأناها مع Laravel. return $this->buildItemResponse($user, new \App\Http\Transformers\UserTransformer); return $this->buildCollectionResponse($posts, new \App\Http\Transformers\PostTransformer); ترجمة - وبتصرّف - للمقال Using Fractal with Laravel and Lumen لصاحبه Dwight Conrad Watson.
  8. من المؤكّد أنّك ترغب في زيادة وعي الجمهور بمشروعك التجاري، وتدفعك هذه الرغبة إلى زيادة التركيز على أدوات التسويق. وهناك اعتقاد سائد بأنّ برمجيات ومنصّات التسويق تلائم الشركات الكبيرة حصرًا، ولكن الواقع عكس ذلك تمامًا. وبصرف النظر عن طبيعة مشروعك التجاري أو سنوات الخبرة التي تتمتع بها، فإن خير وسيلة لمواكبة السوق الذي يمتاز بالتغير الدائم هي الاستفادة من أدوات التسويق المختلفة ضمن خطتك التسويقية، لتضمن بهذه الطريقة انتشار علامتك التجارية بين شريحة أكبر من الناس، وجذب العملاء والشركاء، وغير ذلك الكثير. ولمساعدتك في هذه المهمّة سنقدّم في هذا المقال نبذةً مختصرةً حول سبع أدوات فعّالة يمكنك الاستفادة منها لتحقيق أهدافك. بعض الإحصائيات المرتبطة بأتمتة التسويق يقرّ 91% من المسوّقين أن وجود أداة تسمح للفريق بتحليل بيانات التسويق والعملاء ومراجعتها والعمل عليها بصورة مستمرة يعدّ إضافة قيّمة إلى مشروعهم التجاري. تساهم منصّات أتمتة التسويق في زيادة إنتاجية المبيعات بنسبة 14.5% وتخفيض نفقات التسويق العامة بنسبة 12.2%. حظيت المشاريع التجارية التي تعتمد على أتمتة التسويق في زيادة العملاء المحتملين، بنسبة زيادة في العملاء المهتمّين Qualified leads وصلت إلى 451%. اكتشف تقرير صدر عام 2015 أن 51% من الشركات تستخدم 21 أو أكثر من الحلول الرقمية التسويقية. إن العامل الأكثر أهمّية في اختيار منصّة أتمتة التسويق بالنسبة لـ 86% من المسوّقين هو سهولة الاستخدام. 43% من الشركات تستخدم منصّات أتمتة التسويق منذ أربع سنوات على الأقل. يستخدم معظم المسوّقين والشركات أدوات أتمتة التسويق أو أنهم يخطّطون للقيام بذلك، وإن كنت لا تستخدم هذه المنصّات فقد حان الوقت للقيام بذلك لتتمكّن من اللحاق بمنافسيك بل والتغلّب عليهم. ولكن ما هي الأدوات التي يمكنك استخدامها؟ فيما يلي سنستعرض سبعة أدوات ممتازة. 1. Infusionsoft تمتلك Infusionsoft أكثر من 125,000 مستخدم وخبرة تصل إلى 16 عامًا في هذا المجال. وقد أثبتت المنصّة فعّاليتها الكبيرة وذلك بسبب سعرها المعقول والأداة الرائعة لإنشاء الحملات. وما أعجبني في هذه الأداة هو أنّها أتاحت الفرصة أمامي وأمام أعضاء الشركة لإنشاء حملات بالصورة التي كنّا نفكر بها، وهذه الميزة ستفتح أمامك الأبواب على مصراعيها، إذ يمكنك إنشاء الحملة بالصورة التي تخيّلتها تمامًا. إضافة إلى ذلك تتوفر في Infusionsoft ميزات مثل الاقتباسات المؤتمتة، ونقاط العملاء المحتملين، والأوسمة غير المحدودة وغير ذلك الكثير. إن كنت تبحث عن أداة تجمع بين مُنشِئ حملات مثالي وبين السعر المنخفض، فهذه المنصّة هي الخيار الأفضل. 2. Ontraport ﻻ تتحلّى Ontraport بشهرة المنصّات المعروفة في مجال أتمتة التسويق، ومع ذلك فهذه الأداة عمليّة للغاية، فمثلًا يمكن إعداد الدفعات الدوريّة في هذه الأداة بكل سهولة وهذا أمر مفيد جدًّا، أضف إلى أنّ التدريب الأولي على هذه الأداة مجّاني. أداة إنشاء التسلسل Sequence builder في هذه المنصّة جيّدة جدًّا وترتبط بصورة رائع مع WordPress، Facebook و Google AdWords. وجود مثل هذه التسهيلات أمر ضروريّ للغاية عند التعامل مع منصّات أتمتة التسويق، وهذا ما توفّره منصّة Ontraport. جدير بالذكر كذلك أنّ هذه المنصّة تنتمي إلى مجموعة المنصّات منخفضة التكاليف، وهو من الأمور المهمّة في اختيار أدوات الأتمتة. 3. Marketo قد لا تكون Marketo أداة منخفضة التكاليف، ولكنّها تستحقّ ما يدفع من أجلها، وتعمل بصورة مثالية مع المنصّات منخفضة التكاليف. ولقد استفدنا كثيرًا من Marketo في تحديد مدى تأثير كل خطّة من الخطط المعتمدة من قبلنا على العائدات الإجمالية. تسعى جميع الشركات الاجتماعية Social enterprise للوصول إلى أكبر قدر ممكن من الناس والتطور بصورة مستمرة، ولكن من الضرورة بمكان معرفة مدى فاعلية الاستراتيجية المتبّعة لتحقيق ذلك. وقد استخدمنا التحليلات المفصّلة التي تقدّمها Marketo - إضافة إلى أمور أخرى - في تشخيص نقاط الضعف والقوة هذه الاستراتيجيات. إلى جانب ذلك تقدّم هذه المنصّة دليلًا يعنى بأتمتة التسويق، وقد ساعدت هذه الميزة أعضاء فريقنا من الذين لم يكونوا على دراية كافية بهذا الموضوع على التعلّم بسرعة كبيرة، الأمر الذي وفّر علينا الكثير من الوقت. 4. Assignment Helper مع أنّ Assignment Helper ليست أداة لأتمتة التسويق ولكنّها تساوي باقي الأدوات في الأهمية، فالجودة العالية للمحتوى من الأمور الضرورية جدًّا لجذب الزوّار والتأكد من عودتهم مرة أخرى؛ لهذا يجب توفير محتوى عمليٍّ غنيٍّ بالمعلومات وبأسلوب متميّز. في بعض الأحيان لا يتوفّر الوقت الكافي للكتابة، أو ينقطع الإلهام أو ربّما لا تمتلك المهارة اللازمة للكتابة، وحلّ هذه المشاكل يتمثّل في التعامل مع خدمات الكتابة الاحترافية، وأرى أن خدمة Assignmet Helper يمكن الاعتماد عليها في هذا الصدد. تقدّم بعض خدمات الكتابة وعودًا بتوفير محتوى عالي الجودة، ولكنّها ﻻ تفي بهذه الوعود في أغلب الأحيان، ولكن هذه الأداة على النقيض تمامًا، إذ يتم إرسال المحتوى في الموعد المحدّد، وخدمة العملاء متاحة في كل وقت، وبهذا يمكن لشركتنا الاجتماعية أن تركّز على مشاريع أخرى أكثر أهميّة. 5. Customer.io لا يمكن أن نعدّ Customer.io منصّة عادية لأتمتة التسويق، فهي تمتاز بواجهة استخدام خفيفة وسريعة، ودعم عملاء مخصّص، وتركّز في المقام الأول على التسويق بالبريد الإلكتروني. وبدلًا من إرسال الرسائل اﻹلكترونية بناء على مشاهدات الصفحة، ترسل Customer.io الرسائل الإلكترونية بناء على الأحداث، وهذه الميزة مفيدة للغاية. تقدّم المنصّة كذلك معلومات تفصيليّة يمكن الاستفادة منها في إنشاء حملات تسويقية تؤدّي إلى تحقيق المزيد من النجاحات. تقدّم هذه المنصّة أيضًا ميزة مفيدة أخرى، وهي إمكانية متابعة أداء كل رسالة إلكترونية تم إرسالها على حدة، وتتيح هذه الميزة القدرة على تعديل حملة التسويق والتأكّد من أن الناس سيفتحون ويقرؤون الرسائل أو النشرات البريدية التي يتلقّّونها. 6. HubSpot تؤدّي HubSpot القليل من كل شيء، وهي واحدة من أفضل أدوات أتمتة التسويق بالنسبة للمشاريع التجارية الصغيرة. هذه المنصّة مفيدة جدًّا عندما ترغب في الشروع بأتمتة التسويق وتكون بحاجة إلى أدوات بسيطة وعملية في نفس الوقت. لقد استخدمت شركتنا هذه الأداة وكانت تجربة رائعة بالفعل، فقد ساعدتنا هذه المنصّة على تحويل العملاء المحتملين وزيادة تدفّق الزوار. إضافة إلى ذلك، تتيح HubSpot للمستخدمين إنشاء وأتمتة وقياس وتحسين الحملة التسويقية، وكما ذكرنا فإنّ هذه الأداة تقوم بالقليل من كل شيء، وتساعد في زيادة خبرتك في مجال أتمتة التسويق الأمر الذي سينعكس إيجابًا على فعّالية الشركة. 7. AdRoll يستخدم ما يزيد عن 30,000 معلن حول العالم منصّة AdRoll، وقد ساعدتنا هذه المنصّة في الوصول إلى عملائنا بصورة أسهل. يمكن استخدام هذه المنصّة في إضافة الإعلانات ومراقبة أدائها، وقد ساهمت وبفعّالية في عرض شركتنا على شريحة أوسع من الناس. ونتيجة لذلك أصبح بإمكاننا إجراء التعديلات اللازمة على حملتنا التسويقية لضمان الأداء الأفضل. تمتلك AdRoll واجهة استخدام سهلة وبسيطة، ويمكن ربطها مع تطبيقات التسويق الأخرى، وهذه الميزة توفّر الكثير من الوقت، فضلًا عن أنّك ستحصل في هذه الحالة على أفضل النتائج من كلا التطبيقين. تختلف الأدوات عن بعضها البعض تتيح منصّات أتمتة التسويق إنشاء وتخصيص الحملات التسويقية بهدف الوصول إلى أوسع شريحة من الناس وتحقيق نجاحات أكبر، وتوفّر هذه المنصّات معلومات يمكن استخدامها في تشخيص نقاط الضعف والقوة في هذه الحملات. وبحسب تجربتنا، فإنّ الاعتماد على منصّة واحدة ليس أمرًا عمليًّا، فلكلّ منصّة ما يميّزها عن الأخرى. تستخدم شركتنا مجموعة من الأدوات المختلفة للحصول على أفضل نتيجة ممكنة من كلّ منصّة، وجمع الكثير من الموارد المرتبطة بأتمتة التسويق. ترجمة - وبتصرّف - للمقال 7 Marketing Automation Tools That Will Make Your Social Enterprise More Efficient لصاحبته Lucy Benton. حقوق الصورة البارزة محفوظة لـ Freepik
  9. Lumen هو إطار عمل مصغّر Micro-framework مبني باستخدام إطار العمل Laravel، وهما من صنع Taylor Otwell. صُمّم Lumen لتطوير الخدمات المصغّرة مثل التطبيقات الصغيرة أو خدمات الويب، والهدف من تطويره هو الحصول على أقصى قدر من السرعة، فقد تم استبدال مكوّن التوجيه Symfony في Laravel بـ FastRoute في Lument لتحسين الأداء وزيادة السرعة. في هذا الدرس سننشئ واجهة برمجية بنمط RESTful، وستعمل هذه الواجهة البرمجية على تخزين وعرض المعلومات الخاصّة بالكتب. تثبيت Lumen سنستخدم Composer لتثبيت lumen، لذا سنتحقّق من وجود هذه المكتبة في النظام، وذلك بكتابة الأمر التالي في الطرفية أو في سطر الأوامر: composer إن ظهرت أوامر Composer فهذا يعني أنّه مثبت في الجهاز، أمّا في حالة عدم تثبيت Composer يمكنك الاطلاع على طريقة التثبيت في هذا المقال. بعد تثبيت composer توجّه إلى المجلّد الجذر في الخادوم: cd /var/www/html لمستخدمي نظام ويندوز سنفترض أن المستخدم يمتلك نسخة من خادوم Wamp في الجهاز، لذا يمكن التوجّه إلى المجلّد الجذر في الخادوم بواسطة الأمر التالي: cd wamp\www والآن سنخبر composer بأنّ ينشئ مشروع Lumen باسم “lumen_rest_ce” باستخدام حزمة “laravel/lumen”: composer create-project laravel/lumen lumen_rest_ce سينشئ هذا الأمر مجلّدًا باسم “lumen_rest_ce” ويثبت جميع ملفّات إطار العمل Lumen إضافة إلى جميع الاعتماديات المتعلّقة به. أداة Artisan موجودة في Lumen كما هو الحال في Laravel، ولكنّها تدعم عددًا أقلّ من الأوامر، ويمكنك الاطلاع على قائمة الأوامر بكتابة الأمر التالي في سطر الأوامر: php artisan لاحظ أنّ الأمر serve والمسؤول عن تشغيل التطبيق على الخادوم غير متوفّر في Lumen لذا سنستعين بخادوم التطوير الخاصّ بلغة PHP لتشغيل Lumen وكما يلي: php -S localhost:8000 -t public افتح المتصفّح الآن وتوجّه إلى العنوان localhost:8000. إن ظهر لك رقم الإصدار الخاص بـ Lumen فهذا يعني أنّ عملية التثبيت قد تمّت بنجاح. الإعدادات أنشئ قاعدة بيانات mysql باستخدام phpmyadmin أو أي عميل Mysql آخر، ثمّ عدّل ملف إعدادات Lumen في مجلد المشروع والذي يحمل الاسم “lumen_rest_ce/.env” بالصورة التالية: DB_CONNECTION=mysql DB_HOST=localhost DB_DATABASE=lumen_rest_ce DB_USERNAME=root DB_PASSWORD=your_password افتح الملف lumen_rest_ce/bootstrap/app.php وأزل علامات التعليق من السطرين التاليين: $app->withFacades(); $app->withEloquent(); إزالة التعليق عن هذين السطرين يسمح لنا باستخدام فئة Facade و Eloquent ORM في مشروعنا. التهجير Migration سنكتب الآن مخطّط قاعدة البيانات ونهيّئه لعملية التهجير، حيث سننشئ جدولًا باسم book يتضمّن ستة أعمدة. المعرّف id (قيمته رقمية int وتتزايد تلقائيًا)، العنوان title (من نوع varchar) الكاتب author (من نوع varchar)، الرقم المعياري الدولي للكتاب isbn (من نوع varchar) وحقلي تاريخ الإنشاء وتاريخ التعديل. سنستخدم عملية التهجير والتي هي بمثابة نظام إدارة نسخ خاصّ بقواعد البيانات. اكتب الأمر التالي في سطر الأوامر: php artisan make:migration create_books_table --create=books سينشئ هذا الأمر ملف تهجير في المجلد dbaatase/migration. يتضمّن هذا الملف صنفًا يحمل الاسم CreateBooksTable والذي يضمّ بدوره تابعين الأول هو up حيث سنكتب مخطّط البيانات، أما الآخر فهو down وهو التابع المسؤول عن حذف الجدول. عدّل الملف ليصبح بالصورة التالية: use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; class CreateBooksTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('books', function(Blueprint $table) { $table->increments('id'); $table->string('title'); $table->string('author'); $table->string('isbn'); $table->timestamps(); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::drop('books'); } } لإنشاء الجدول في قاعدة البيانات سنحتاج إلى تهجير أو تنفيذ ملف التهجير الذي أنشأناه قبل قليل وذلك بواسطة الأمر التالي: php artisan migrate النموذج Model أنشئ الآن نموذج Book ضمن الملف app/Book.php وأضف إليه الشيفرة التالية: <?php namespace App; use Illuminate\Database\Eloquent\Model; class Book extends Model { protected $fillable = ['title', 'author', 'isbn']; } ?> أنشئ كذلك ملفّ المتحكّم BookController.php في المجلد app/Http/Controllers وأضف إليه الشيفرة التالية: <?php namespace App\Http\Controllers; use App\Book; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class BookController extends Controller{ ..... ..... } ?> التوجيه Routing افتح الملف web.php في المجلد routes وستجد أنّه يتضمن مسارًا معرّفًا مسبقًا: $app->get('/', function() use ($app) { لغرض كتابة واجهة برمجية بنمط RESTful سنحتاج إلى كتابة المزيد من المسارات وتوابع المتحكّمات المرتبطة بها، وحسب الجدول التالي: التابع عنوان Url Controller@method GET /api/v1/book BookController@index جميع الكتب GET {api/v1/book/{id BookController@getbook إحضار الكتاب حسب المعرّف id POST /api/v1/book BookController@createBook إنشاء سجل جديد في الجدول PUT {api/v1/book/{id BookController@updateBook تحديث الكتاب حسب المعرّف id DELETE {api/v1/book/{id BookController@deleteBook حذف الكتاب حسب المعرّف id لاحظ أنّنا أضفنا v1 إلى جميع المسارات ونقصد به الإصدار الأول، وهذا من الممارسات التي ينصح باتباعها عند إنشاء خدمات الويب. حسب الجدول السابق فإن ملف web.php سيبدو كالتالي: $app->get('/', function() use ($app) { return 'Lumen RESTful API By Hsoub Academy (<a class="vglnk" href="https://academy.hsoub.com" rel="nofollow"><span>https</span><span>://</span><span>academy.hsoub</span><span>.</span><span>com</span></a>)'; }); $app->get('api/v1/book','App\Http\Controllers\BookController@index'); $app->get('api/v1/book/{id}','App\Http\Controllers\BookController@getbook'); $app->post('api/v1/book','App\Http\Controllers\BookController@createBook'); $app->put('api/v1/book/{id}','App\Http\Controllers\BookController@updateBook'); $app->delete('api/v1/book/{id}','App\Http\Controllers\BookController@deleteBook'); يمكننا كذلك تجميع المسارات حسب لاحقة معيّنة أو حسب نطاقات الأسماء، وبهذا لن نكون بحاجة إلى إضافة api/vi ولا إلى كتابة App\Http\Controllers في جميع المسارات. عدّل الشيفرة السابقة لتصبح بالصورة التالية: $app->get('/', function() use ($app) { return 'Lumen RESTful API By Hsoub Academy (<a class="vglnk" href="https://academy.hsoub.com" rel="nofollow"><span>https</span><span>://</span><span>academy.hsoub</span><span>.</span><span>com</span></a>)'; }); $app->group(['prefix' => 'api/v1','namespace' => 'App\Http\Controllers'], function($app) { $app->get('book','BookController@index'); $app->get('book/{id}','BookController@getbook'); $app->post('book','BookController@createBook'); $app->put('book/{id}','BookController@updateBook'); $app->delete('book/{id}','BookController@deleteBook'); }); المتحكّم والآن عدّل الملف BookController.php وأضف إليه التوابع التي عرّفناها في ملف web.php السابق: <?php namespace App\Http\Controllers; use App\Book; use App\Http\Controllers\Controller; use Illuminate\Http\Request; class BookController extends Controller{ public function index(){ $Books = Book::all(); return response()->json($Books); } public function getBook($id){ $Book = Book::find($id); return response()->json($Book); } public function createBook(Request $request){ $Book = Book::create($request->all()); return response()->json($Book); } public function deleteBook($id){ $Book = Book::find($id); $Book->delete(); return response()->json('deleted'); } public function updateBook(Request $request,$id){ $Book = Book::find($id); $Book->title = $request->input('title'); $Book->author = $request->input('author'); $Book->isbn = $request->input('isbn'); $Book->save(); return response()->json($Book); } } اختبار الواجهة البرمجية أصبحت الواجهة البرمجية جاهزة الآن للاختبار، وسنستخدم الأداة CURL لإجراء الاختبار: curl -I <a class="vglnk" href="http://localhost:8000/api/v1/book" rel="nofollow"><span>http</span><span>://</span><span>localhost</span><span>:</span><span>8000</span><span>/</span><span>api</span><span>/</span><span>v1</span><span>/</span><span>book</span></a> curl -v -H "Accept:application/json" <a class="vglnk" href="http://localhost:8000/api/v1/book/2" rel="nofollow"><span>http</span><span>://</span><span>localhost</span><span>:</span><span>8000</span><span>/</span><span>api</span><span>/</span><span>v1</span><span>/</span><span>book</span><span>/</span><span>2</span></a> curl -i -X POST -H "Content-Type:application/json" <a class="vglnk" href="http://localhost:8000/api/v1/book" rel="nofollow"><span>http</span><span>://</span><span>localhost</span><span>:</span><span>8000</span><span>/</span><span>api</span><span>/</span><span>v1</span><span>/</span><span>book</span></a> -d '{"title":"Test Title","author":"test author","isbn":"12345"}' curl -v -H "Content-Type:application/json" -X PUT <a class="vglnk" href="http://localhost:8000/api/v1/book" rel="nofollow"><span>http</span><span>://</span><span>localhost</span><span>:</span><span>8000</span><span>/</span><span>api</span><span>/</span><span>v1</span><span>/</span><span>book</span></a> -d '{"title":"Test updated title","author":"test upadted author","isbn":"1234567"}' curl -i -X DELETE <a class="vglnk" href="http://localhost:8000/api/v1/book/2" rel="nofollow"><span>http</span><span>://</span><span>localhost</span><span>:</span><span>8000</span><span>/</span><span>api</span><span>/</span><span>v1</span><span>/</span><span>book</span><span>/</span><span>2</span></a> تتيح الإضافة Postman إجراء الاختبارات على الواجهات البرمجية بنمط RESTful وبسهولة. بعد تثبيت هذه الإضافة توجّه في متصفح Chrome إلى العنوان chrome://apps/ لعرض الإضافات المثبّتة وتشغيل POSTMAN. ختامًا ها قد أصبحت الواجهة البرمجية البسيطة التي أنشأناها جاهزة، ولكن لا زال ينقصها الكثير من الخصائص كالاستثياق والتحقّق من البيانات ومعالجة الأخطاء وغير ذلك الكثير. ترجمة - وبتصرّف - للمقال RESTful API in Lumen, A Laravel Micro Framework لصاحبه Arkaprava Majumder.
  10. قد تحتاج في بعض الأحيان إلى تشغيل شيفرة معيّنة دون انتظار المستخدم للقيام بذلك، يمكنك - والحال هذه - أن تنفّذ الشيفرة في الخلفية وأن تخفيها عن المستخدم، وبهذا تزيد من سرعة وفعّالية موقعك الإلكتروني. تعتمد هذه الطريقة على ما يسمى بشيفرات الصدفة Shell script في نظام Linux، حيث يتم تشغيل العمليات في الخلفية، ويمكنك إضافة مهمّة (كأن يكون أمرًا أو شيفرة) في الخلفية وذلك بإضافة الرمز & إلى نهاية سطر الأوامر، والذي سيؤدي إلى وضع الأمر في الخلفية وتهيئة الطرفية لاستقبال أوامر أخرى. يصطلح على الأمر الذي يتم في الخلفية بالشغل Job. جدير بالذكر أنّه يمكن كتابة أوامر أخرى في الوقت الذي يتم فيه تشغيل الأمر في الخلفية. {command} & // مثال: ls -l & exec php index.php > /dev/null 2>&1 & echo $! يمكن التحقق من العمليات التي يتم إجراءها في الوقت الحاضر في الخلفية على Linux بواسطة الأوامر التالية: ps -l (يسرد هذا الأمر جميع العمليات) ps -ef (يسرد هذا الأمر جميع العمليات مع تفاصيل كاملة) ولتنفيذ الأمر من خلال شيفرة php في الخلفية يمكن استخدام الشيفرة التالية: nohup exec arg1 arg2 > /dev/null & // مثال: nohup exec php process.php hello world > /dev/null & ما هو nohup؟ في معظم الأحيان تقوم بتسجيل الدخول إلى الخادوم البعيد من خلال ssh، ويؤدي الخروج من الخادوم إلى إلغاء جميع شيفرات الصدفة والأوامر التي يتم تنفيذها في تلك اللحظة. ولكن تحتاج بعض الأشغال والأوامر وقتًا طويلًا للتنفيذ لذا يستحسن أن تنفّذ الشغل في الخلفية، ولكن إن سجلت الخروج من النظام، فإن الصدفة ستقوم بإيقاف جميع الأشغال الجارية. هنا يأتي دور nohup. تتيح هذه الأداة تنفيذ الأوامر والعمليات وشيفرات الصدفة وضمان استمرار عملها في الخلفية حتى بعد تسجيل الخروج من الصدفة. nohup command syntax: nohup command-name & ما هو exec؟ يستخدم هذا الأمر لتنفيذ العمليات في Linux، ويمكن من خلاله تنفيذ أمر واحد أو أكثر في نفس الوقت. كيف تستخدم هذه المكتبة في شيفرتك؟ الخطوة الأولى: أنشئ ملفّين الأول باسم index.php والثاني process.php. الخطوة الثانية: استورد الملف PHPBackgroundProcesser.php إلى ملف index.php الخطوة الثالثة: أنشئ نسخة instance من الصنف BackgroundProcess. يمكنك الآن اتباع إحدى الطرق التالية: الطريقة الأولى: $proc=new BackgroundProcess('exec php <BASE_PATH>/process.php hello world'); الطريقة الثانية: $proc=new BackgroundProcess(); $proc->setCmd('exec php <BASE_PATH>/process.php hello world'); $proc->start(); الطريقة الثالثة: $proc=new BackgroundProcess(); $proc->setCmd('exec php <BASE_PATH>/process.php hello world')->start(); يمكنك كذلك تنفيذ عنوان PHP URL في الخلفية دون الحاجة إلى تحديد ملف بصيغة .php. $process=new BackgroundProcess("curl -s -o <Base Path>/log/log_storewav.log <PHP URL to execute> -d param_key=<Param_value>"); يمكن معرفة العمليات التي يتم تنفيذها بواسطة الشيفرة التالية: $proc=new BackgroundProcess(); print_r($proc->showAllPocess()); أما إيقاف العمليات فيكون عن طريق الشيفرة التالية: $proc=new BackgroundProcess(); $proc->setProcessId(101)->stop(); //set the process id. ترجمة - وبتصرّف - للمقال How to run a php script in background لصاحبه Sanjay Panda.
  11. تقدّمت منذ فترة بطلب إلى مطوّري إطار عمل Laravel لإضافة مكتبة JavaScript مشابهة لتلك الموجودة في إطار العمل Ruby on Rails. إذ تقدّم المكتبة المتوفرة في إطار Rails مجموعة من الخصائص المفيدة التي يمكن إضافتها إلى شيفرة HTML للحصول على المزيد من الوظائف التي تسهّل على المطوّر أداء الكثير من المهامّ الشائعة. أجري نقاش حول هذا الموضوع وتمخّض النقاش عن الاقتراح التالي: إما أن يصار إلى إنشاء حزمة Composer من طرف ثالث، أو أن المكتبة التابعة لإطار العمل Rails صالحة للاستخدام في Laravel. وفقًا للمقترح السابق قرّرت استخدام مكتبة UJS التابعة لـ Rails في أحد مشاريعي ورحت أتفحّص الطرق التي يمكن من خلالها استخدام نفس الخصائص في الإصدار الرابع من Laravel. ولسوء الحظ لا يمتلك Laravel نفس التوابع المساعدة الموجودة في Rails والمسؤولة عن أداء وظائف معيّنة، ولكن لا زال بالإمكان تفعيل هذه الوظائف في المكان الذي ترغب فيه باستخدام الخواص الملائمة، ومن المؤكّد أن هذه الوظائف ستعمل حسب المطلوب في أي إطار عمل آخر. البداية بعد أن تربط مكتبتي jQuery و Rails UJS مع ملف HTML ستحتاج إلى إجراء بعض التعديلات السريعة. سنحتاج أوّلًا إلى إعداد مكتبة UJS للعمل مع رمز CSRF على فرض أنّك تستخدم هذه الرموز في تطبيقاتك (أنصحك باستخدامها)، لذا سنضع وسمي <meta> في بداية المستند: <meta name="csrf-param" content="_token"> <meta name="csrf-token" content="{{ csrf_token() }}"> يخبر الوسم الأول مكتبة UJS بالاسم الذي يجب استخدامه لرمز CSRF عند إنشاء الطلب، أما الوسم الثاني فيخبر المكتبة بوسم CSRF الذي يجب استخدامه. يستخدم Laravel افتراضيًا token_ كاسم للمعامل (ألق نظرة على ملف filters.php للمزيد من المعلومات)، أما التابع ()csrf_token فيضيف رمز الحماية إلى الطلب. خاصية data-method هذه الخاصية مفيدة جدًّا عند استخدام للروابط، إذ تخطف مكتبة UJS النقرة على الرابط وتنشئ طلبًا باستخدام فعل Http الذي نقدّمه إلى الخاصية. مثال: <a href="posts/1" data-method="delete" rel="nofollow">Delete this post</a> عند النقر على الرابط، يتم إنشاء طلب من نوع DELETE بدلًا من الطلب الاعتيادي GET والذي ينشأ من مثل هذه الروابط، وبهذا يمكنك إجراء أحداث بنمط RESTful في تطبيقك دون الحاجة إلى الاستمارات. إن كنت ترغب في إنشاء روابط مشابهة لهذا الرابط في Laravel فإليك المثال التالي والذي نستخدم فيه دالة link المساعدة: {{ link_to_route('posts.destroy', 'Delete this post', $post->id, ['data-method' => 'delete', 'rel' => 'nofollow']) }} جدير بالذكر أنّه يجب إضافة الخاصية rel="nofollow" عند استخدام هذه الدالة المساعدة لضمان عدم فهرسة محركات البحث لهذا الرابط. خاصية data-confirm هذه الخاصية مفيدة للتحقّق من الموافقة على إجراء الحدث قبل الاستمرار، وتتم عملية التحقّق هذه بواسطة مربع التنبيه الذي يظهر بواسطة الدالة confirm() في JavaScript، ويمكن استبدال مربّع التنبيه هذا بآخر ذي شكل أجمل حسب الرغبة. تعمل هذه الخاصية بصورة جيّدة مع المثال السابق، فإن كان الرابط أو الزرّ يؤدّي إلى حذف شيء ما فيستحسن حينئذٍ التحقّق من الرغبة في القيام بذلك قبل إجراء عملية الحذف. <a href="posts/1" data-method="delete" data-confirm="Are you sure you want to delete this post?" rel="nofollow">Delete this post</a> إن ألغى المستخدم صندوق التأكيد هذا لن يتم تنفيذ الحدث، والعكس بالعكس. جدير بالذكر أنّك لست ملزمًا باستخدام هذه الطريقة مع خاصية data-method بل يمكن استخدامها مع أي حدث ترغب في التحقق منه قبل إجراءه. خاصية data-disable قد ترغب أحيانًا في تعطيل زرّ معين بعد النقر عليه مباشرة لإتاحة الفرصة لاكتمال الطلب وفي حال فشل الطلب تعيد تفعيل الزرّ مرة أخرى. تتيح لك مكتبة UJS القيام بهذا الأمر بواسطة خاصّية data-disable. <input type="submit" value="Save post" data-disable> هكذا سيتم تعطيل الزر بعد النقر عليه وستمنع المستخدم من النقر المستمر على الزر وإنشاء 10 سجلات جديدة في قاعدة البيانات. بالنسبة لمستخدمي Laravel يمكن الاستفادة من هذه الخاصّية باستخدام منشئ الاستمارات form builder. {{ Form::submit('Save post', ['data-disable']) }} خاصّية data-disable-with يمكن التوسع في المثال السابق وذلك بتقديم بعض المعلومات المفيدة للمستخدم، فعند تعطيل الزرّ يظهر نصّ يخبر المستخدم بأنّ الطلب في طور الإنشاء في الخلفية. <input type="submit" value="Save post" data-disable-with="Saving this post..."> والآن عندما يكون الزرّ معطلًا، يتم استبدال النص بعبارة تدلّ على أن النقر على الزرّ قد أدى إلى حدوث شيء ما في الخلفية. خاصّية data-remote عند إضافة الخاصّية data-remote إلى الاستمارة، تقوم مكتبة UJS بإرسال الاستمارة كطلب Ajax. وستأخذ المكتبة كل شيء بالحسبان (طريقة الإرسال، التحقق من الموافقة على الإجراء… الخ) قبل إرسال الاستمارة. <form action="posts" method="post" data-remote> <!-- Form goes here. --> </form> ويمكن التعامل مع الاستجابة الواردة بعد نجاح الطلب بكل سهولة، فإن استجاب المتصفّح بواسطة JavaScript فستنفّذ الاستجابة فور اكتمال الطلب. على سبيل المثال، قد تختار إعادة توجيه المستخدم بعد تنفيذ طلب للحذف: window.location.href = '{{ route('posts.index') }}'; أو لنقل مثلًا أنّك تستخدم رابطًا لحذف مقالة من صفحة تتضمن قائمة بالمقالات المتوفّرة في المدونة، وترغب في إخفاء المقالة بعد حذفها مباشرة. <a href="{{ route('posts.destroy', $post->id) }}" data-method="destroy" data-confirm="Delete this post?" rel="nofollow" data-remote>Delete this post</a> يمكن استخدام الشيفرة التالية لإخفاء المقالة: $('#post-{{ $post->id }}').fadeOut(); وهكذا، تُحذف المقالة من قاعدة البيانات والعرض في آن معًا. خاصّية data-type: إن استخدمت الخاصّية السابقة data-remote يمكنك كذلك استخدام خاصية data-type لتحديد هيئة البيانات التي يتم إرسالها إلى الخادوم. فعلى سبيل المثال يمكن إرسال الاستمارة على هيئة Json: <form data-type="json"> الأحداث البعيدة عند استخدام خاصّية data-remote يمكن الوصول إلى الأحداث المختلفة في طلب Ajax لتأدية بعض المهامّ الإضافية. إذ تطلق مكتبة UJS عددًا من الأحداث المساعدة خلال دورة حياة الطلب والتي من شأنها أن تساعد في بناء تطبيقات أكثر تعقيدًا. ajax:before ينطلق هذا الحدث قبل حدوث أي شيء، وإيقاف هذا الحدث يؤدي إلى إلغاء الطلب. ajax:beforeSend: ينطلق هذا الحدث قبل إرسال طلب Ajax مباشرة، وإيقاف الحدث يؤدي إلى إلغاء الطلب. ajax:send: ينطلق عند إرسال طلب Ajax. ajax:success: ينطلق بعد اكتمال الطلب بنجاح. ajax:error: ينطلق بعد فشل إرسال الطلب. ajax:aborted:required: ينطلق في حال وجود حقول إلزامية فارغة في الاستمارة، وفي حال إيقاف الحدث يتم إرسال الاستمارة. ajax:aborted:file: ينطلق في حال وجود حقول ملفات غير فارغة في الاستمارة، ويتم تجاهل الطلب في حال توقّف الحدث. آمل أن يكون هذا الموضوع مفيدًا لكل من يرغب في استخدام مكتبة UJS التابعة لإطار العمل Ruby on Rails مع إطارات العمل الأخرى مثل Laravel، إذ أرى أن هذه المكتبة مفيدة ولا يجوز أن تكون حكرًا على مستخدمي إطار Rails. ترجمة - وبتصرّف - للمقال Using Rails UJS in Laravel 4 (or any other framework) لصاحبه Dwight Conrad Watson.
  12. سواء أكنت في طور بناء موقع إلكتروني لأحد العملاء وترغب في إطلاق حملة تسويقية، أو كنت ترغب فقط في زيادة نسب المشاهدة والوصول إلى موقعك الإلكتروني، فإنّ التهيئة لمحركات البحث هي من الأمور المهمّة لتحقيق ذلك، وربّما تكون العامل الأساسي في نجاح أو فشل المدوّنات أو المشاريع التجارية على شبكة الإنترنت. وعلى الرغم من أنّ محركات البحث الحديثة قد وصلت إلى مستويات كبيرة من التطوّر، وعلى الرغم من أنّ خوارزميات البحث تتطوّر بصورة يومية، إلّا أنّ محرّكات البحث هذه غير قادرة على استيعاب وفهم صفحات الويب بنفس الأسلوب الذي يتّبعه الإنسان. سنتعرّف في هذا المقال على كيفية تهيئة محرّكات البحث في تحديد الهدف من كل صفحة من صفحات الموقع باتباع بعض الخطوات البسيطة، وسنتعرّف كذلك على فائدة عملية التحسين هذه بالنسبة للمستخدمين. لو أخذنا بنظر الاعتبار أن 89% من العملاء يقدمون على شراء المنتجات بعد أن يبحثوا عنها بواسطة محرّكات البحث، فستتجلّى لنا الأسباب التي تجعل من قابلية رؤية محركات البحث للموقع الإلكتروني أمرًا مهمًّا للغاية. ترفع التهيئة لمحركات البحث من قابلية رؤية المشروع التجاري على الإنترنت وتزيد تدفق الزوّار على الموقع الإلكتروني 91.5% من تدفّق الزوّار القادم من محرّك البحث Google يأتي من صفحة النتائج الأولى فقط، في حين أن أقل من 9% من الزوّار فقط ينتقلون إلى الصفحة الثانية في النتائج. 61.5% من تدفّق الزوار يأتي من النتائج الثلاثة الأولى فقط. (دراسة أجرتها مؤسسة Chitika Insights) يمكننا أن نلاحظ وبوضوح مدى أهمّية الترتيب الذي يأخذه الموقع الإلكتروني في نتائج البحث على Google وتأثيرها المباشر على قابلية رؤية الموقع الإلكتروني وعدد الزوّار. وينتج عن الوصول إلى مواقع متقدّمة في نتائج البحث الحصول على الغالبية العظمى من النقرات؛ لذا فإن الوصول إلى المراتب المتقدّمة في نتائج البحث سيؤدي إلى زيادة كبيرة في عدد زوّار موقعك الإلكتروني. تركّز عملية تهيئة محرّكات البحث على إنشاء عناوين وأوسمة وأوصاف meta ذات علاقة بكلمة مفتاحية تظهر في صفحة النتائج، وتساعد الأوسمة والأوصاف المهيّئة بصورة جيّدة إلى زيادة عدد النقرات وهذا سيؤدي إلى زيادة اهتمام عملائك بما تقدّمه إليهم في موقعك الإلكتروني. إليك وجهة نظري تجاه هذا الموضوع ملخّصة في جملة واحدة: التهيئة لمحركات البحث فعّالة من حيث التكلفة تعدّ التهيئة لمحركات البحث إحدى أكثر استراتيجيات التسويق كفاءة وفعّالية من حيث التكلفة، لأنّها تستهدف المستخدمين الذي يبحثون عن منتجاتك وخدماتك في الإنترنت، وفي الوقت نفسه تصبح عملية الحصول على مجموعة زوّار طبيعية Orgainc Listing مجّانية تقريبًا. فعندما يحتلّ موقعك مراتب متقدّمة في نتائج البحث لن تكون حينها بحاجة إلى تخصيص ميزانية للإعلان والترويج لموقعك الإلكتروني، وهذه هي إحدى الميّزات الرئيسية للتهيئة لمحركات البحث، إذ يكفي أن تهيّئ موقعك الإلكتروني لمحرّكات البحث بصورة جيّدة ولن تحتاج بعدها إلى تحمّل أي تكاليف إضافية لجذب المزيد من العملاء المهتمّين. تمنح التهيئة لمحركات البحث المصداقية لمشروعك التجاري صاحب تزايد استخدام الحواسيب والهواتف المحمولة اعتماد الناس بصورة أكبر على محركات البحث. ويثق الناس بأنّ النتائج الأولى في Google تابعة لشركات ذات سمعة جيدة، وبهذا يمكن لعلامتك التجارية أن تحصل على المزيد من الثقة وذلك باستخدام التهيئة لمحركات البحث. تزيد التهيئة لمحركات البحث من سهولة تصفّح الموقع إن تسهيل عملية تصفح موقعك الإلكتروني بالنسبة لمحركات البحث يؤدي بصورة تلقائية إلى إنشاء موقع إلكتروني سهل التصفح بالنسبة للمستخدمين. فإعادة ترتيب هيكلية الموقع وإنشاء خرائط موقع Sitemaps منظّمة، واستخدام عناوين URL صديقة لمحركات البحث، تسهل من قابلية وصول المستخدمين إلى المعلومات التي يوفّرها الموقع الإلكتروني. ما هي الخطوات التي يمكنك اتباعها لتحسين التهيئة لمحركات البحث لديك هناك الكثير من المقالات المتوفّرة على شبكة الإنترنت والتي تغطّي وبالتفصيل كلّ ما تحتاج إلى معرفته حول موضوع تحسين محرّكات البحث، ويمكن الرجوع إلى سلسلة أساسيات SEO للمدوّنين للاطلاع. ولكن من الضروري التركيز على أمور ثلاثة: إجراء التحسينات على صفحات الموقع On-page optimization سواء أكنت ترغب في توظيف محترف في هذا المجال، أو استخدام إضافات مثل Yoast أو All-in-One SEO Pack أو Ultimate SEO) أو الاعتماد على خبرتك في التهيئة لمحركات البحث، فيجب عليك إجراء التحسينات على صفحات الموقع. وهذا يعني أنّ عليك التركيز على تطوير جميع النواحي التقنية (عناوين URL، وسوم العنوان وبيانات meta، كثافة الكلمة المفتاحية، بنية الموقع، الروابط الداخلية، سرعة الموقع، تحسين المحتوى، المقروئية في الأجهزة المحمولة…) على صفحات الموقع الإلكتروني مباشرة. جودة المحتوى من الواضح أنّ Google ومحرّكات البحث الأخرى قد بدأت تركّز تدريجيًّا على جودة وموثوقية المحتوى بدلًا من التحسين على صفحات الموقع. صحيح أنّ تحسين وسوم meta وبنية الموقع لا زال أمرًا ضروريًا، ولكن لم يعد بمقدور أحد أن ينكر أنّ للمحتوى الجيد ولتجربة الاستخدام التي تركّز على المستخدم قصب السبق في مضمار الحصول على نتائج بحث طبيعية organic، وكما يقول Bill Gates: “المحتوى هو الملك”، ويبدو أن محرّكات البحث قد أدركت صحّة هذه المقولة أخيرًا. تتطوّر خوارزميات البحث كلّ يوم، وقد بدأت Google بالاقتراب من الهدف الذي تسعى لتحقيقه وهو: “تنظيم معلومات العالم وجعلها مفيدة وفي متناول الجميع”، وذلك من خلال تحديد الهدف الذي تتوخّاه كلّ صفحة من صفحات الموقع الإلكتروني ومعرفة مقدار الفائدة الذي تقدّمه للمستخدمين. إنشاء روابط موثوقة يمكنك أن تضمن حصول موقعك الإلكتروني على ترتيب متقدّم في محرّكات البحث وذلك بالتخلّص من عادات SEO القديمة مثل تبادل الروابط، والتركيز على الروابط الخلفية الموثوقة backlinks والقادمة من مواقع إلكترونية معروفة وموثّقة. والمقصود بالروابط الموثوقة هي تلك الروابط التي تأتي من: موقع إلكتروني يمتلك تأثيرًا فعليًّا وتدفّقًا جيّدًا للزوّار. صفحة ذات علاقة بموقعك الإلكتروني أو المحتوى الذي تقدّمه. رابط (نصّي) غير خبيث، في موقع بارز من الصفحة، ونصّ الرابط ذو علاقة بالمحتوى. كيف أعرف أنّي أحقّق نتائج جيدة ما الذي يدفعنا إلى الاهتمام بهذا الأمر، وما الذي يدفعك إلى الاهتمام بتدفّق الزوّار إلى موقعك الإلكتروني؟ إن الهدف الرئيسي من موقعك الإلكتروني هو جلب العملاء سواء القدماء منهم أم المحتملين، ويمكنك التعرّف على كفاءة موقعك الإلكتروني في أداء وظيفته من خلال مراقبة وتحليل البيانات القادمة من زوّار الموقع. إذ يمكن من خلال مراقبة النتائج معرفة ما إذا كانت الجهود المبذولة مجدية أم لا، وتحديد المشاكل التي قد تتطلّب إجراء بعض التعديلات. راقب الترتيب على محرّكات البحاث يعد الترتيب حسب التهيئة لمحركات البحث مصدر الدخل الرئيسي لعدد كبير من المشاريع التجارية، ولكن البقاء في القمة يتطلبّ متابعة مستمرة لترتيب كلمتك المفتاحية ومدى مجاراتك لمنافسيك في هذا المجال. ويمكنك الاستعانة بالإضافة ManageWP للحصول على الكلمات المفتاحية الاحترافية ومعلومات عن المنافسين في مجال عملك. وفي الوقت نفسه ستتوفّر لدينا معلومات جيّدة يمكن الاستفادة منها في إجراء تحسينات إضافية على الموقع الإلكتروني وتقديم حزم صيانة موسّعة expanded maintenance packages لعملائنا. حلّل أعداد الزوّار في موقعك الإلكتروني يمكنك التعرف على مدى فاعلية التهيئة لمحركات البحث والجهود التي تبذلها في التسويق لموقعك الإلكتروني وذلك من خلال متابعة عدد الزوّار الذين يرتادون موقعك الإلكتروني شهريًّا، فإن كانت تحافظ على مستوى ثابت في تدفّق الزوّار فهذا يعني أنّ جهودك التسويقية غير فعّالة ولا تأتي بأي نتيجة تذكر. يمكنك الاستفادة من أدوات التحليل مثل Google Analytics لمشاهدة مصادر تدفق الزوّار في موقعك الإلكتروني، وهكذا يصبح لديك تصوّر كافٍ حول هذا الموضوع وستشخّص استراتيجية/قناة التسويق الأكثر فعّالية. وأبسط طريقة للقيام بذلك هي ربط حسابك في Google Analytics مع لوحة التحكم الخاصّة بموقعك الإلكتروني ومراقبة الزيارات من خلال Google Analytics على ManageWP. ويستحسن كذلك أن تجمع حسابات Google Analytics المختلفة في لوحة تحكّم واحدة، الأمر الذي سيسهّل عليك مراجعة الإحصاءات الخاصّة بكل موقع. الخلاصة تهيئة محركات البحث أمر ضروري بالنسبة لمشروعك التجاري لأن الناس يستخدمون محركات البحث للتعرّف على المنتجات وشرائها عبر الإنترنت. وبما أنّ المجتمع الإلكتروني يكبر يومًا بعد يوم، فلا يجدر بك تجاهل أهمية التهيئة لمحركات البحث في زيادة قاعدة عملائك أو زوّارك. وأنهي المقال بفكرة أخيرة: أصبحت التهيئة لمحركات البحث اليوم مرادفة لقابلية الرؤية، فمن دون إجراء التحسينات ودون وجود محتوى ذي جودة عالية فإن مشروعك التجاري سيكون غير مرئي في السوق الرقمي المعاصر. ترجمة - وبتصرّف - للمقال Why is SEO essential for your business? لصاحبه Marko Tanaskovic. حقوق الصورة البارزة محفوظة لـ Freepik
  13. أعترف بأنّي لا أمتلك خبرة كبيرة في مكتبة Webpacker الجديدة في إطار العمل Ruby on Rails، ولكنّي قرّرت الاعتماد على هذه المكتبة تمامًا والاستغناء كلّيًا عن مكتبة Sprockets للتعامل مع الأصول assets. وباعتباري أحد متّبعي مبدأ Convention Over Configuration فقد حاولت جاهدًا إيجاد الطريقة التي يمكن الاصطلاح عليها في تشييد تطبيق Webpacker. هذه المكتبة في أيامها الأولى لذا أظنّ أنّ فريق مطوري Rails لم يقوموا بهذا الأمر أيضًا، وأعتقد بأنّ مجتمع المطوّرين سيجد حلًّا لهذه المسألة قريبًا. على أي حال، إليك الطريقة التي اتبعتها في استبدال asset pipeline بـ Webpacker. إن كنت ترغب في العمل على مشروع جديد، فاستخدم الأمر: rails new blank --skip-sprockets --webpack ليتم إنشاء تطبيق Rails جديد مع الاستغناء عن مكتبة Sprockets وإضافة المكتبة Webpacker. أما لو كنت ترغب في إضافة Webpacker إلى مشروع قائم فعليك بمراجعة التوثيقات. بعد ذلك احذف بعض الجواهر gems والتي لم نعد بحاجة إليها من ملف Gemfile، وهي sass-rails، uglifier و coffee-rails. كذلك يمكنك التخلص من المجلد app/assets لأنّنا لم نعد بحاجة إليه بعد الآن. لنلق نظرة في البداية على محتويات ملف application.js الذي يتم إنشاؤه افتراضيًّا بواسطة Webpacker. /* eslint no-console:0 */ // This file is automatically compiled by Webpack, along with any other files // present in this directory. You're encouraged to place your actual application logic in // a relevant structure within app/javascript and only use these pack files to reference // that code so it'll be compiled. // // To reference this file, add <%= javascript_pack_tag 'application' %> to the appropriate // layout file, like app/views/layouts/application.html.erb console.log('Hello World from Webpacker') تشير التعليقات الواردة في هذا الملف إلى أن المجلد app/javascript/packs هو نقطة الولوج entry point إلى الحزم المستخدمة في التطبيق، وأنّ عليك وضع التطبيق الحقيقي في المجلد app/javascript. ترتيب الملفّات والمجلّدات لقد نظّمت تطبيق Webpacker الخاصّ بي كما هو موضح أدناه، والتطبيق يحمل اسم blog. سترى أنّي قد أدرجت تطبيق JavaScript الحقيقي في المجلد app/javascript/blog بدلًا من app/javascript ولم أقم بذلك اعتباطًا. أولًا: يعني هذا أن بمقدوري إضافة العديد من التطبيقات إلى المشروع الواحد وحسب الحاجة، بدلًا من تكديس جميع الشيفرات جنبًا إلى جنب. ثانيًا: ستتيح لي هذه الطريقة امتلاك نقطة ولوج حقيقية للحزم وهذا ما سأوضّحه الآن. blog +-- app | +-- javascript | | +-- blog | | | +-- fonts | | | +-- images | | | +-- styles | | | +-- index.js | | +-- packs | | | +-- application.js لنلق نظرة الآن إلى ملف app/javascript/packs/application.js وهو نقطة الولوج إلى حزمتي، وهو ملفّ بسيط للغاية: import 'blog'; سيتم استيراد التطبيق وتشغيل الملف app/javascript/blog/index.js والذي سيصبح نقطة الولوج إلى تطبيق JavaScript الخاصّ بي. بهذه الطريقة أحافظ على نقطة الولوج بسيطة قدر الإمكان أما ما تبقى من الشيفرة فيكون ضمن التطبيق. جدير بالذكر كذلك أنّك لست ملزمًا بتسمية المجلد - والملفّ - باسم blog، بل يمكنك استخدام أي اسم تشاء، ولكنّني توخيت تبسيط الأمور بجعل اسم المجلد مطابقًا لاسم تطبيق Rails. والآن سنستخدم javascript_pack_tag للإشارة إلى تطبيقنا. javascript_pack_tag 'application', 'data-turbolinks-track': 'reload' مرحلة التطوير عند العمل في بيئة التطوير Development استخدم الأمر bin/webpack-dev-server وستتمّ مراقبة التطبيق وإعادة بنائه عند الحاجة، وإرسال التعديلات إلى المتصفّح. وبعد أن يصبح التطبيق جاهزًا للتجميع Compile يمكن استدعاء الأمر bin/webpack أو rails assets:precompile، ولكن سيتولى الخادوم هذه المهمّة على الأرجح. مكتبتا Turbolinks وRails UJS إن كنت ستستخدم Turbolinks و Rails UJS في تطبيقك فعليك إعداد هاتين المكتبتين وتشغيلهما. من السهل استدعاء المكتبتين بواسطة الأمر //= require في حال كنت تستخدم asset pipline ولكن عند استخدام هاتين المكتبتين كوحدات فالأمر مختلف قليلًا. في البداية علينا تثبيت المكتبتين: yarn add rails-ujs turbolinks بعد ذلك علينا استيراد المكتبتين وتشغيلهما في ملف app/javascript/blog/index.js: import Rails from 'rails-ujs'; import Turbolinks from 'turbolinks'; Rails.start(); Turbolinks.start(); كما تلاحظ فقد اتبعنا نفس الأسلوب في استدعاء كلتا المكتبتين وتشغيلهما. متغيرات البيئة Environment Variables يمكن الوصول إلى متغيرات البيئة عبر الشيفرات الخاصة بنا بعد تجميعها. عادة ما أضيف اللاحقة .erb إلى اسم الملف ثم أنفّذ شيئًا مماثلًا لهذا: <%= ENV['X_ENV_VAR'] %> ولكن هناك طريقة أفضل، إذ يمكن تهجير المتغيرات إلى process.env وكما يلي: export const STRIPE_API_KEY = process.env.STRIPE_API_KEY; أوراق الأنماط Stylesheets يمكن وبكل بساطة استيراد ملفات CSS أو Sass التي ترغب باستخدامها في التطبيق. لقد حدّدت الملف app/javascript/blog/styles/app.scss كنقطة ولوج Sass وبهذا أبقي جميع الملفات في مجلد styles، وتصبح عملية استيرادها إلى التطبيق أمرًا سهلًا للغاية: import './styles/app.scss'; يمكن استخدام المحرّف ~ مع import وستبدأ عملية البحث عن الملف من المجلد node_modules، فلو أردت مثلًا استيراد مكتبة Bootstrap إلى التطبيق يمكنك استخدام الشيفرة التالية: @import '~bootstrap/scss/bootstrap'; الصور لا تختلف الصور عن أوراق الأنماط في شيء، إذ يجب استيرادها في البداية لتتمكن من استخدامها في التطبيق. عادة ما أضع الصور في مجلد app/javascript/blog/images ثم أنشئ ملفًّا باسم index.js في نفس المجلد وظيفته استيراد جميع الصور في المجلد. فعلى سبيل المثال: import './logo.svg'; import './menu-open.svg'; import './menu-close.svg'; عليك الانتباه إلى أنّ هذه الطريقة لن تُضمّن الصور في أوراق الأنماط، وإنما تدفعها إلى Webpacker لتكون متاحة للاستخدام في التطبيق. ويمكنك حينئذٍ استخدام الدالة المساعدة asset_pack_path في العرض للإشارة إلى هذه الملفات. فلو أردت مثلًا استخدام إحدى هذه الصور: = image_tag asset_pack_path('logo.svg') إضافة إلى ذلك يمكنك الإشارة إلى الصور في CSS أو Sass وسيتلقّفها Webpacker بصورة تلقائية. وبصورة عامة يكون مسار الجذر نقطة الولوج الخاصّة بأوراق الأنماط لذا لن تكون بحاجة إلى استخدام المسارات المطلقة. ختامًا كما شاهدت فإن الأمر يتطلب الكثير من العمل، وهذا هو الأسلوب الذي أتبعه في استخدام Webpacker الآن. حاولت البحث عن مقالات تعنى بتفصيل طريقة استخدام Webpacker ولكنّي لم أجد شيئًا يذكر في الوقت الحاضر. أنا متحمّس جدًّا لمعرفة طريقة الاستخدام القياسية لهذه المكتبة هذا في حال تمّ تحديدها في المستقبل. ترجمة - وبتصرّف - للمقال Replacing Rails Asset Pipeline with Webpacker لصاحبه Dwight Conrad Watson.
  14. Composer هو أداة لإدارة الاعتماديات في لغة PHP، تخيل أنّك تعمل على مشروع يتضمن العديد من الاعتماديات التابعة لمشاريع أو مكتبات أخرى. سيدير Composer بالطرق التالية: تحميل مكتبة الاعتمادية من مستودعاتها إلى مشروعك بصورة تلقائية. يمكنك وبكلّ سهولة تحديث مكتبتك عند ظهور إصدار جديد منها. عند تحميل مكتبة الاعتمادية يتحقّق composer من المتطلبات الدنيا للخادوم. سينشئ Composer ملف autoloader.php لجميع المكتبات المحمّلة وسيحمّل الاعتمادية كاملةً في المشروع الذي تعمل عليه. ماذا سيحصل إن لم تستخدم Composer؟ ستضطرّ إلى تحميل مكتبة الاعتمادية يدويًّا. يجب عليك التحقّق من الإصدارات الجديدة للمكتبات دوريًّا، وتحميل الملفات إلى المشروع يدويًّا. يجب عليك تحميل جميع المكتبات إلى مشروعك باستخدام دالتي require أو include. إليك المثال التالي لتوضيح ما سبق: لديك مشروع تعمل عليه باستخدام إطار عمل Cakephp أو Laravel، وترغب في إضافة خاصية إرسال الرسائل إلكترونية إلى المشروع وتحتاج إلى اتصال من نوع SMTP. ستقوم حينها بتحميل إحدى المكتبات المتخصّصة في هذا المجال مثل Phpmailer أو Swiftmailer. إن استخدمت composer للحصول على هذا المكتبات، فسيكون بميسورك تحميل المكتبة المطلوبة مباشرة إلى مجلد vendor ضمن المشروع. وإن حصلت هذه المكتبة على تحديث جديد، يكفي أن تنفّذ أمرًا واحدًا في سطر الأوامر، ولن تكون بحاجة إلى التحقّق ممّا إذا كان التحديث متوافقًا مع الإصدار 5.4 أو 5.3 من php. سيتّضح الأمر أكثر فأكثر من خلال الأمثلة التالية. كيف يتم تثبيت Composer في النظام قبل تثبيت composer يجب التحقّق من أنّك تعمل على الإصدار 5.4 وما بعده من لغة PHP. إن كنت من مستخدمي نظام ويندوز فيمكنك تحميل الملف التنفيذي الخاص بتثبيت Composer وذلك من الرابط: https://getcomposer.org/، وتنصيب Composer في نفس المجلد الذي قمت بتثبيت php.exe فيه. (C:\wamp\bin\php\php5.5.12 مثلاً). أما مستخدمو نظامي Linux و Mac فيمكنهم فتح الطرفية وكتابة الأمر التالي فيها: curl -sS https://getcomposer.org/installer | php سيقوم هذا الأمر بتحميل ملف composer.phar (phar تعني php archive) بواسطة الأداة curl، وللوصول إلى composer من أي مكان في حاسوبك يجب عليك نقل هذا الملف إلى المجلد /usr/bin/composer، وذلك بتنفيذ الأمر التالي في الطرفية: sudo mv composer.phar /usr/bin/composer للتحقق من وجود Composer يكفي الدخول إلى سطر الأوامر في ويندوز أو الطرفية في Linux و Mac وكتابة كلمة composer والضغط على زر الإدخال Enter. إن كان Composer مثبّتًا في جهازك ستظهر شاشة الترحيب التالية إضافة إلى جميع ا لأوامر المستخدمة في composer. تطبيق عملي لاستخدام مكتبة Composer سيبحث Composer عن الملف composer.json حيث سندرج جميع الاعتماديات التي نحتاج إليها في المشروع. لننشئ مجلّدًا جديدًا بواسطة الأمر التالي: mkdir composer_example ادخل إلى المجلد: cd composer_example أنشئ ملف composer.json هنا، وأضف إليه ما يلي: { "require": { "jdorn/sql-formatter": "1.3.*@dev" } } هنا jdorn هو اسم صاحب الحزمة sql-formatter التي نرغب في تثبيتها ضمن المشروع. ولكن قد تتسائل من أين سيأتي Composer بهذه الحزمة. في الواقع هناك موقع إلكتروني آخر هو Packagist يتضمّن جميع المكتبات الشائعة ويمكن تصفّحها من خلال الموقع. مكتبة sql-formatter عبارة عن صنف php صغير الحجم يعمل على تنسيق عبارات SQL حيث يضبط الإزاحات في بداية العبارة تلقائيًا كما يدعم تلوين الكلمات المفتاحية. بعد أن أعددنا ملف composer.json يمكننا تحميل وتنصيب الملفات المطلوبة في مجلد المشروع بواسطة الأمر: composer install سيتم تحميل جميع الملفات المطلوبة ومن ضمنها ملفات autoload إلى المجلد composer_example/vendor. والآن أنشئ ملفًّا باسم index.php في المجلد composer_example واجلب فيه الملف autoload.php باستخدام الدالة require وبذلك سيتمّ تحميل جميع الاعتماديات في هذا الملف. إليك المثال التالي: <?php require "vendor/autoload.php"; $query = "SELECT count(*),`Column1`,`Testing`, `Testing Three` FROM `Table1` WHERE Column1 = 'testing' AND ( (`Column2` = `Column3` OR Column4 >= NOW()) ) GROUP BY Column1 ORDER BY Column3 DESC LIMIT 5,10"; echo SqlFormatter::format($query); ?> لاحظ مدى سهولة وسرعة التعامل مع الاعتماديات بواسطة Composer. لننشئ مشروعًا آخر لنفترض أننا نرغب في إضافة إطار عمل Codeigniter بواسطة Composer. لن نستخدم هذه المرّة الأمر composer install بل سنستخدم الأمر composer create-project لإنشاء مشروع جديد. توجّه إلى موقع Packagist وابحث عن مكتبة Codeigniter، ثم حمّل نسخة من إطار العمل إلى مجلد المشروع الذي تعمل عليه: composer create-project codeigniter/framework مجلد المشروع بعد اكتمال العملية ستجد ملف composer.json في مجلد المشروع، ويمكن إضافة المزيد من الاعتماديات إلى مشروعك بواسطة هذا الملف. لنفترض أنّك ترغب في استخدام حزمة sql-formatter في مشروعك هذا. توجّه إلى ملف composer.json وعدّله ليصبح بالصورة التالية: { "description" : "A way to install CodeIgniter via composer", "name" : "rogeriopradoj/codeigniter", "license": "OSL-3.0", "require": { "php": ">=5.2.4", "jdorn/sql-formatter": "1.3.*@dev" } } ثمّ حدّث الاعتماديات بواسطة الأمر: composer update والآن إن كنت ترغب في رفع هذا المشروع إلى Github أو مشاركته مع أحد الأصدقاء، لن تكون بحاجة إلى إرسال مجلد vendor، بل يكفي أن ترسل الملف composer.json وسيكون بميسور صديقك تحميل جميع الاعتماديات المطلوبة والمستخدمة في المشروع. عليك بتجربة composer، إذ تستخدمه معظم أطر عمل php المعروفة مثل Laravel، Symfony 2 و Yii إضافة إلى بعض حزم php الرائعة التابعة لـ Phpleague. فماذا تنتظر إذًا؟ ترجمة - وبتصرّف - للمقال Composer easy tutorial – php dependency management tool لصاحبه Arkaprava Majumder.
  15. تقدّم المواصفات الجديدة في CSS3 محدّدين Selector مفيدين للغاية هما :valid و :invalid وهي أصناف زائفة pseudo-class يمكن استخدامها مع عناصر الإدخال الخاصة بالاستمارات. لنفترض أن لديك عنصر إدخال تتحقّق من خلاله فيما إذا كان ما أدخله المستخدم صحيحًا أم خاطئًا. لإجراء عملية التحقق ستحتاج إلى إضافة خاصية HTML5 required إلى الوسم الخاص بعنصر الإدخال، وبهذا يمكن الاستفادة من المحدّدين :valid/:invalid لتغيير لون حقل الإدخال ليعرف المستخدم من خلال ذلك أنّ ما أدخله صحيح أو خاطئ. فعلى سبيل المثال يتحول مربع الإدخال إلى اللون الأخضر عندما تكون العبارة صحيحة، وكما يلي: input:required { background: #AAA; } input:valid { background: #0A0; } input:invalid { background: #A00; } سننشئ في هذا الدرس استمارة بنمط Material وسننبّه المستخدم على صحة البيانات المدخلة في الاستمارة من خلال الصنفين الزائفين :valid و :invalid. تتألف الاستمارة من مربع نصّي وحيد وقد أحطنا عنصري input[type="text"] وlabel بعنصر div يحمل المحدّد .form-control من إطار عمل Bootstrap. لدينا أيضًا شريط سيتغير لونه بين الأخضر والأحمر للدلالة على صحة المعلومات المدخلة من عدمها. <div class="form-control"> <input type="text" required /> <span class="bar"></span> <label for="First Name">First Name</label> </div> في البداية سنزيل جميع الحدود المحيطة بمربّع النص باستثناء الحدّ السفلي وسنلوّنه باللون الأزرق ليكون متناسقًا مع نمط التصميم Material. .form-control { position:relative; margin-top:40px; width:400px; } input { border:none; border-bottom:3px solid #34495e; padding:10px 0; width:400px; display:block; font-size:16px; } سيؤدي العنصر label دور ماسك مكان placeholder، لذا سنجعل موقعه مطلقًا مع تعيين المسافة اليسرى والعلوية المناسبة، ليبدو العنصر بهيئة ماسك مكان اعتيادي. label { position:absolute; top:8px; left:5px; font-size:16px; color:#333; transistion: 0.3s ease all; -webkit-transition:0.3s ease all; } والآن عندما يضغط المستخدم أو يجعل التركيز على مربّع النص سنقوم بإلغاء الحدّ السفلي، وسنغير موقع ماسك المكان ليصبح فوق مربع النص ليبدو كـ label. input:focus{ border:none; outline:none; } سيبقى الـ label فوق مربع النص إلى أن يجعل المستخدم التركيز على مربّع النص ويضيف إليه أي معلومات صحيحة. input:focus ~ label, .form-control input:valid ~ label { top:-10px; font-size:12px; left:2px; color:#111; } لن يظهر المحدّد .bar بصورة تلقائية، بمعنى أن عرضه سيكون صفرًا، وإن قمنا بالتركيز على مربع النص فإن عرض المحدّد .bar سيزداد. كما ستلاحظ فقد حدّدنا العرض ضمن الصنفين الكاذبين (:after و :before) حيث سيزداد العرض 50% لكل عنصر زائف، بمعنى أن الزيادة الكلية ستكون 100%، وهكذا سنحصل على تأثير توسّع جميل. .bar:before, .bar:after { content:''; height:3px; width:0; bottom:1px; position:absolute; transition:0.2s ease all; -moz-transition:0.2s ease all; -webkit-transition:0.2s ease all; } .bar:before { left:50%; } .bar:after { right:50%; } input:focus ~ .bar:before, input:focus ~ .bar:after { width:50%; } سنغيّر الآن لون خلفية الشريط حسب صحة أو عدم صحة البيانات المدخلة، وذلك باستخدام الصنفين الزائفين :valid و :invalid. input:valid ~ .bar:before, input:valid ~ .bar:after{ background:#2ecc71; } input:invalid ~ .bar:before, input:invalid ~ .bar:after{ background:#e74c3c; } تعمل هذه الطريقة على متصفحات (+Chrome(10 و (+Firefox(4 و (+Safari(5 و (+Opera(10 و (+IE(10، ولكن لا تعمل على الإصدار التاسع وما دونه من متصفح IE. وجدير بالذكر أنّه لن يتم التحقّق من صحة البيانات بأي شكل من الأشكال، ويمكن استخدام هذه الطريقة في مجال تجربة المستخدم فقط. ترجمة - وبتصرّف - للمقال Form validation in pure css لصاحبه Arkaprava Majumder.
×
×
  • أضف...