מה זה WIZZO CMS

מבט-על על WIZZO CMS: ליבת PHP משותפת למספר אתרים, מה היא נותנת, מה האתר מוסיף משלו, ואיך עדכוני גרסה מגיעים לאתרים.

⏱ 5 דק' קריאה 920 מילים ערוך דף זה ב-GitHub

WIZZO CMS (בקוד ובתיעוד הפנימי: CORE50) היא מערכת ניהול תוכן ב-PHP שבנויה סביב ליבה אחת משותפת ואתר דק שיושב מעליה. את הליבה כותבים ומתחזקים במקום אחד, ואותו קוד רץ בכל אתר. כל אתר מחזיק רק את מה שמיוחד לו: הקונטרולרים, התבניות, הפאנלים והנתונים שלו.

איפה הקוד

הליבה חיה בתיקייה api/core/ בריפו (גרסה נוכחית ב-api/core/version.txt) ונפרסת לאתר אל system/core/. כל נתיב ליבה בתיעוד כתוב יחסית ל-api/core, למשל collections/ROUTER.php. הקבצים של הדפדפן (api/js) נפרסים ל-system/js/.

למי זה מיועד#

  • מפתחי PHP שבונים אתר על הפלטפורמה: מוסיפים קונטרולר, תבנית, פאנל ניהול וטבלאות, ולא נוגעים בליבה.
  • מפתחים שמתחזקים את הליבה עצמה: עובדים ב-api/core, מפרסמים גרסה, והאתרים מושכים אותה.
  • מי שמנהל אתר קיים: עובד בפאנל הניהול (/{admin}, כש-{admin} הוא CONFIG::$admin_url) ומקבל כלים מוכנים כמו SEO, מדיה ומשימות מתוזמנות.

התיעוד הזה כתוב לשתי הקבוצות הראשונות. הוא מניח ידע ב-PHP, ב-SQL ובסיסי ב-Vue (לפאנלים מודרניים).

מה יש בליבה#

הטבלה מחברת כל יכולת לקבצים שמממשים אותה, כדי שתדעו איפה לחפש.

יכולתאיפה בקודעמוד
ניתוב כתובות והפניות 301collections/ROUTER.php, טבלאות CRM_seoUrl ו-CRM_redirectionsניתוב, כתובות ידידותיות
קונטרולרים ותצוגות Smarty 5collections/MODULE.php, collections/FILES.php, addons/Smartyקונטרולרים, תבניות Smarty
ערכות נושא, נכסים ו-SCSScollections/PAGE.php, collections/theme.php, controllers/minify.phpערכות נושא, צינור הנכסים
שכבת מסד נתוניםcollections/DB.phpשכבת ה-DB
מטמון נתונים ומטמון עמודים מלאcollections/cache_engine.phpאיך המטמון עובד
פלטפורמות ורב-לשוניותCRM_platforms, collections/LANGS.php, collections/PARAMS.phpפלטפורמות ורב-לשוניות
פאנל ניהולcollections/ADMIN.php, libraries/AdminModule.php, admin/*.php, themes/admin_panelסקירת פאנל הניהול
טבלאות וטפסים בפאנליםlibraries/panel_table.php, libraries/forms/panel_table, Form
מדיה והעלאותcollections/STORAGE.php, admin/storage.php, admin/file_manager.phpSTORAGE
משימות מתוזמנותcontrollers/cron_runner.php, admin/cron_manager.php, collections/CronLogger.phpCron
דוארlibraries/mail_tpl.php, MISC::emailשליחת דואר
AI ו-MCPcontrollers/mcp.php, controllers/agent_mcp.php, controllers/ai_agent_runner.phpMCP, סוכני AI
חבילת SEOlibraries/Seo*.php, controllers/seo_*.php, admin/seo_center.phpחבילת ה-SEO
שירותי Wizzo Marketlibraries/market_service.php, admin/wizzo_market.phpWizzo Market
עדכון ליבה עצמיadmin/wizzo_update.php, controllers/check_version.phpעדכון ליבה

ארכיטקטורה בקצרה#

כל בקשה נכנסת ל-index.php בשורש האתר. הוא טוען את system/config.php (המחלקה CONFIG_USER) ואז את system/core/core.php. מכאן:

  1. core.php טוען את כל הקבצים ב-collections/.
  2. CONFIG מזהה את הפלטפורמה לפי הדומיין, מתוך CRM_platforms.
  3. PAGE::load() מפענח את הכתובת דרך ROUTER, מוצא קונטרולר ב-application/controllers/ (או קונטרולר מערכת ב-controllers/ של הליבה), מריץ אותו ועוטף את הפלט בערכת הנושא.
  4. הפלט עובר למטמון העמודים (אם הוא דלוק) ומודפס.

הסיפור המלא מופיע במחזור חיי בקשה ובסקירת ארכיטקטורה.

מושגי יסוד#

כמה מילים שתפגשו כמעט בכל עמוד בתיעוד:

מושגמשמעות
פלטפורמה (platform)שורה ב-CRM_platforms: דומיין, שפה, כיוון וערכת נושא ברירת מחדל. ה-id שלה הוא גם מזהה השפה (CONFIG::$lang). אתר אחד יכול להחזיק כמה פלטפורמות, ראו פלטפורמות ורב-לשוניות
מודול (module)קונטרולר של האתר, קובץ ב-application/controllers/ ושורה מופעלת ב-CRM_modules. בלי השורה הכתובת מחזירה 404
קונטרולר מערכתקובץ ב-controllers/ של הליבה, זמין בכתובת /system/<name> ולא דורש שורה ב-CRM_modules. ראו קונטרולרי מערכת
פאנלעמוד בניהול: מחלקה ADMINMODULE_<שם> בקובץ admin/<שם>.php (בליבה) או application/admin/<שם>.php (באתר), ושורה ב-CRM_adminPanel_panels
פרמטרזוג מפתח וערך ב-CRM_params, נקרא ב-PARAMS::get($key)
כלל אצבע

מחלקה סטטית שאתם צריכים (DB, PAGE, MISC, PARAMS ועוד) נמצאת ב-collections/, ו-core.php טוען את כולם בתחילת כל בקשה, כך שאין צורך ב-require. ההסבר המלא בעמוד ה-Collections.

מה שייך לליבה ומה שייך לאתר#

שייך לליבה (system/core, אל תערכו באתר)שייך לאתר (אתם עורכים)
collections/: DB, ROUTER, PAGE, ADMIN, STORAGE, cache_engine ועודapplication/controllers/: דפים של האתר
controllers/: קונטרולרי מערכת, בכתובת /system/<name>application/models/ ו-application/includes/
admin/: הפאנלים המובניםapplication/admin/: פאנלים משלכם (ADMINMODULE_<שם>)
themes/admin_panel ו-themes/admin_login: עיצוב הניהולthemes/<name>/: עיצוב האתר
addons/, vendor/, libraries/system/config.php (המחלקה CONFIG_USER)
קוד שמתעדכן אוטומטית עם כל גרסהשורות במסד: CRM_platforms, CRM_modules, CRM_seoUrl ועוד
לא עורכים את
system/core באתר עדכון ליבה מחליף את התיקייה כולה (הישנה נשמרת כ-system/core_bup_<תאריך>). כל שינוי שעשיתם בתוכה בשרת ייעלם בעדכון הבא. הרחבות הולכות ל-application/, ובאג בליבה מתוקן בריפו ומתפרסם כגרסה חדשה.

המבנה המלא של תיקיות האתר מופיע במבנה התיקיות של אתר, ורשימת מפתחות ההגדרה בקונפיגורציה.

איך עדכונים מגיעים לאתרים#

הליבה מקבלת מספר גרסה ב-api/core/version.txt. אתרים לא מושכים קוד מ-git: הם מבקשים גרסה משרת master של Wizzo.

  1. פאנל wizzo_update ("עדכון גרסה") באתר שואל את ה-master (הכתובת בקבוע MASTER ב-admin/wizzo_update.php) אם יש גרסה חדשה יותר. בצד ה-master זה מטופל ב-controllers/check_version.php, שמחזיר את מספר הגרסה, ובבקשה format=json גם את הערוץ (latest או stable) ואת רצפת ה-PHP.
  2. בלחיצה על עדכון הפאנל מוריד ZIP של הליבה, מאמת sha256, בודק דרישות מוקדמות (גרסת PHP, ZipArchive, מקום פנוי בדיסק, חיבור למסד), מפרס לתיקייה זמנית ומחליף את system/core בשתי פעולות rename.
  3. האתר קורא ל-/system/core_ping על עצמו. תשובת שגיאה או גרסה שאינה תואמת מחזירות את הליבה הישנה.
  4. אחר כך הפאנל משלים מה שהגרסה החדשה מביאה איתה: טבלאות ועמודות חסרות, פאנלים חדשים ברשימת הפאנלים, משימות Cron של המערכת וקבצי ה-JS.
מה שהעדכון לא עושה

הוא לא יוצר את האתר: צריך שכבר יהיו index.php, system/config.php וחיבור למסד, והפאנל עצמו צריך להיות רשום ב-CRM_adminPanel_panels. את זה עושים בהתקנת אתר חדש. פרטי המנגנון, ערוצי הגרסאות וחזרה אחורה: עדכון ליבה וגרסאות.

מה הלאה#

אם אתם רוציםהמשיכו ל
לוודא שהשרת מתאיםדרישות מערכת
להקים אתר חדש מאפסהתקנת אתר חדש
לראות מה יש בתיקיות האתרמבנה התיקיות של אתר
לכתוב את הדף הראשוןהעמוד הראשון שלך
להבין מושגים כמו platform ו-moduleמילון מונחים
להבין איך בקשה נפתרתמחזור חיי בקשה
מצאתם טעות או חוסר? תקנו את הדף או פתחו Issue בריפו. התיעוד נכתב מתוך הקוד של ליבה 5.0.115.