انتقل إلى المقال
Aniq-UI

Ticketoryالموقع وحساب الحاضر

الموقع وحساب الحاضر

ما يفعله الموقع العام: كتالوج الفعاليات وفلاتره، وصفحة الفعالية، واختيار المقاعد، والدفع، وتذاكر الحاضر وطلباته وفعالياته المحفوظة وملفه الشخصي، ونموذج التواصل، ومحركات البحث وعلامات التسويق.

لحزمة الحزمة الكاملة

الصفحات

كل صفحة موجودة بالإنجليزية تحت /en وبالعربية تحت /ar. ليس للموقع بيانات خاصة به: كل فعالية ومقعد وحجز وطلب وتذكرة تأتي من واجهة API الخاصة بتيكيتوري.

الصفحةالمسارما تعرضه
الرئيسية/enواجهة رئيسية ببطاقات تذاكر حية، ثم الاستكشاف وكيف يعمل وحجز المقاعد وتسجيل الدخول والمنظّمون والأماكن والأسعار والأسئلة الشائعة، ودعوة إلى الإجراء.
الفعاليات/en/eventsالكتالوج، مع بحث وفلاتر تبقى في العنوان، بست فعاليات في كل صفحة.
فعالية/en/events/design-talksتبويبات نبذة والبرنامج والمكان، ولوحة الحجز بأنواع التذاكر، ومعاينة المقاعد، والحفظ، والمنظّم.
اختيار المقاعد/en/events/design-talks/seatsخريطة المقاعد الحية لفعالية بمقاعد محجوزة، مع العدّ التنازلي للحجز.
إتمام الشراء/en/checkoutبيانات المشتري وطريقة الدفع والشروط. تُفتح من اختيار محجوز.
تأكيد الطلب/en/orders/TKT-1042/confirmationبطاقة واحدة برمز QR لكل تذكرة، وتذاكر PDF، وملف تقويم، وحالة رسالة التذاكر. لا يفتحها إلا مشتريها.
تذاكري وطلباتي وملفي الشخصي/en/account/tickets, /en/account/orders, /en/account/profileالصفحات الخاصة بالحاضر المسجَّل دخوله.
الفعاليات المحفوظة/en/savedالفعاليات التي وضع الحاضر عليها نجمة.
الأماكن والمنظّمون/en/venues, /en/organisersأدلة، لكل منها صفحة لكل مكان أو منظّم وفعالياته.
الأسعار والأسئلة الشائعة والتواصل/en/pricing, /en/faq, /en/contactباقات للمثال ورسوم الحجز، وأسئلة شائعة، ونموذج التواصل.
تسجيل الدخول وإنشاء حساب/en/auth/login, /en/auth/registerمع إعادة ضبط كلمة المرور وتأكيد البريد الإلكتروني بجانبهما.
الخصوصية والشروط والإلغاء/en/privacy, /en/terms, /en/cancellation-policyنص من القالب في messages/legal تعيد كتابته لعملك قبل الإطلاق.

«بِع التذاكر» وروابط المنظّم ترسل المنظّمين إلى تسجيل الدخول في اللوحة على NEXT_PUBLIC_DASHBOARD_URL.

كتالوج الفعاليات

  • بحث في العناوين والملخصات والأماكن والمدن والمنظّمين، ومدينة، ونطاق تواريخ، ونوع (workshop أو talk أو festival)، يبقى كله في العنوان بالأسماء q وcity وfrom وto وcategory وpage، فيمكن مشاركة البحث وتحديثه والتنقل فيه بزرّي الرجوع والتقدم.
  • تظهر الفعاليات العامة القادمة فقط، الأقرب أولًا. أما المسودات والفعاليات غير المدرجة والملغاة والمؤرشفة فلا تظهر أبدًا؛ والفعالية غير المدرجة تُباع برابطها وحده.
  • تسرد البيانات التجريبية الجديدة 22 فعالية من أربعة منظّمين، ثلاث منها جارية الآن.

صفحة الفعالية واختيار المقاعد

  • لا صورة للفعالية: يُرسم عنوانها وتاريخها ولونها على شكل تذكرة. يعرض تبويب البرنامج الجدول بالمنطقة الزمنية للفعالية نفسها، ويعرض تبويب المكان طرق الوصول والمواصلات والسعة.
  • المقاعد المحجوزة: يفتح اختر المقاعد خريطة المقاعد. يبدأ اختيار أول مقعد الحجز، الذي يُبقي المقاعد طوال مدة حجز المنظّم (عشر دقائق في البيانات التجريبية)، محسوبة بساعة الخادم. تُقرأ الخريطة مرة أخرى كل 20 ثانية، وتعمل بلوحة المفاتيح، وفيها عرض قائمة ميسّر وتكبير. يحجز الطلب الواحد 8 مقاعد على الأكثر.
  • الدخول العام: يختار المشتري الكمية في صفحة الفعالية ويضغط متابعة، فتُحجز الأماكن.
  • الفعالية التي نفدت تذاكرها تبقى مفتوحة ويمكن حفظها؛ والفعالية الملغاة تقول ذلك ولا تبيع شيئًا.

إتمام الشراء

لا يحتاج الدفع إلى حساب. يكتب المشتري اسمًا أول واسم عائلة وبريدًا إلكترونيًا، ويختار Stripe أو PayPal أو دفع اختباري (أيًّا تعرضه واجهة API)، ويقبل الشروط ويضغط المتابعة إلى الدفع. تتم الدفعة نفسها في صفحة المزوّد، أو في صفحة الدفع الاختباري التي تحل محلها؛ ولا يوجد أي حقل بطاقة في الموقع أبدًا. التذاكر المجانية لا تعرض طريقة دفع، ويفتح احصل على التذاكر صفحة التأكيد فورًا.

الحجز يخص تبويب المتصفح الذي أنشأه. ولا تعرض صفحة التأكيد البطاقات إلا بعد أن تعلن واجهة API أن الطلب مدفوع.

حساب الحاضر

  • إنشاء حساب: الاسم الأول واسم العائلة والبريد الإلكتروني وكلمة مرور من 8 إلى 72 حرفًا فيها حرف واحد على الأقل ورقم واحد. ترسل واجهة API رمز تحقق من ستة أرقام بالبريد، صالحًا 24 ساعة؛ ومن دون خدمة بريد يُكتب الرمز في سجل واجهة API.
  • طلبات الضيوف تنضم إلى الحساب: بمجرد قبول الرمز يصبح كل طلب قُدّم بذلك البريد ملكًا للحساب.
  • تذاكري: الحجوزات القادمة والسابقة مع تقويم، وكل بطاقة برمز QR وملف PDF وملف تقويم.
  • الطلبات: كل طلب مع إيصاله وجدول زمني لما حدث له.
  • الفعاليات المحفوظة: النجمة على الفعالية تحفظها في الحساب. ويُرسَل الزائر غير المسجَّل دخوله إلى تسجيل الدخول أولًا.
  • الملف الشخصي: الاسم والبريد (البريد الجديد يطلب تأكيدًا من جديد) وتفضيلان للبريد. تذكيرات الفعاليات (مفعّلة افتراضيًا) ترسل رسالة واحدة قبل نحو يوم من كل فعالية لدى الحاضر تذاكر لها، وتسردها. والأخبار والعروض يُحفظ كاختيار للحاضر فقط: لا يرسل القالب رسائل أخبار. أما رسائل التذاكر والإيصالات والاسترداد فتُرسل دائمًا.
  • تسجيل الدخول: تذكّرني يُبقي الحاضر مسجَّلًا دخوله 30 يومًا بدلًا من يوم واحد. والبريد الخاطئ وكلمة المرور الخاطئة يظهران بالنص نفسه، ورابط إعادة ضبط كلمة المرور يعمل ساعة واحدة.

تتضمن البيانات التجريبية حاضرًا لديه ثمانية طلبات وأربع فعاليات محفوظة؛ وبيانات دخوله في دليل التثبيت.

نموذج التواصل

اسم وبريد إلكتروني وموضوع (سؤال عام، أو التذاكر والطلبات، أو البيع كمنظّم، أو باقة التوسّع، أو الصحافة) ورسالة من 10 إلى 2000 حرف. يتحول كل نموذج إلى استفسار في اللوحة، مع إشعار لأعضاء الفريق الذين يستطيعون قراءة الاستفسارات.

يحمل النموذج حقلًا مخفيًا يصطاد الروبوتات، ويرسل الرسالة نفسها مرة واحدة فقط، ويقبل خمس رسائل لكل عنوان خلال عشر دقائق. خلف وسيط عكسي اضبط TRUST_PROXY=1 في .env الخاص بواجهة API، وإلا يتشارك كل الزوار حصة الوسيط.

كيف تصل التغييرات إلى الصفحات

الصفحات الرئيسية وصفحات الفعاليات والأماكن والمنظّمين تُبنى مسبقًا وتُحفظ ساعة على الأكثر. وحين تُنشر فعالية أو تُعدَّل أو تُلغى أو تنفد تذاكرها، تخبر واجهة API الموقع بإعادة بنائها فورًا، ما دام الاثنان يتشاركان REVALIDATE_SECRET نفسه. يضبط Docker Compose ذلك بنفسه؛ ومن دون Docker ضع القيمة نفسها في back-end/.env وstorefront/.env. أما توفر المقاعد والحجوزات والتذاكر وصفحات الحساب فتُقرأ دائمًا مباشرة.

محركات البحث

  • تضبط كل صفحة عنوانها ووصفها وعنوانها الأساسي ولغتها البديلة، وتُبنى من NEXT_PUBLIC_SITE_URL، فاضبطه على عنوانك الحقيقي قبل البناء.
  • يسرد /sitemap.xml كل صفحة عامة باللغتين، وكل فعالية قادمة في الكتالوج، وكل مكان ومنظّم. ويشير إليه /robots.txt ويُبعد الزواحف عن صفحات الحساب والدفع والطلبات وتسجيل الدخول.
  • صفحات الحساب والدفع والتأكيد وتسجيل الدخول والفعاليات المحفوظة واختيار المقاعد موسومة بـ noindex.

أوسمة التحليلات والتتبع

هناك ست شبكات مربوطة. شغّل واحدة بوضع معرّفها في storefront/.env (ومع Docker Compose في .env بجانب docker-compose.yml) ثم أعد البناء؛ والمعرّف الفارغ لا يحمّل أي سكربت.

المتغيرالشبكة
NEXT_PUBLIC_GTM_IDGoogle Tag Manager
NEXT_PUBLIC_GA4_MEASUREMENT_IDGoogle Analytics 4
NEXT_PUBLIC_META_PIXEL_IDFacebook و Instagram
NEXT_PUBLIC_TIKTOK_PIXEL_IDTikTok
NEXT_PUBLIC_SNAPCHAT_PIXEL_IDSnapchat
NEXT_PUBLIC_PINTEREST_TAG_IDPinterest
الحدثمتى
page_viewكل تغيير مسار
view_eventتُعرض صفحة فعالية
save_eventتُحفظ فعالية
begin_checkoutتُرسل بيانات الدفع ويغادر المشتري إلى الدفع
purchaseيُعرض تأكيد مدفوع لأول مرة
contact_submitيصل نموذج التواصل
  • إذا كان GA4 يعمل داخل حاوية Tag Manager لديك، فاترك معرّف GA4 فارغًا، وإلا حُسبت كل جلسة مرتين.
  • يُرسل NEXT_PUBLIC_ANALYTICS_CURRENCY (USD افتراضيًا) مع الحدث الذي لا يحمل عملة خاصة به، ويسجّل NEXT_PUBLIC_ANALYTICS_DEBUG=true كل حدث في وحدة تحكم المتصفح.
  • تُحمَّل الأوسمة بمجرد تحميل الصفحة. إذا كنت تخدم زوارًا في الاتحاد الأوروبي أو المملكة المتحدة، فضع أمامهم لافتة موافقة أولًا.

كيف يترابط كود الموقع

مُضمَّن مع مشترياتك. سجّل الدخول لقراءته، أو افتحه في ملف التنزيل.

بنية الكود والأعراف التي يجب الحفاظ عليها عند تغييره.

توقفت عند خطوة؟

ابحث عن الحل قبل أن تبدأ من جديد.

حل المشكلات

تفضيلات ملفات تعريف الارتباط

نستخدم ملفات تعريف الارتباط لتعزيز تجربة التصفح الخاصة بك وتحليل حركة المرور على الموقع وتخصيص المحتوى. بالنقر على "قبول الكل"، فإنك توافق على استخدامنا لملفات تعريف الارتباط للتحليلات والإعلانات المخصصة.