ליבת WIZZO CMS יוצאת בשתי מהדורות. המהדורה המלאה היא מה ש-Wizzo מריצה באתרים שלה. מהדורת ההפצה (dist) היא אותה ליבה בלי כמה כלים שהם של Wizzo עצמה: גשר תחזוקה של Wizzo לאתרים שלה, חיבור ללוח המשימות שלה, ופאנל לרישום פאנלים. אתר שמותקן מחוץ ל-Wizzo מקבל את מהדורת ההפצה, ואין בו קבצים שאין לו מה לעשות איתם. הדף מתאר מה חסר, איך האתר יודע איזו מהדורה הוא, ואיך הליבה מתנהגת בלי הכלים האלה. הוא מתייחס לגרסאות 5.0.150 ומעלה (בדקו את system/core/version.txt).
הדף מתאר מנגנון, לא הרשאות. מהדורת ההפצה היא ההגדרה של מה שאתר שאינו של Wizzo צריך, ולא דרך לקבל גישה לדברים אחרים.
מה לא נמצא במהדורת ההפצה#
הרשימה קבועה בקוד, ב-AdminModule::WIZZO_ONLY_FILES, כנתיבים יחסיים לתיקיית הליבה (system/core). תיקייה נמחקת עם כל מה שבתוכה.
| נתיב | מה זה |
|---|---|
controllers/check_version.php | הצד של השרת הראשי בפרוטוקול העדכון: עונה "מה הגרסה" ובונה את ה-ZIP. הוא לא נכלל באף ZIP, גם לא במהדורה המלאה, ורק השרת הראשי מחזיק אותו |
controllers/agent_mcp.php | גשר התחזוקה ש-Wizzo משתמשת בו באתרים שלה. אתר הפצה לא חשוף אליו |
admin/panel_registry.php | פאנל לרישום פאנלים חדשים, כלי עבודה של Wizzo |
admin/todo.php, libraries/Todo.php, assets/todo | חיבור ללוח המשימות של Wizzo (todo.work): הפאנל, הספרייה שפונה ל-API שלו וקבצי ה-JS |
מה שנשאר באתר הוא כל השאר: פאנל הניהול, ה-MCP של האתר, סוכני ה-AI, חיבור ל-Wizzo Market וכל הספריות. אין שינוי בשום API של האתר עצמו.
איך מסומן אתר#
הסימון לא יושב בקבצי האתר. הוא שורה במרקט: לכל אתר יש שם שורה, והיא מסומנת "של Wizzo" או לא. המרקט שולח את הסימון לאתר יחד עם ההגדרות, והליבה שומרת אותו ב-system/market_settings.json:
{
"site": { "is_wizzo": false },
"services": []
}
שתי פונקציות קוראות אותו:
| פונקציה | מה היא מחזירה |
|---|---|
market_service::is_wizzo() | true או false כפי שהמרקט שלח, ו-null כשהקובץ לא אומר: האתר לא מחובר למרקט, או שמשך הגדרות לפני שהמרקט שלח את הסימון |
AdminModule::is_wizzo_site() | ההחלטה של הליבה. מחזירה false רק כש-is_wizzo הוא false מפורש. שרת הליבה (WIZZO_ENDPOINTS::is_master()) הוא תמיד אתר של Wizzo |
if (!AdminModule::is_wizzo_site())
{
// a distribution site: the Wizzo-only files are not on this server
}
כל קוד בליבה ששואל "האם זה אתר של Wizzo" שואל את AdminModule::is_wizzo_site() ולא קורא את הקובץ ישירות. אתר שהמרקט לא אמר עליו כלום נחשב אתר של Wizzo ולכן לא מאבד כלום.
בגרסאות 5.0.150 עד 5.0.153 הסימון היה שורה ב-config.php של האתר, static $wizzo_site = false;. מגרסה 5.0.154 הליבה לא קוראת אותה, והסימון בא רק מהמרקט. שורה שנשארה ב-config.php אינה משפיעה על כלום.
איך האתר מקבל את מהדורת ההפצה#
העדכון עצמי מתואר ב-עדכון ליבה. בהקשר של המהדורות יש בו שני דברים.
אתר הפצה מבקש את המהדורה. כש-AdminModule::is_wizzo_site() מחזירה false, בקשת העדכון מהשרת הראשי נושאת edition=dist:
GET {master}/system/check_version/get?ver=5.0.154&format=json&channel=latest&edition=dist
התשובה זהה לתשובה רגילה, והשדה edition בה הוא dist:
{
"ok": true,
"version": "5.0.156",
"channel": "latest",
"edition": "dist",
"url": "https://.../backups/core-5.0.156-<fingerprint>-dist.zip",
"sha256": "<hex>",
"size": 93000000,
"php_floor": "8.3"
}
ה-ZIP של ההפצה נגזר מה-ZIP המלא של אותה גרסה: עותק שהרשומות של WIZZO_ONLY_FILES נמחקו ממנו, ונשמר לידו בשם שמסתיים ב--dist.zip. אותו דבר נכון לערוץ stable. אם אי אפשר לבנות את ההפצה, התשובה היא {"ok": false, "error": "dist_zip_failed"}, ואף פעם לא ה-ZIP המלא במקומה. כתובת המאסטר באתר היא השירות master ב-WIZZO_ENDPOINTS, ואתר שכיבה אותו לא מבקש עדכונים בכלל.
האתר מסיר גם בהתקנה. העדכון באתר הפצה מסיר את הקבצים של הרשימה פעמיים, בלי קשר לזה שהוא ביקש את ההפצה: מהתיקייה שחולצה (core_new_<ts>) לפני ההחלפה, ושוב מהליבה החיה אחריה. זה מכסה ZIP שנבנה לפני שהיו מהדורות, ואתר שהסימון שלו התחלף כשהיה כבר מעודכן: בהרצה הבאה של העדכון הקבצים יורדים גם כשאין גרסה חדשה.
שורות התפריט#
שני פאנלים נחשבים של Wizzo בלבד: todo ו-panel_registry (AdminModule::WIZZO_ONLY_PANELS). כשאין להם קובץ, לא בליבה ולא ב-application/admin/<name>.php, הם נחשבים פאנלים שפרשו (AdminModule::is_retired()):
- התפריט לא מציג אותם.
update_panelלא יוצר להם שורה ב-CRM_adminPanel_panels.retire_panelsמוחק שורה קיימת, עם האפשרויות שלה ב-CRM_adminPanel_panels_options, בעדכון הבא.
אתר שמחזיק עותק משלו של אחד מהם ב-application/admin שומר על הפאנל ועל השורה. באתר של Wizzo הקבצים קיימים, ולכן שום דבר לא משתנה. על אותו עיקרון פועלים הפאנלים שהוסרו מהליבה (כלים שהוסרו בגרסה 5.0.149).
מה הליבה עושה בלי Todo.php#
שלושה מקומות בליבה יודעים לפנות ללוח המשימות כשהאתר מחובר אליו. אף אחד מהם לא טוען את הספרייה בלי לבדוק שהקובץ קיים, ולכן קובץ חסר לא גורם לשגיאה קטלנית.
| קורא | בלי הספרייה |
|---|---|
SeoTickets::available() | מחזיר false. דוחות ה-SEO ממשיכים לעבוד, בלי יצירת משימות מממצאים |
seo_runner | בודק שהקובץ קיים לפני הטעינה, ו-todo.configured יוצא false |
OlegAgent | todo_meta מחזיר configured: false, ticket מחזיר {"ok": false, "error": "אין חיבור ל-TODO באתר הזה"}, ו-ticket_close מחזיר {"ok": false, "error": "TODO לא מחובר"}. אין חריגה ואין קריסה |
בקוד שלכם שקורא ל-Todo, עשו אותו דבר: בדקו שהקובץ קיים לפני require_once, ואל תניחו שהמחלקה זמינה.
$file = CONFIG::$core_path . "/libraries/Todo.php";
if (!class_exists("Todo") && is_file($file)) require_once($file);
if (!class_exists("Todo")) return false;
השירותים האחרים נשארים#
מהדורת ההפצה לא מנתקת את האתר משירותי Wizzo. המרקט, WizzoAI, KAMA, POOSH ושאר השירותים פעילים באתר הפצה בדיוק כמו באחר. כדי להפנות שירות לשרת אחר או לכבות אותו משתמשים ב-$wizzo_endpoints ב-config.php, כמתואר ב-כתובות השירותים. השירות todo שם לא משנה דבר באתר הפצה, כי אין בו את הספרייה שקוראת לו.
בדיקה מה יש באתר#
| בדיקה | מה היא אומרת |
|---|---|
"site": {"is_wizzo": ...} ב-system/market_settings.json | מה המרקט אמר על האתר. בלי השדה האתר נחשב של Wizzo |
ls system/core/libraries/Todo.php system/core/controllers/agent_mcp.php | באתר הפצה שני הקבצים לא קיימים |
שדה edition בתשובת get של השרת הראשי | dist או full |
ראו גם#
- עדכון ליבה, התהליך המלא של החלפת הליבה
- גרסאות, איך נקבעת גרסה ומי קורא אותה
- כתובות השירותים (WIZZO_ENDPOINTS)
- Wizzo Market, סקירה, ו-
market_settings.json