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

Adnane Kadri

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

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

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

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

    52

كل منشورات العضو Adnane Kadri

  1. السبب وراء هاته الفكرة ليس واضحا، ولكن كون المعامل الثاني الذي يستقبله التابع group عبارة عن شيفرة تنفذ executable فسيمكنك بنفس المنطق تحقيق ذلك عن طريق تعريف كامل مساراتك بشكل منفصل وحقنها كمعامل ثان في كل تعريف للنطاقين الفرعين، يكون ذلك كـ: $my_routes = function() { Route::get('/home', HomeController::class); Route::get('/admin', AdminController::class); }; Route::group(array('domain' => 'app.example.com'), $my_routes); Route::group(array('domain' => 'dashboard.example.com'), $my_routes);
  2. ثانيتان كمعامل للمهلة setTimeout هي 2000 معبرة عن 2000 ميلي ثانية. فيما يلي الصيغة العامة لاستعمال هاته الوظيفة: const myTimeout = setTimeout(myFunction, 2000); function myFunction() { // اي شيفرة هنا // لمحو المهلة الزمنية clearTimeout(myTimeout); } فان كانت الشيفرة الخاصة باخفاء عنصر ما مظهر فعلا هي ما كالتالي: function hideElement() { var el = document.querySelector('#my-element-id'); el.style.display = 'none'; } فان استدعاءها خلال مهلة زمنية هو ما سيكون كالتالي: const myTimeout = setTimeout(hideElement, 2000); function hideElement() { var el = document.querySelector('#my-element-id'); el.style.display = 'none'; // لمحو المهلة الزمنية clearTimeout(myTimeout); } تعرف أكثر عن الجدولة: المهلة setTimeout والفترة setInterval في جافاسكربت
  3. بالتأكيد فإنه توجد هنالك فروقات جوهرية بين الاثنين، نذكر من بينها: PDO تدعم أكثر من 12 نظام قواعد بيانات مختلف في حين ان MySQLi يمكنها العمل مع Mysql فقط. PDO تستعمل البرمجة الكائنية التوجه في عملها في حين Mysqli توفر بجانب خيار الـ OOP واجهة اتصال بسيطة (يعرفان ب Mysqli الاجرائية و Mysqli كائنية التوجه). في هاته الناحية تعطى الافضلية ل PDO فعند تبديل نظام قواعد البيانات لن يكفي في mysqli تغيير نوع الاتصال وانما سيشمل ذلك تغيير كامل الشيفرة ومن بينها استعلامات قواعد البيانات. تعتبر PDO أفضل من ناحية تشخصي الاخطاء وتقريرها. في PDO يمكن تسمية المعاملات وعنونتها بشكل عام global بشكل يجعل من السهل التعديل عليها لاحقا اما في mysqli فلا يمكن. لـ PDO أفضلية استخدامها من قبل اغلب المجتمع البرمجي بلغة PHP، يعني هذا ان اخطاءها ومشاكلها اسهل تشخيصا وحلا مقارنة بـ MySQLi. مبدئيا، استعمال PDO سيكون أفضل بكثير، من ناحية التنفيذ والتعديل وخدمة انظمة قواعد البيانات. اما Mysqli فتعتبر افضل من ناحية التخصص، فإن كنت لا تستعمل الا اتصال MySQL دون وجود اي احتمال لتوسيع قواعد البيانات او تغيير نمطها او نظامها فسيكون استعمال MySQLi عمليا.
  4. لا يوجد حد أدنى، ولكن لا يعني هذا أنه عليك كتابة كامل شيفرات الجافاسكربت الخاصة بك في ملف واحد، فمن شأن هذا أن يجعلها صعبة القراءة وبطيئة التحميل بالنسبة للمتصفح. عوضا عن هذا، واحتراما لمبدأ فصل المهام, وهو أحد مبادئ التصميم والشيفرة النظيفة, قم بفصل شيفرتك وتوزيعها في ملفات مختلفة على أن يحمل كل ملف جافاسكربت اهتماما منفصلا (مثال: لا يصح وضع الشيفرة التي تتحكم في اظهار القائمة الجانبية من عدمها مع الشيفرة التي تقوم بتحميل المقالات بطلبية Ajax!). في NodeJS تدعى كل من هاته الملفات وحدة نمطية Module ولذلك قد تحتاج في هذا استعمال آداة لتجميع هاته الوحدات في ملف واحد يسهل تضمينه بأي مكان. تعتبر webpack أشهر مجمع وحدات. قد تحتاج أيضا مفاهيم او مبادئ البرمجة الكائنية التوجه لعمل ذلك باحتراف. على أن التقسيم والفصل والتضمين بشكل تقليدي مثلما تعرفه كاف جدا ان كنت تقوم بتضمين هاته الملفات في ملف HTML واحد مثلا.
  5. لا يظهر أي فيديو في الصفحة التي قمت بارفاق رابطها. هلا قمت باضافة تفاصيل أكثر؟
  6. هلا قمت بارفاق اية محاولات قمت بها؟ سيمكننا توجيهك نحو حل مشكلتك بنفسك.
  7. قد يحدث أن تمتلك شركة أعمال أو نشاط تجاري واحد العديد من المتاجر، كأن تتواجد العديد من متاجر البيع بالتجزئة التي يمتلكها المالك نفسه. أو أن تشترك العديد من المتاجر في العديد من الخصائص العامة والمنتجات، لذا تهتم بريستاشوب بخدمة هذه الفكرة وتتيح إمكانية إنشاء مجموعة متاجر وإدارتها بسهولة ومن لوحة تحكم واحدة. تفعيل المتاجر المتعددة بصفة عامة، قد نتوجه لاستعمال خيار المتاجر المتعددة في بريستاشوب عندما نرغب في أن يتسوق عملائنا في نوعين مختلفين من المتاجر أو أكثر دون أن تتداخل الطلبات من المتجرين أو عربات التسوق لكل منهما مثلا. يمكن تفعيل خيار المتاجر المتعددة عن طريق: لوحة التحكم، التوجه إلى صفحة "إعدادات > عام" من قسم الإعدادات في القائمة الجانبية. نافذة "عام"، البحث عن خيار المتاجر المتعددة وتفعيله. التعرف على واجهة المتاجر المتعددة بعد تفعيل خيار المتاجر المتعددة، سيتم إضافة رابط للتصفح إلى صفحة إدارة المتاجر المتعددة في "إعدادات متقدمة > متاجر متعددة" من قسم الإعدادات المتقدمة من القائمة الجانبية. يمكن عن طريق هذه الصفحة إدارة واستعراض المتاجر المتوفرة، وتحوي بشكل عام الأقسام الثلاث: شجرة المتاجر المتعددة multi store tree: أين يتم عرض قائمة منسدلة بكامل المتاجر المتوفرة ورابط كل منها. المتاجر المتعددة: يمكن هنا استعراض أو تعديل مجموعات المتاجر الموجودة. إعدادات المتاجر المتعددة: أين يمكن تحديد المتجر الافتراضي للموقع. المتجر الافتراضي هو المتجر المركز الذي تأخذ عنه باقي المتاجر نفس الخصائص العامة مثل المنتجات والموردين وغيرها. التعرف على مجموعات المتاجر قد ترغب في تعيين نفس الموظفين أو العملاء أو الأسعار لعدد معين من المتاجر، دون أن يتم تعميمهم على كل كامل المتجر. وقد يصبح أمر إعداد كل منها وضبطه أمرا مجهدا ومشتتا كلما زاد عدد المتاجر. في الحقيقة تتيح بريستاشوب إمكانية ضم كل عينة من المتاجر تحت مجموعة واحدة، وإعدادها كلها بدل إعداد كل منها على حدة، هذا ويمكن بالطبع تخصيص كل منها أيضا على حدة، إذ يوجد هذا الخيار بغرض تسهيل إدارة المتاجر، ولن تظهر هذه المجموعات للعملاء. بل وتتجاوز هذا الأمر، وتجعل عملية إنشاء مجموعة متاجر أولى من إنشاء المتجر نفسه، وذلك لأن هذا الأخير نفسه يندرج في مجموعة متاجر، ولفهم هذا التفرع بشكل جيد لنتناول المثال التالي: يمتلك نشاط تجاري ما 20 متجرا ينشط عشرة منها في مجال البناء و العشرة الأخرى في مجال الإلكترونيات، نسمي كلا من الإلكترونيات والبناء "مجموعات متاجر". وعموما، يمكن إنشاء مجموعة متاجر عن طريق الضغط على زر "إضافة مجموعة متاجر جديدة" من القائمة العلوية لصفحة "المتاجر المتعددة". بعد الضغط على هذا الزر، يتم التوجه بنا إلى صفحة الإنشاء والتي يمكن عن طريقها تخصيص كل من الحقول: اسم مجموعة المتاجر. تعطيل أو تمكين مشاركة العملاء، بمجرد تفعيل هذا الخيار، فإن المتاجر في هذه المجموعة ستشارك العملاء. حيث إذا سجل العميل في أي من هذه المتاجر، فسيكون الحساب متاحا تلقائيا في المتاجر الأخرى في هذه المجموعة ولن يتطلبه إنشاء حساب في كل متجر من هذه المجموعة (لن يمكن تعطيل الخيار بعد الإنشاء). تعطيل أو تمكين مشاركة الكميات المتاحة للبيع بين متاجر المجموعة. تعطيل أو تمكين مشاركة الطلبات بين متاجر المجموعة، بمجرد تفعيل هذا الخيار (لاحظ أن ذلك ممكن فقط في حالة مشاركة العملاء والكميات المتاحة بين المتاجر) سيتم مشاركة جميع المتاجر سلات الشراء في هذه المجموعة. وبهذه الطريقة، سيمكن إكمال أي عملية شراء تبدأ من متجر معين في متجر آخر من نفس المجموعة (لن يمكن تعطيل الخيار بعد الإنشاء). تمكين أو تعطيل المجموعة (يتم تعطيل كامل المتاجر المنتمية لها في حالة التفعيل). يمكن تعديل المجموعات عن طريق الضغط على زر "تعديل" في جدول مجموعات المتاجر الظاهر افتراضا في صفحة "المتاجر المتعددة". إدارة متجر ضمن مجموعة متاجر يمكن من صفحة "المتاجر المتعددة" استعراض المتاجر المنتمية لمجموعة ما عن طريق الضغط على اسم هذه المجموعة في شجرة المتاجر أو جدول مجموعات المتاجر المبين بذات الصفحة. إنشاء متجر جديد يمكن عن طريق صفحة إنشاء متجر جديد يمكن تحديد كل مما يلي (التي يمكن التوجه لها بالضغط على زر إضافة متجر جديد بالقائمة العلوية لصفحة المتاجر المتعددة): اسم المتجر، وبما أن الاسم عام سيكون متضحا للعملاء في العديد من الأماكن، مثل عناوين النوافذ ومراجع البريد الإلكتروني وغيرها. ولذلك تأكد من إعطاءه اسما دلاليا واضحا. مجموعة المتاجر المنتمية لها (لن يمكن التراجع عن هذا الخيار لاحقا). جذر الأقسام، ويقصد به عن أي قسم يتفرع هذا المتجر. فئات المنتجات المرتبطة بهذا المتجر. الموضوع أو السمة، حيث يمكنك اختيار سمة رئيسية للمتجر من بين مجموعات السمات التي ثبتَّها. كما يمكن عن طريق خيار الاستيراد استيراد بيانات من متجر آخر دون الحاجة لإنشائها يدويا مرة أخرى، بيانات مثل الإضافات والعلامات التجارية واللغات وغيرها. ويكون هذا عن طريق تحديد نوع البيانات والمتجر المستهدف والمراد الاستيراد منه. تخصيص عناوين المتاجر من الطبيعي أن يمتلك كل متجر مستقل رابطا خاصا به (واحد على الأقل)، حيث يكون هذا الرابط مستقلا عن المتجر الأول الذي قمت بتثبيته. يمكن أن يكون: نطاقا مستقلا تماما، مثل: https://www.matjar.store. نطاقا فرعيا، مثل: https://matjar.company.store. نطاقا ذا مسار نسبي، مثل: https://www.company.store/matjar . ويمكن تخصيص ذلك عن طريق صفحة تعديل الرابط التي يمكن التوجه لها عن طريق الضغط على رابط المتجر الظاهر في شجرة المتاجر بصفحة "المتاجر المتعددة". ثم زر "تعديل" بالصف المرافق لهذا المتجر في جدول المتاجر. تضم الصفحة قسمان: خيارات الرابط، يمكن عن طريقها: تحديد المتجر المراد تعديل رابطه. تحديد ما إن كان هذا المتجر سيمتلك الرابط الأساسي للموقع (لا يمكن أن يمتلكه أكثر من متجر واحد). تمكينه أو تعطيله. رابط المتجر، يمكن عن طريقها: تحديد اسم نطاق المتجر (اسم صالح: www.domain.com، اسم غير صالح: http://www.domain.com). تحديد اسم نطاق SSL للمتجر، فقد ترغب مثلا في أن يختلف اسم نطاقك العادي عن اسم نطاقك الآمن SSL. عموما يمكنك إدخال نفس النطاق السابق (اسم صالح: www.domain.com، اسم غير صالح: https://www.domain.com). المجلد الفعلي Physical URL للمتجر. حيث أن هذا هو المجلد الفعلي لمتجرك على خادمك. يمكنك ترك هذا الحقل فارغا إذا تم تثبيت متجرك على مسار الجذر (أي مباشرة داخل مجلد public_html في خادم استضافتك المشترك أو داخل localhost إن كنت تستخدم استضافة محلية). أما اذا كان موقعك الأساسي متاحًا على www.example.com/some-path، فيجب عليك إدخال قيمة my-store/ في هذا الحقل. الرابط الظاهري Virtual URL للمتجر. ويقصد به الرابط الذي يظهر للعملاء، في حالة رغبتك في استعمال نطاق ذي مسار نسبي يمكنك إضافة اسم المتجر في مكان هذا الحقل لتمييزه، وإلا فإنك ستحتاج تركه فارغا في حالة استعمال نطاقا فرعيا أو مستقلا تماما. يمكنك بكل حال من الأحوال استعراض شكل الرابط النهائي لهذا المتجر. إدارة المتاجر ومجموعاتها من لوحة تحكم واحدة صحيح أن امتلاك متاجر متعددة يعني واجهات أمامية متعددة، ولكن لا يعني هذا أن كل واجهة ستمتلك لوحة تحكم خاصة بها. بل إن بريستاشوب تحرص على أن تكون عملية ادارة هذه المتاجر سهلة وبسيطة. وتتيح إمكانية إدارتها كلها عن طريق نفس لوحة التحكم التي تعرفت عليها في الدروس السابقة. هذا وتوضح بشكل جيد ما المشترك بين مجموعة متاجر وما الممكن تخصيصه في كل واحدة منها، ويكون كل ذلك عن طريق التبديل بين المتاجر بسهولة. وبشكل افتراضي، لا يمكن استعمال هذا الخيار إلا بعد إنشاء مجموعة متاجر واحدة فأكثر. ولذلك يجب التأكد من تفعيل ميزة المتاجر المتعددة ومن امتلاك أكثر من مجموعة متاجر واحدة. بعد هذا، سيمكن التبديل بين مجموعات المتاجر والمتاجر عن طريق المحدد المبين كقائمة منسدلة من صفحة لوحة التحكم المبينة في أعلى الصفحة. لاحظ أن هذا المُحدد يقبل اختيار جميع المتاجر، أو متجر معين، أو مجموعة متاجر معينة. في الحالة الأولى، ستبدوا جميع صفحات الإعدادات بشكلها وتقسيمها العادي مما يعني أن أي إعدادات يتم تخصيصها تطبق على كامل المتاجر والمجموعات. أما في حالة اختيار متجر أو مجموعة معينة فستلاحظ أنه يتم إضافة خيار "المتاجر المتعددة" في صفحات الإعدادات بشكل يمكن عن طريقه تخصيص سريان هذا الإعداد على جميع المتاجر أو على المتجر المحدد فقط. فيما يلي مجموعة العناصر موضح عليها ما إن كانت تقبل تخصيصها بالنسبة للمتجر الواحد، أو ما كانت تقبل تخصيصها بالنسبة لمجموعة المتاجر أو بالنسبة لجميع المجموعات والمتاجر. table { width: 100%; } thead { vertical-align: middle; text-align: center; } td, th { border: 1px solid #dddddd; text-align: right; padding: 8px; text-align: inherit; } tr:nth-child(even) { background-color: #dddddd; } الخاصية كل متجر مجموعة متاجر كامل المتاجر الموظفين، مجموعات العملاء، المنتجات، الأسعار، المنتجات، التركيبات، اللغات، الكمية المتوفرة للبيع، القواعد الضريبية، الفئات، جهات الشحن، المستودعات، الموردين، العلامات التجارية، صفحات CMS، جهات الاتصال، العملات واللغات والوحدات النمطية والخطافات والاستثناءات، حسابات خدمة الويب نعم نعم نعم الخصومات، إدارة المخزون المتقدمة، التكوين، قيود لكل دولة، قيود العملة، تقييد مجموعة لكل عميل، عناوين المواقع الودية، منزلق صورة الصفحة الرئيسية نعم لا لا لا يمكن أن يظهر المنتج إلا في فئة معينة من المتجر إذا كان مرتبطًا بهذه الفئة في سياق هذا المتجر، بمعنى آخر: إذا اشترك المتجر A والمتجر B في الفئة C، فيمكنك ربط المنتج P بالفئة C في سياق المتجر A، ولن يظهر P في الفئة C في المتجر B. الخاتمة تعرفنا في هذه المقالة الأخيرة من السلسلة على كل ما يخص خدمة فكرة المتاجر المتعددة في نسخة بريستاشوب الخاصة بنا، فبدأنا في السلسلة من التعرف على واجهة المتجر ومجموعات المتاجر والمتاجر ضمنها إلى كيفية إدارتها من لوحة تحكم واحدة وغيرها من التفاصيل حتى وصلنا إلى هذه المحطة الأخيرة والتي أرجو فيها أن تكون امتلكت المعرفة المطلوبة لإدارة متجرك على بريستاشوب بمهارة والانطلاق بمشروعك بكفاءة. اقرأ أيضًا التعرف على قسم الإدارة في متجر بريستاشوب إدارة المنتجات في متجر بريستاشوب التعامل مع العملاء وطلباتهم في متجر بريستاشوب ضبط طرق الدفع وعملية الشحن لمتجر بريستاشوب
  8. لا اظن انه يوجد بالضبط مكتبات لعمل ذلك، انت في الغالب تحتاج بناءها من الصفر. قد ذكرت سابقا ان اطر عمل مثل React أو Vue ستسهل المهمة.
  9. بالاضافة الى اجابة المدرب وائل، يمكنك اعادة تعريف او تجاوز overriding التابع all بما يوافق مرادك. كأن تستثني معرفا أو مستخدما ما بشكل عام دون الحاجة لإعادة استثناءه كل مرة. يشترط أثناء تجاوز اي تابع او وظيفة في لارافيل تعريفها وفق ما هي معرفة في صنفها الحاوي لها. اعادة تعريف التابع all بما يوافقنا سيكون في ملف النموذج User.php كالتالي: /** * اصتثناء مستخدمين معينين * * @param array|mixed $keys * @return array */ public static function all($keys = null) { $data = parent::all(); # حقن البيانات من صنف النموذج في متغير return $data->except(auth()->id); # استثناء المستخدم القائم بالطلب } ثم سيمكنك بأي مكان من تطبيقك استدعاء التابع all بالطريقة التقليدية التي تعرفها: User::all() # ستقوم بإعادة كامل المستخدمين معدا المحدد لها سيجنب هذا التكرار في حال ما كنت تكرر استعلام جلب المستخدمين معدا المستخدم القائم الطلب كل مرة. بجانب ان التعديل عليها لن يكون سهلا، فقد تشاء في المستقبل استثناء المستخدمين غير المفعلين أو المستخدمين المشرفين مثلا. ميزة اطر العمل مفتوحة المصدر هي في مرونتها ولامحدوديتها، يمكنك تخصيص اي جزء من التطبيق وفق منطق الخاص.
  10. يمكنك أيضا استعمال التابع inRandomOrder للحصول على نتيجة عشوائية من بين تجميعة نتائج كالتالي: $users = User::inRandomOrder()->first(); أو كطريقة أقرب لـ SQL أكثر يمكنك ترتيب الصفوف التي تجلبها من قواعد البيانات بواسطة الدالة RAND() منتجة استعلاما مشابها لـ: select * from users order by RAND() ASC وذلك كالتالي: $user = User::select("*")->orderBy(DB::raw('RAND()'))->first(); وبالطبع فإن هذا سيتطلب منك تضمين الواجهة DB قبل استعمال اي توابع لها. use DB;
  11. أفضل الطرق هي في تصدير هاته البيانات من برنامج الاسكل بصيغة JSON واستعمالها في الجافاسكربت مباشرة دون أي ربط بين الاثنين، هاته الفكرة عملية في حالة كون البيانات التي لديك ثابتة وغير قابلة للتغيير. في حالة تعذر تحويل هاته البيانات من اكسيل الى صيغة JSON لسبب من الاسباب يمكنك الاستعانة بأحد الخدمات او الحزم التي توفر امكانية تحويل صيغ CSV الى صيغ JSON قابلة للعرض عن طريق جافاسكربت. أستعمل csvtojson مثلا. تعرض صيغ JSON وفق هذا الشكل عادة: { "glossary": { "title": "example glossary", "GlossDiv": { "title": "S", "GlossList": { "GlossEntry": { "ID": "SGML", "SortAs": "SGML", "GlossTerm": "Standard Generalized Markup Language", "Acronym": "SGML", "Abbrev": "ISO 8879:1986", "GlossDef": { "para": "A meta-markup language, used to create markup languages such as DocBook.", "GlossSeeAlso": ["GML", "XML"] }, "GlossSee": "markup" } } } } } يمكن تحويلها الى كائن جافاسكربت عن طريق التابع parse للكائن JSON كالتالي: const obj = JSON.parse('PUT_JSON_HERE'); تفاصيل أكثر في:
  12. بالطبع سيمكنك ذلك، ستحتاج في هذا بناء واجهة التطبيق عن طريق HTML وتنسيقها عن طريق CSS أو أحد مكتباتها أو اطر عملها ثم تعريف الوظائف اللازمة لتوليد التهنئة كقسم HTML منسق أو عن طريق إرسال التهنئة عبر البريد الالكتروني باستخدام احد المكتبات او الواجهات البرمجية المجانية او المدفوعة التي توفر امكانية ارسال رسالة بريد الكتروني مباشرة عن طريق واجهة العميل دون الحاجة الى خادم او واجهة خلفية. نذكر مثلا emailjs. اما كان مرادك صفحة ثابتة تعرض محتوى تهنئة فبالطبع يمكنك عملها عن طريق HTML و CSS. توجد أيضا مواقع تقدم خدمات تصميم وإنشاء بطاقات التهنئة من مثل موقع بطاقات فيمكنك انشاء مثلها أيضا، هاته الانواع من التطبيقات قد تتطلب العمل على أحد اطر جافاسكربت، ReactJS أو VueJS مثلا.
  13. لمساعدتنا كمدربين في توجيهك نحو حل مشكلتك ومساعدتك على ذلك يرجى دوما تقسيم المشاكل التي تواجهها الى مشاكل منفصلة يمكن العمل على كل منها على حدة، بجانب ارفاق الشيفرة أو الشيفرات المتعلقة بالمشكلة مباشرة. مشكلتك غير واضحة جيدا، هلا قمت بتوضيح ذلك أكثر؟
  14. هل يمكنك إضافة تفاصيل أكثر عما تحاولين القيام به؟ ان كنت تحاولين انشاء استعلام قواعد بيانات لقراءة موظفي قسم معين، فهدا سيعتمد بالدرجة الأولى على هيكلتك لقواعد بياناتك، وعموما سيكون هنالك عمود يربط جدول الموظفين بجدول الأقسام يمكن عن طريقه قراءة الموظفين المنتمين لهذا القسم كالتالي: SELECT * FROM employees WHERE section_id=PUT_SECTION_ID_HERE; يمكنك أيضا استبدال * بأسماء الأعمدة التي تريدينها مفصول بينها بفاصلة أجنبية. أما ان كان المقصود هيكلة قائمة موظفين في شكل بطاقات في HTML فيمكنك الاستعانة ببوتسراب لتنسيقها وإنشاءها كالتالي مثلا: <div class="container"> <div class="row"> <div class="container"> <div class="row"> <!-- بطاقة الموظف --> <div class="card col-sm"> <div class="card-body"> <h5 class="card-title">اسم الموظف هنا</h5> <h6 class="card-subtitle mb-2 text-muted">الاسم الوظيفي</h6> <p class="card-text">نبذة شخصية عن هذا الموظف</p> <a href="#" class="card-link">رابط أعمال الموظف</a> <a href="#" class="card-link">رابط لينكد ان</a> </div> </div> <!-- بطاقة الموظف --> <div class="card col-sm"> <div class="card-body"> <h5 class="card-title">اسم الموظف هنا</h5> <h6 class="card-subtitle mb-2 text-muted">الاسم الوظيفي</h6> <p class="card-text">نبذة شخصية عن هذا الموظف</p> <a href="#" class="card-link">رابط أعمال الموظف</a> <a href="#" class="card-link">رابط لينكد ان</a> </div> </div> <!-- بطاقة الموظف --> <div class="card col-sm"> <div class="card-body"> <h5 class="card-title">اسم الموظف هنا</h5> <h6 class="card-subtitle mb-2 text-muted">الاسم الوظيفي</h6> <p class="card-text">نبذة شخصية عن هذا الموظف</p> <a href="#" class="card-link">رابط أعمال الموظف</a> <a href="#" class="card-link">رابط لينكد ان</a> </div> </div> </div> </div> </div> </div> مع تخصيصها وفق ما يليق بمشروعك. قد تحتاج الاطلاع أكثر على Bootstrap و البطاقات في إطار العمل Bootstrap.
  15. يتم استعمال القاعدة accepted بدل required لمربعات التحقق في لارافيل، يجب أن يكون الحقل قيد التحقق "true" أو "on" أو "1. يكون هذا مفيدا في حالات التحقق من الموافقة على شروط الاستخدام مثلا. مثال عملي: $validated = $request->validate([ 'email' => 'required|unique:users', 'terms' => 'accepted', // ... ]); تعرف أكثر عن التحقق (validation) في Laravel
  16. أظنك تحاول تشغيل الموقع على المتصفح وفق الرابط الموضح. يتطلب منك هذا أولا تشغيل Live Server لتشغيل الموقع على المتصفح والاستماع لأية تحديثات تقوم بها على ملفات مشروعك. لتشغيل Live Server يمكنك الضغط على Go Live في الشريط الأزرق السفلي في VS code. أو عن طريق فتح ملف html في VS code واختيار open with live server بعد الضغط على الزر الأيمن للفأرة. طريقة أخرى يمكنك بها ذلك هي عن طريق الضغط على Alt + L و ALT + O. سيتم فتح الموقع مباشرة في المتصفح الافتراضي لك.
  17. هلا تأكدت من أنك بالفعل في نافذة Terminal وليس أي نافذة أخرى؟ debug console مثلا ان لم تكن المشكلة بسبب هذا يرجى ارفاق تفاصيل أكثر عن المشكلة حتى يتم معالجتها بشكل فعال.
  18. يمكنك استعمال substr لاقتطاع الجزء الذي تريده، حيث تستعمال هاته الدالة اساسا لإعادة جزء معين من سلسلة نصية نمررها عبرها. فيما يلي السياق العام للدالة: string substr ( string $string , int $start [, int $length ] ) حيث تعبر كل من: string عن السلسلة النصية المستهدفة. start بداية السلسلة النصية المراد اقتطاعها. في حالة استعمال قيمة سالبة سيتم احتساب السلسلة النصية المُعادة من الموضع الذي يبعد مسافةً تُقدَّر بقيمة المعامل start عن نهاية السلسلة النصية string. length طول السلسلة النصية المراد اقتطاعها. في المثال الذي لديك، يكفي تمرير 10 باشارة سالبة كمعامل start لاقتطاع عشرة محارف ابتداءا من نهاية السلسلة: <?php $my_text = 'academy hsoub is cool'; // 10987654321 echo substr($my_text ,-10); النتيجة: ub is cool توثيق الدالة substr()‎ في PHP
  19. نعم يمكنك توظيف واجهات البرامج التي تستعمل تقنيات وبروتوكول الويب سوكيت لخدمة هذا الغرض، وهو بروتوكول ويب يوفر اتصالا دائما بين الخادم والمتصفح. فكل مرة يستقبل فيها الخادم رسالة جديدة مثلا من الطرف A يقوم مباشرة بتنبيه الطرف B الذي يقوم بدوره بعرض البيانات الممررة في شكل رسالة او تنبيه مثلا. تفصيل: يشترك كل من A و B في قناة ولتكن مثلا ConversationChannel. هاته القناة تحتوي أحداثا معينة، مثل: ReceivedMessageEvent, ClientIsTypingEvent. يستمع كل من A و B لهاته الأحداث. عندما يرسل A الى B رسالة فان مسار هاته الرسالة سيكون عبر هاته القناة ليستهدف حدثا معينا فيها. يقوم الخادم بالتقاط استهداف A للحدث ويقوم بتمرير البيانات الممررة عبر القناة. بما ان B مشترك في القناة ويستمع للحدث فانه سيلتقط اية بيانات ممررة عبر هذا الحدث. يقوم تطبيقك على المتصفح بالتقاط هذا الحدث ونمذجة البيانات وفق أي شكل من الأشكال. نذكر الأكثر شيوعا socket.io، وهي مكتبة مفتوحة المصدر تقدم كامل خدماتها بشكل مجاني. مناسبة جدا للتطبيقات المبنية على أطر عمل الجافاسكربت ومكتباتها. بجانب أنها توفر حلولا سهلة لأغلب استعمالات هذا البروتوكول. يوجد أيضا pusher والذي يعتبر سهلا بشكل واضح مقارنة ب socket.io ، شائع استخدامه في تطبيقات اللارافيل على الـ PHP رغم انه يوفر وصولا سهلا وتوثيقا موضحا في اغلب اطر العمل الموجودة على الساحة.
  20. تعد عملية الدفع والشحن جزءًا لا يتجزأ من النشاط الأساسي للمتاجر الإلكترونية وأحد أولى المهام التي يجب أن تترأس قوائم أولويات المؤسسات التجارية. تضع بريستاشوب بين يدي مستعمليها طُرقا سلسة للتعامل مع هذين المفهومين وكيفية التعامل معهما بمستوى عال من الإحترافية. وسائل الدفع في متجر بريستاشوب أنظمة الدفع لا غنى عنها لحياتنا كنشاطات تجارية أو شركات أعمال بطبيعة الحال. فإذا كان المال هو شريان الحياة للاقتصاديات النقدية الحديثة، فإن أنظمة الدفع هي ما يمثل طرق ومسارات تمرير المال من جهة إلى جهة. وبالتالي فإن الإهتمام بطرق الدفع وعملياته لن تقل هي الأخرى عن الاهتمام بغيرها. وتتأكد بريستاشوب من تخصيص قسم "تحسين > الدفع" لكل ما يخص وحدات الدفع وطرقها. بشكل عام، وحدات الدفع هي ليست إلا إضافات يتم إدارتها عن طريق صفحات مخصصة حسب كل إضافة ووحدة. ويتم استعراضها عن طريق صفحة "طرق الدفع" التي تضم بدورها قسمين: الدفع النشط Active payment، وتعبر عن طرق الدفع الممكنة حاليا في متجرك. يمكن عن طريق الضغط على إعدادات التوجه إلى صفحة إعداد إضافة الدفع. بوابات الدفع الموصى بها Recommended payment gateways، وهي كطرق يتم توليدها واقتراحها كطرق متاحة لبلدك أو الأسواق التي تستهدفها اعتمادًا على موقعك وإعدادات المتجر (لا تشمل كامل البلدان). إعداد عمليات الدفع تهدف صفحة "الدفع > تفضيلات" إلى مساعدتك في تحديد طريقة الدفع التي يجب أن تكون متاحة لعملائك اعتمادًا على العملة أو البلد أو المجموعة أو شركة النقل. يجب الانتباه جيدا إلى هذه الصفحة فهي التي تُحدَّد عن طريقها ما إن كانت طريقة دفع ما متاحة لعميل ما ينتمي لمجموعة عملاء ما من بلد ما يختار طريقة شحن ما. تضم الصفحة بشكل أساسي أربع أقسام: قيود العملات، إذ يمكن أن تختلف طرق الدفع اعتمادا على العملات المختارة، فقد لا تقبل مثلا أن يتم الدفع عن طريق حوالة بنكية إن كانت عملة العميل المختارة هي العملة X مثلًا. قيود مجموعات العملاء، والتي تتاح عن طريقها تحديد طرق الدفع الممكنة لكل مجموعة معينة من العملاء. قيود الدول، هذا القسم هو الذي يمكن منه تحديد طرق الدفع المتاحة لكل دولة ومنطقة جغرافية. قيود الشحن، من هنا يمكن تحديد طرق الدفع لكل طريقة شحن. إضافة وسيلة دفع لا يختلف تثبيت وحدة أو إضافة الدفع بشكل أساسي عن تثبيت إضافة عادية، وتكوينها وإعدادها هي الأخرى كإعدادات إضافة عادية وبالطبع فإنه يجب أن تولي اهتماما كبيرا لهذه الإعدادات، فتتأكد من أنها تشير إلى عنوانك أو حسابك المصرفي مثلا. وفيما يلي سنقوم بتحميل وتكوين بوابة دفع باي بال Paypal كمثال عن السابق وذلك لكونها أكثر بوابات الدفع شعبية وعالمية. بشكل أساسي، سنقوم بإتباع خطوات تثبيت إضافة عادية عن طريق الخطوات الموضحة في مقال تخصيص متجر بريستاشوب > التعامل مع الإضافات كالتالي: تحميل الإضافة من متجر الإضافات من الموقع الرسمي لها. عن طريق صفحة " تحسين > الإضافات > مدير الوحدة " الضغط على زر ارفع إضافة. تحديد الملف ورفعه. انتظر إلى أن يتم تثبيت الإضافة ويظهر زر" الإعدادات" لتكوين الإضافة وإعدادها. من صفحة الإعداد التوجه إلى ضبط إعدادات الحساب، إذ أن تنشيط الإضافة يتطلب توصيل حساب PayPal الخاص بك أو إنشاء حساب جديد وربطه. ولفعل ذلك نحتاج الضغط على زر connect or create paypal account، ثم ملء بيانات الحساب من النافذة المنبثقة التي تظهر (تقبل الحسابات التجارية فقط). بعد الدخول بنجاح سيظهر زر لتأكيد ربط حساب باي بال في بريستاشوب، وتأكد من الضغط عليه وانتظر رسالة تأكيد الربط. لاحظ أنه أيضا يمكنك تفعيل الوضع التجريبي sandbox عن طريق الضغط على زر التبديل في أعلى صفحة إعداد الإضافة. بعد هذا ستظهر الإضافة في صفحات الدفع: طرق الدفع ثم تفضيلات، وسيمكنك التحكم في أية قيود يتم تطبيقها بخصوص طريقة الدفع هذه. إدارة عمليات الشحن في بريستاشوب تعتبر عملية الشحن مرحلة لا تقل أهمية عن مرحلة التسوق أو الطلب أو غيرها، ولذلك فإن الإهتمام بها لا يجب أن يكون أقل من غيره. ولحسن الحظ، فإن بريستاشوب توفر مجموعة من الأدوات لإدارة هذه العملية البالغة الأهمية. بشكل أساسي، يتم حساب سعر الشحن باستخدام إحدى الطريقتين: بحسب السعر الإجمالي للطلب. بحسب الوزن الإجمالي للطلب. ولهذا فإن إضافة تفاصيل الوزن والحجم عند إضافة منتج ما مفضلة ومقترحة. كما أنه يجب الإشارة أيضا إلى أن إعدادت الشحن وعملياته تتكامل وتتصل بشكل وثيق مع إعدادات المناطق الجغرافية التي يمكن إدارتها في "عالمي > النطاقات الجغرافية". إدارة جهات الشحن بشكل عام، توفر بريستاشوب صفحة "الشحن > جهات الشحن" لإدارة مختلف جهات الشحن. تقوم هذه الصفحة بعرض قائمة بجهات الشحن المتوفرة أو المعتمدة وأسمائها وأرقامها التعريفية وشعاراتها وغيرها من التفاصيل. بشكل افتراضي، توجد شركتا شحن متوفرتين: متجرك الخاص: يمثل هذا متجرك الفعلي، حيث يفترض أن يلتقط العملاء منتجاتهم بأنفسهم من المتجر. وبطبيعة الحال، فإنه لا يوجد لها أي نطاق سعري أو وزن محدد. الناقل الخاص بي my carrier: وهو كنموذج ومثال توفره بريستاشوب، ولا يفترض به أبدا أن يعتمد في الإنتاج. لاحظ أن لها نطاق سعري واحد (من 0 إلى 10000 دولار) ونطاق وزن واحد (من 0 إلى 10000 كجم). وبكل حال، يمكنك إضافة ناقل أو جهة شحن جديدة عن طريق الضغط على زر "إضافة ناقل جديد" في أعلى الصفحة. سيتم التوجه بك إلى صفحة إنشاء جهة شحن جديدة. تضم الصفحة بدورها خمس نوافذ فرعية: 1. الإعدادات العامة يمكن هنا تخصيص المعلومات العامة لجهة الشحن وتشمل: اسم جهة الشحن. مدة العبور، ويعبر عن العنوان الذي سيظهر كموعد تسليم (مثال: في غضون أسبوع). تحديد مستوى السرعة من 0 إلى 9، وهو كتقييم تحدده لمتوسط سرعة التسليم. شعار جهة الشحن. رابط التتبع الذي تقوم جهة الشحن المتعاقد معها بتوفيره -ان كانت تفعل. بخصوص رابط التتبع، فإنك لن تقوم بتحديده لكل منتج لأن هذا الأخير سيتم توليده عن طريق المتجر ولذلك فإنه يجب الإشارة إليه برمز @ فقط وستهتم بريستاشوب بتكوين الرابط الكامل. بمعنى، أنه ان كنت تتعاقد مع جهة الشحن A بحيث توفر معلومات تتبع الشحنة المميزة بالرقم LT2452767 في الموقع الرسمي لها بالتصفح إلى الرابط التالي: https://path.carrier?num=LT2452767 فإنه يجب عليك ملئ الحقل برابط من الشكل: https://path.carrier?num=@ وستقوم بريستاشوب بوضع رقم التتبع والذي هو مثلًا LT2452767 مكان الرمز @ أو غيره من أرقام التتبع. 2. المتاجر المتعددة يمكنك هنا تخصيص مختلف المتاجر أو المجموعات التي تكون فيها هذه الجهة نشطة (لن يظهر هذا الخيار في حالة عدم تفعيلك ميزة المتاجر المتعددة، اقرأ أكثر عن المتاجر المتعددة في بريستاشوب). 3. مناطق وتكاليف الشحن وتوفر بدورها إمكانية: إضافة رسوم المناولة، وهي كرسوم يتم إضافتها إلى التكلفة النهائية للمنتج وتعبر عن التكلفة التي قمت وموظفوك بتكبدها في جلب المنتج وتغليفه وشحنه. يتم تحديدها في صفحة "الشحن > تفضيلات". تحديد ما إن كانت جهة الشحن تقوم بتوفير شحن مجاني بدون أي مصاريف شحن. تحديد طريقة حساب تكلفة الشحن في ما إن كانت بحسب السعر الإجمالي أو الوزن الإجمالي. تطبيق قاعدة ضريبية لكل عمليات الشحن التي تتم عن طريق هذه الجهة. تحديد نطاق وزن أو سعر يمكن لهذه الجهة أن تنشط فيه. بمعنى أنه إن كانت شركة الشحن تشترط شحن المنتجات الأقل من 1 كغم فقط فإنه يتم تحديد هذا الحقل بقيمة 0.1 مثلا حتى 1 كغم. تحديد المناطق الجغرافية التي تنشط فيها هذه الجهة مع تحديد سعر الوحدة لكل 1 كغم أو كل 1 دولار. 4. الوزن، الحجم ومجموعات الوصول يمكن هنا تحديد كل من حدود العرض والإرتفاع والوزن والعمق للحزمة، كما ويتم هنا تحديد مجموعات المستخدمين التي يمكنها اختيار جهة الشحن هذه. 5. ملخص وهو كآخر نافذة يمكنك من عليها استعراض ملخص عام ومراجعة معلومات جهة الشحن الأساسية قبل تأكيد إضافتها. إعداد عمليات الشحن يمكن عن طريق صفحة "شحن > تفضيلات" تحديد مجموعة الإعدادات الأساسية التي تساعد في إدارة عمليات الشحن بشكل أفضل. تضم هذه الصفحة قسمان: 1. معالجة ويمكن عن طريق هذا القسم تحديد رسوم المناولة. والحد الأدنى للسعر أو الوزن الذي يبدأ انطلاقا منه عرض جهات الشحن التي توفر شحنا مجانيا. 2. إعدادات جهات الشحن يمكن هذا القسم من تحديد جهة الشحن الافتراضية وطريقة ترتيب جهات الشحن. الملخص تعرفنا في هذا المقال عن كيفية إدارة جهات الشحن وإعداد مختلف عملياتها، كما وقد تعرفنا على الطرق المختلفة التي توفرها بريستاشوب للتعامل مع طرق وبوابات الدفع وإعدادها وتطبيق قيود عليها. اقرأ أيضًا إدارة المنتجات في متجر بريستاشوب التعرف على قسم الإدارة في متجر بريستاشوب التعامل مع العملاء وطلباتهم في متجر بريستاشوب الخطوات الأولى في بريستاشوب
  21. ان كان جمهورك المستهدف يقدر بالملايين فلن تكون أي من عروض الاستضافة المشتركة مناسبة لك لأنها غالبا ما تكون محدودة بعدد طلبات معين. لمثل هاته المشاريع الكبيرة عادة ما يتم استخدام خوادم VPS أو أحد عروض الاستضافات السحابية التي يمكن لها أن تستوعب عددا كبيرا من الزوار مع وقت تشغيل سريع وتوزيع جغرافي جيد للخوادم. وبما أن لك جانبا تقنيا فأظن ان استعمال استضافة VPS ستكون افضل كثيرا، لأن الاختلاف الرئيسي بين الاستضافات السحابة و VPS هو أن VPS فيها حق الوصول إلى الجذر root وبالتالي الى كامل الموارد أما الاستضافة السحابية فلا وهو أمر ستحتاجه كثيرا ان كان مبرمج الموقع هو نفسه صاحبه ومديره. أظن ان استضافة Digital Ocean ستكون مناسبة جدا بهذا الخصوص. بما انك ذكرت VueJS فيجب جيدا عليك تحديد ما ان كنت ستقوم بإنشاء تطبيقك كتطبيق صفحة واحدة SPA أو كـ SSR (Server Side rendering) لأنك في الحالة الثانية ستحتاج الى تشغيل خادم NodeJS على الانتاج في الاستضافة وقد لا توفر كامل الاستضافات هاته الامكانية.
  22. Redis في الأصل اختصار لعبارة "خادم قاموس عن بعد REmote DIctionary Server" التي تشير الى مضمونه مباشرة. وهو بمفهومه البسيط مخزن للبيانات يستعمل نمط المفتاح - القيمة. في الذاكرة بشكل in-memory بشكل يجعل الاستعلام منها سريعا. وهذا ما جعله يستعمل بشكل أولي كخادم تخزين مؤقت cache للبيانات. فهو يسمح للمُستخدِمين بتخزين كميات ضخمة من البيانات بدون التقيد المفروض بقواعد البيانات العلائقيّة (relational database). استعمال خادم تخزين مؤقت يزيد من سرعة وآداء الموقع فالموقع لن يضطر الى الاستعلام من قواعد البيانات كل مرة يقوم فيها مستخدم ما بطلب مورد ما. صحيح أن العملية قد لا تكون ملحوظة عند وجود اعداد قليلة من المستخدمين ولكن تصبح مزعجة عند زيادة عدد الزوار، خصوصا وان كنت تستخدم احد خوادم الاستضافة المشتركة. بمعنى ان الحاجة الى التخزين المؤقت بمفهومه العام تزداد كلما زاد نشاط الموقع. يمكن تخيل كيفية عمل التخزين المؤقت بالشكل التالي: بدل أن يقوم المتصفح باستهداف الخادم ثم قواعد البيانات تختصر العملية بشكل اسرع في : يستهدف المتصفح الخادم ثم خادم التخزين المؤقت، وبما أن البيانات تخزن بشكل in-memory فاستحضارها سيكون بشكل سريع جدا. من بين طرق التخزين المؤقت، توجد redis. وفيما يلي أهم مميزاته: كونه يستعمل نمط تخزين لا علائقي NoSQL في الذاكرة الرئيسية In-memory. وهما الأمران المعروفان بالسرعة والآداء العاليين. خوادم Redis دائما متوفرة ونادرا ما نسمع عن توقف. تستخدم Redis توزيعا جغرافيا ممتازا لتقديم البيانات، فعند طلبها يتم عرضها من اقرب Node النسخ الاحتياطي Backup دعمهم اكثر من رائع في لارافيل، من بين كامل طرق التخزين المؤقت استعمل redis منذ زمن وانصح به.
  23. يمكنك استعمال مستقل لتوظيف مبرمج يقوم بعمل ذلك لك.
  24. تأكد من مراسلة الدعم بشأن المشكلة. سيقومون بحل مشكلتك.
  25. بشكل عام، يجب تفعيل ميزة فتح واغلاق الوسوم المختصرة في ملف اعداد php.ini مثلما أشار المدرب محمد. ولكن قد لا تتوفر لسبب من الأسباب امكانية للوصول الى ملف اعداد php.ini مثل أن يكون الموقع موجودا على استضافة مشتركة لا نرغب في توفير هاته الميزة الا لموقع او مواقع محدودة. في هاته الحالة يمكنك عمل نفس الشيء عن طريق التعديل على ملف .htaccess باضافة القاعدة التالية : php_value short_open_tag 1
×
×
  • أضف...