البحث في الموقع
المحتوى عن 'رفع'.
-
إن استراتيجية التسعير المتعلقة بالتجارة الإلكترونية والتي سأشاركها الآن قد أحدثت تغييرًا كبيرًا في متجري. ففي سنتي الثانية في مجال الأعمال التجارية، كنت قد حققت ما يكفي من الدخل الإضافي لتوظيف أول موظف بدوام كامل بحيث أستطيع العمل على مهام بمستوى أعلى، كما أستطيع السفر بحرية ولعدة أشهر أيضًا. كما أنها في الآونة الأخيرة قد عززت الربحية في متجري مرة أخرى. وفي كلتا الحالتين، فقد استغرق الأمر أقل من أسبوع لتنفيذ الاستراتيجية، لتزيد الربحية الإجمالية لأعمالي إلى حوالي 30٪. فما هي هذه الاستراتيجية؟ إنها: رفع الأسعار استراتيجيًا. قد يكون تسعير المنتج أقوى أداة يمكنك استخدامها فيما يتعلق بتحسين دخلك الصافي. ففي حين أن بعض التقنيات مثل تحسين محركات البحث SEO وتحسين معدل التحويل يعتبر أمرًا مكلفًا ويمكن أن يستغرق أشهر (أو حتى سنوات) حتى يتم تنفيذها بشكل جيد، فإنه بإمكانك أن تقوم بضبط الأسعار وقياس النتيجة على دخلك الصافي مباشرة. وتعتبر تلك أداة قوية بالفعل لكنا كأصحاب عمل لا نقوم بتجربتها بالشكل الكافي. فيما يلي دليل يتضمن 4 خطوات يجب اتخاذها لتقوم بتجربة التسعير الخاصة بك. إن كنت مثلي، عليك أن تكون قادرًا على جمع الأرباح غير المحققة والتي كنت قد تركتها قبل ذلك. الخطوة 1: قم بتحديد المنتجات الأعلى مبيعًا إن كنت تمثل شركة للتجارة الإلكترونية مع وحدتين فقط لحفظ المنتج SKU، فإن هذا الجزء سيكون سهلًا بالنسبة لك. ولكن للأسف فإن العديد من المتاجر تمتلك المئات أو الآلاف من المنتجات. ولعل محاولتك للقيام باختبار للسعر على مثل هذا العدد الكبير من المنتجات سيكون ضربًا من الجنون. وعوضًا عن ذلك، يمكنك الانسحاب من قاعدة 80/20 والتركيز على 25-50 من المنتجات الأكثر شعبية لديك. بالنسبة لمعظم المخازن، يجب أن يمثل ذلك 50٪ تقريبًا أو أكثر من الأرباح. إن تحسين تسعير هذه العناصر سيمنحك أفضل النتائج الممكنة من ناحية استثمار الوقت. ويعتبر تحليلات جوجل Google Analytics أفضل موقع للقيام بذلك. اذهب إلى التحويلات -> التجارة الإلكترونية -> صفحة أداء المنتج وستحصل على تقرير منسق لأهم عناصر البيع، سواء من ناحية الإيرادات أو الكمية. الخطوة 2: ارفع أسعارك قد تكون الخطوة الثانية أصعب: حيث تعني في الواقع اتخاذ الخطوة الفعلية لرفع الأسعار. أعتقد أن هناك مخاوف عميقة لدى جميع رواد الأعمال، وهي أنه في حال قمنا برفع أسعارنا فإن العملاء سيبدؤون بالتخلي عنا، وبالتالي ستنهار شركتنا وسنصل لحافة التسول. إن هذا أمر طبيعي تمامًا، ولكنه في الوقت ذاته غير منطقي تمامًا. في أسوأ السيناريوهات (على افتراض أنك لا تعمل مثل نيتفليكس Netflix وتقوم بعمل غير متقن)، سيكون لديك فترة قصيرة من الأرباح دون الحد الأمثل. إن لم تعمل التجربة بعد ذلك، يمكنك العودة إلى الأسعار القديمة، ومن المؤكد أنك ستعود تقريبًا مرة أخرى إلى حيث بدأت. إنك تخاطر ببضعة أسابيع / أشهر من صافي الدخل مقابل مستقبل طويل من الربحية العالية. وفي جميع الحالات تقريبًا، ستكون بمثابة رهان جيد يستحق المشاركة به. الآن بعد أن تم تحفيزك عاطفيًا للقيام بالتغيير، إليك كيفية القيام بذلك: أولًا، تأكد من تسجيل جميع الأسعار القديمة قبل أن تقوم بتغيير كل شيء. فمن الجيد دائمًا أن يكون لديك نسخة احتياطية، لتكون بمتناول يدك عندما تكون بحاجة للعودة إلى الأسعار القديمة في حال فشل التجربة. لقد وجدت أن أسهل طريقة للقيام بذلك هي عن طريق تصدير ملف بامتداد.csv لجميع منتجاتك. إذا كنت تقوم باستخدامShopify أو Magento، فإن كلاهما يوفران القدرة على القيام بذلك. بعد ذلك، عليك أن تقوم بالغوص ضمن منتجاتك وتبدأ بزيادة الأسعار. إن هذا الفن هو بمثابة العلم، ولكن هناك بعض القواعد: فكر تدريجيًا لقد وجدت بأن رفع الأسعار بنسبة 5٪ إلى 15٪ هي قاعدة جيدة لارتفاع الأسعار. إنك تريد شيئًا ما ليقوم بإحداث فرق على مستوى الربحية، ولكنك أيضًا لا ترغب بالبدء بقياس العملاء أو تغيير جذري للكيفية التي تنظر بها إلى السوق. من السهل حقًا القيام بذلك. عليك أن تكون أكثر عدوانية مع المنتجات الأرخص ثمنًا استنادًا إلى النسبة المئوية، قم بزيادة أسعار المنتجات الأرخص ثمنًا بشكل عدواني لأن الزيادة المطلقة للدولارات ستكون أقل وضوحًا. قم بزيادة 50٪ على المنتج الذي سعره 10 إضافية بمعظم الأحيان ليست أمرًا سيئًا. ومع ذلك، قم بتجربة رفع الأسعار على المنتج الذي قيمته 100 $ (أو ما يعادله بالعملة المحلية) بنسبة 50٪، عندها سيكون هناك احتمال أقل ليقوم عملاؤك بالاستمرار في الشراء. عليك أن تدرك مكانك في السوق هنا يكمن الفن في التسعير. إن كان لديك موقع رائع وجيد للغاية، وكانت أسعارك حاليًا أقل من أسعار السوق على معظم المنتجات لديك يمكنك حينها القيام بالتسعير ليكون أعلى قليلًا. ومع ذلك، إن كنت ترى النمط القديم لموقع Zencart منذ عام 2006 وكيف أن أسعاره مرتفعة مقارنة مع أسعار السوق فإنك يجب أن تخفف من تلك الحدة. عليك أن تمضي بعض الوقت بالتفكير في حجم المنتجات التي تباع على مواقع متخصصة أخرى، ويجب عليك أيضًا أن تكون صادقًا مع نفسك بشأن المهنية والثقة التي يتمتع بها موقعك. أعد التحقيق في أسعار منتجاتك في حين أني متأكد من أنك تريد أن تكون الزيادة في أسعارك أعلى من الزيادة في أسعار المورّد، فإني أميل إلى جعلها متفاوتة من وقت لآخر. سأرى الفاتورة لأدرك أننا حققنا نسبة ضئيلة من الهامش الذي نسبته 5٪ على المنتج ولعدة أشهر وذلك بسبب فشلنا في زيادة الأسعار عندما ارتفعت التكاليف. إن أفضل وقت للبحث في تكاليف المنتج هو الوقت الذي تتم فيه تجربة التسعير. وفي الواقع، إني أوصي باستخدام جدول بيانات يضم ثلاثة أعمدة: السعر الحالي، التكلفة، والسعر الجديد. فملاحظة هذه العناصر مع بعضها سيكون مفيدًا حقًا عندما تريد تحديد السعر الجديد، لأنك ستضمن أنك لا تبيع بسعر قريب جدًا من التكلفة. فكر في أمازون، ولكن لا تدعه يخيفك سيكون أمازون أكبر منافس لك على السعر، لكن هناك فرصة جيدة وهي أن تقوم بشحن المنتجات بكميات أكبر منهم وذلك قبل ارتفاع أسعارك. فهل يعني ذلك أنه يجب أن تستسلم؟ بالطبع لا، لكن فقط ضع تلك الأمور بعين الاعتبار. كلما كانت المنتجات أرخص، قلت أهمية مطابقة أسعارها مع سعر الأمازون. ويعتبر هذا صحيحًا بشكل خاص في حال كانت تفاصيل المنتج المعروضة على Amazon.com نادرة. حيث يعتبر ذلك هو المكان الذي يتمتع بصفحة مميزة مع مقاطع فيديو مذهلة عن المنتج مع مواصفاته التي يمكن أن تساعدك على الابتعاد عن الشحن الذي يحتاج لتكلفة أعلى. حاول أيضًا معرفة فيما إذا كانت المنتجات مؤهلة وما هو عدد المراجعات التي كتبت عنها. إذا كان هناك عدد قليل من المراجعات وكان العملاء غير قادرين على شحنها مجانًا خلال 24 ساعة، فإنك بذلك تكون قد حصلت على مساحة أكبر للمنافسة فأمازون كبديل ليس مغريًا تمامًا. قم باستخدام فترات اختبار قابلة للمقارنة يجب عليك أن تكون قادرًا على استكمال جميع البحوث وتنفيذها ضمن أقل من أسبوع، إن لم يكن بيوم أو يومين. وعندما تنتهي من كل ذلك قم بتحديث أسعارك وفق مخزونك الحالي لبدء التجربة. على الرغم من أن ذلك غير مطلوب، فإني أرغب ببدء تجاربي بما يوافق بداية الشهر أو بيوم قريب منه. حيث سيؤدي ذلك إلى تنسيق بيانات التجربة مع بياناتك المالية الشهرية وذلك لمقارنتها بسهولة. يمكنك أيضًا التحكم بالتغييرات الشهرية (على الأقل بشكل خفيف) من أسبوع لآخر مثل الأشخاص الذين يتقاضون رواتبهم، حيث أنهم يتمتعون باحتمال أكبر للتسوق في أوقات معينة، وغير ذلك من التغييرات. وسنتابع في المقال القادم الخطوتين الأخيرتين وهما عن فهم الحالة المثلى التي تسعى إليها وقياس النتائج. ترجمة-وبتصرّف- للمقال The Pricing Strategy That Made Us 30% More Money لصاحبه Andrew Youderian حقوق الصورة البارزة محفوظة لـ Freepik
-
في الدروس السابقة قمنا بدراسة الأدوات القياسية والتي لابد من استخدامها في معظم تطبيقات ASP.Net، سنتناول في الدروس القادمة أدوات تحكم أكثر تخصصا وتعرف مجموعة الأدوات هذه باسم Rich controls. في هذا الدرس ستتعلم كيف تسمح للمتصفحين بأن يرفعوا ملفاتهم على الموقع، كأن يقوموا مثلا برفع صور، ملفات فيديو ... إلخ. رفع الملفات إلى الموقع نستخدم أداة التحكم FileUpload لرفع الملفات إلى الموقع، ونقوم بتحديد المكان الذي سيتم تخزين ملفات المستخدمين فيه، إما مجلد داخل الموقع أو ضمن قاعدة بيانات الموقع وسنستعرض كلا الحالتين. خصائص أداة التحكم FileUpload Enabled: تفعيل أو إلغاء تفعيل هذه الأداة. FileBytes: للحصول على محتويات الملف كمصفوفة بايتات. FileContent: للحصول على محتويات الملف كمجرى stream. FileName: الحصول على اسم الملف. HasFile: تعيد True عندما يتم رفع الملف. PostedFile: تعيد الملف المرفوع مغلف بغرض من الصف HttpPostedFile. كما أن أداة التحكم FileUpload تدعم الطرائق التالية: Focus: تسمح بوضع التركيز على هذه الأداة. SaveAs: تقوم بتخزين الملف (المراد رفعه) على الموقع. تقوم الخاصية PostedFile بتغليف الملف المرفوع بغرض HttpPostedFile، هذا الأمر يسمح بالحصول على معلومات إضافية حول الملف. خصائص الصف HttpPostedFile ContentLenght: لمعرفة حجم الملف بالبايتات. ContentType: لمعرفة نوع الملف ( اللاحقة). FileName: لمعرفة اسم الملف. InputStream: الحصول على الملف كمجرى stream. كما أن الصف HttpPostedFile يدعم الطريقة SaveAs والتي تقوم بتخزين الملف على الموقع. لاحظ أن الصف HttpPostedFile يقدم بعض الخصائص المتوفرة مسبقا مع أداة التحكم FileUpload والتي يمكن التعامل معها دون الحاجة للصف HttpPostedFile، على سبيل المثال للحصول على اسم الملف يمكن اتباع أحد الأسلوبين: FileUpload.FileName HttpPostedFile.FileName كما أن الطريقة SaveAs موجودة في الصف HttpPostedFile على الرغم من توافرها مع أداة التحكم FileUpload بشكل صريح. مثال: أنشئ صفحة جديدة وأضف عليها الأدوات FileUpload1 ،Button1 ،Label1. أنشئ مجلد جديد داخل ملفات الموقع باسم uploads لنقوم برفع الملفات إليه، في حدث الضغط على الزر اكتب الكود التالي: كود #C protected void Button1_Click(object sender, EventArgs e) { try { if (FileUpload1.HasFile) { string path = "~/uploads/" + FileUpload1.FileName; FileUpload1.SaveAs(MapPath(path)); Label1.Text = "File Uploaded successfuly..."; } } catch (Exception ex) { } } كود VB Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click If (FileUpload1.HasFile) Then Dim filePath As String = "~/uploads/" & FileUpload1.FileName FileUpload1.SaveAs(MapPath(filePath)) End If End Sub كود الصفحة يجب أن يكون كالتالي: كود ASP.net <div> <asp:FileUpload ID="FileUpload1" runat="server" /> <br /> <asp:Button ID="Button1" runat="server" Text="Upload" onclick="Button1_Click" /> <br /> <asp:Label ID="Label1" runat="server" Text=""/> </div> نفذ التطبيق السابق وحاول رفع ملف ما ( صورة مثلا)، أغلق التنفيذ. يجب أن يكون الملف قد أضيف للمجلد Upload، إن لم تره اضغط على تحديث ملفات الموقع كالتالي: في المثال السابق يستطيع المستخدم أن يرفع أي نوع كان من الملفات، سنقوم في المثال التالي بتحديد الأنماط التي نسمح للمستخدم بأن يقوم برفعها ( فقط بعض أنواع الصور). مثال: أنشئ صفحة جديدة وأضف عليها الأدوات FileUpload1 ،Button1 ،Label1. أنشئ مجلد جديد داخل ملفات الموقع باسم uploads لنقوم برفع الملفات إليه. في حدث الضغط على الزر اكتب الكود التالي: كود #C protected void Button1_Click(object sender, EventArgs e) { try { if (FileUpload1.HasFile) { if (CheckFileType(FileUpload1.FileName)) { string path = "~/uploads/" + FileUpload1.FileName; FileUpload1.SaveAs(MapPath(path)); Label1.Text = "File Uploaded successfuly..."; } } } catch (Exception ex) { } } كود VB Protected Sub Button1_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button1.Click If (FileUpload1.HasFile) Then If (CheckFileType(FileUpload1.FileName)) Then Dim filePath As String = "~/uploads/" & FileUpload1.FileName FileUpload1.SaveAs(MapPath(filePath)) End If End If End Sub قم باستدعاء فضاء الأسماء الخاص بالدخل والخرج IO، حيث نضيف الكود التالي أعلى الصفحة: كود #C using System.IO; كود VB Imports System.IO أما الدالة CheckFileType المسؤولة عن فحص نوع الملف فهي: كود #C bool CheckFileType(string fileName) { string ext = Path.GetExtension(fileName); switch (ext.ToLower()) { case ".gif": return true; case ".png": return true; case ".jpg": return true; case ".jpeg": return true; default: return false; } } كود VB Function CheckFileType(ByVal fileName As String) As Boolean Dim ext As String = Path.GetExtension(fileName) Select Case ext.ToLower() Case ".gif" Return True Case ".png" Return True Case ".jpg" Return True Case ".jpeg" Return True Case Else Return False End Select End Function كود الصفحة السابقة: كود ASP.net <div> <asp:FileUpload ID="FileUpload1" runat="server" /> <br /> <asp:Button ID="Button1" runat="server" Text="Upload" onclick="Button1_Click" /> <br /> <asp:Label ID="Label1" runat="server" Text=""/> </div> نفذ التطبيق السابق وحاول أن ترفع ملف ما مغاير للأنواع المحددة، ستلاحظ عدم رفع الملف، أعد التجربة مع أحد أنواع الصور السابقة لترى قبول عملية الرفع. رفع الملفات إلى قاعدة بيانات حيث نقوم بتخزين الملفات في قاعدة بيانات عوضا عن مجلد عادي، هذا الأسلوب يسبب كبر هائل بحجم قاعدة البيانات وبالتالي صعوبة وبطء في نقلها والتعامل معها، كما أننا نحتاج لتحويل الملفات إلى بيانات ثنائية (0,1) لنتمكن من تخزينها في الجدول، الأسلوب الأفضل والمتبع في المواقع هو رفع الملفات إلى مجلد عادي وتخزين أسماء الملفات المرفوعة ضمن قاعدة البيانات مع تخزين معلومات أخرى عنها كتاريخ الرفع مثلا. على العموم لن ندخل بهذه التفاصيل الآن على اعتبار أننا لم نتطرق لموضوع قواعد البيانات، سيكون لنا عودة لمناقشة كيفية رفع الملفات بأسلوب احترافي في الدروس المتقدمة. ملاحظة: يتم قبول رفع الملفات ذات الأحجام أصغر من 4 ميغابايت ( عد للمثال الأول وحاول رفع ملف أكبر من هذا الحجم لترى عدم قبول العملية )، ولتغيير الحجم الأقصى المسموح به لكل ملف، نفتح الملف Web.config ونضيف كود السطر الرابع: كود XML <configuration> <system.web> <compilation debug="true" targetFramework="4.0"/> <httpRuntime maxRequestLength="10240"/> </system.web> </configuration> حيث تم تحديد الحجم الأعظمي بـ 10240 كيلو بايت ( أي 10 ميغا بايت ).