הגדרת Contexts של MODX לאתר רב-מערכתי
אתה צריך להריץ שלושה אתרים—רוסית, אנגלית ובלארוסית—כל אחד עם דומיין, תבניות ותוכן משלו. בדרך כלל זה אומר שלוש התקנות MODX: עדכונים משולשים, גיבויים וקונפיגורציות. Contexts של MODX פותרים את הבעיה הזו: מנוע אחד, מספר אתרים. ההתקנה אורכת 2–3 ימים במקום שבוע לשלוש התקנות נפרדות. לפי תיעוד MODX, contexts מספקים בידוד מלא ללא שכפול ליבה. המהנדסים שלנו עם ניסיון של 5+ שנים מבטיחים מבנה רב-מערכתי יציב. מעל 50 פרויקטים מוצלחים על MODX. חיסכון ממוצע בעלויות תמיכה של 30%, חיסכון באחסון עד 40%.
מה הם Contexts ולמה אתה צריך אותם?
Contexts הם סביבות מבודדות בתוך התקנת MODX אחת. לכל context יש הגדרות, משאבי שורש, תבניות ואפילו פרמטרי שפה משלו. השווה עם גישות אחרות:
| גישה | מורכבות תחזוקה | ביצועים | גמישות תוכן | זמן פריסה |
|---|---|---|---|---|
| התקנות MODX נפרדות | גבוהה (שלושה CMS) | בינוני | גבוהה | 5–7 ימים |
| התקנה אחת + contexts | נמוכה (CMS אחד) | גבוה | גבוהה | 2–3 ימים |
| התקנה אחת + תיקיות משנה | בינוני | גבוה | נמוכה (תוכן משותף) | יום אחד |
הגדרת context מהירה פי 3 מפריסת התקנות נפרדות. חיסכון באחסון עד 40%, עלויות תמיכה מופחתות ב-30% בממוצע בפרויקטים שלנו. בנוסף, אתה מקבל נקודת ניהול אחת: עדכוני MODX, תוספים ורכיבים מנוהלים באופן מרכזי.
איך להגדיר Contexts: מדריך שלב-אחר-שלב
יצירה והגדרה של Context
מערכת → Contexts → צור → מפתח en (לטינית קצרה בלבד). לאחר היצירה, הגדר פרמטרים:
Ключ: en
Имя: English Version
Настройки (Settings):
base_url: /en/
site_url: https://yourdomain.com/en/
site_start: 55 (ID корневого ресурса)
error_page: 56
default_template: 3
cultureKey: en
locale: en_US.UTF-8 מעבר אוטומטי לפי דומיין
תוסף על אירוע Ключ: en Имя: English Version Настройки (Settings): base_url: /en/ site_url: https://yourdomain.com/en/ site_start: 55 (ID корневого ресурса) error_page: 56 default_template: 3 cultureKey: en locale: en_US.UTF-8 מחליף context בהתבסס על HTTP_HOST או URI:
$host = $_SERVER['HTTP_HOST'];
$uri = $_SERVER['REQUEST_URI'];
$contextMap = [
'ru.company.com' => 'ru',
'en.company.com' => 'en',
'by.company.com' => 'by',
];
if (isset($contextMap[$host])) {
$contextKey = $contextMap[$host];
if ($modx->context->key !== $contextKey) {
$modx->switchContext($contextKey);
}
return;
}
$prefixMap = ['/ru/' => 'ru', '/en/' => 'en', '/uk/' => 'uk'];
foreach ($prefixMap as $prefix => $contextKey) {
if (strpos($uri, $prefix) === 0) {
if ($modx->context->key !== $contextKey) {
$modx->switchContext($contextKey);
}
return;
}
} הגדרות תוסף נוספות
אם אתה צריך גם להחליף הגדרות שפה, השתמש ב-`$modx->cultureKey` בתוך התוסף. לשמירת מפת ה-context במטמון, שקול `modRegistry`.קונפיגורציית Nginx לתת-דומיינים
server {
listen 443 ssl http2;
server_name ru.company.com en.company.com by.company.com;
root /var/www/company.com;
location ~ \.php$ {
fastcgi_pass unix:/var/run/php/php8.3-fpm.sock;
fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
fastcgi_param HTTP_HOST $host;
include fastcgi_params;
}
} משאבים וקישורים בין Contexts
כל משאב מקושר ל-context דרך שדה OnHandleRequest. כדי ליצור משאב ב-context $host = $_SERVER['HTTP_HOST']; $uri = $_SERVER['REQUEST_URI']; $contextMap = [ 'ru.company.com' => 'ru', 'en.company.com' => 'en', 'by.company.com' => 'by', ]; if (isset($contextMap[$host])) { $contextKey = $contextMap[$host]; if ($modx->context->key !== $contextKey) { $modx->switchContext($contextKey); } return; } $prefixMap = ['/ru/' => 'ru', '/en/' => 'en', '/uk/' => 'uk']; foreach ($prefixMap as $prefix => $contextKey) { if (strpos($uri, $prefix) === 0) { if ($modx->context->key !== $contextKey) { $modx->switchContext($contextKey); } return; } } :
$resource = $modx->newObject('modDocument');
$resource->set('pagetitle', 'About Us');
$resource->set('alias', 'about-us');
$resource->set('context_key', 'en');
$resource->set('template', 3);
$resource->set('parent', 55);
$resource->save();לקישורים בין contexts, ציין את ה-context: server { listen 443 ssl http2; server_name ru.company.com en.company.com by.company.com; root /var/www/company.com; location ~ \.php$ { fastcgi_pass unix:/var/run/php/php8.3-fpm.sock; fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name; fastcgi_param HTTP_HOST $host; include fastcgi_params; } } encontext_key.
סנכרון הגדרות
להגדרות מערכת יש עדיפות: גלובלי > Context > Namespace. הגדרות context גוברות על גלובליות. דוגמה לקבלת URL עבור ה-context הנוכחי:
$siteUrl = $modx->getOption('site_url'); למה Contexts עדיפים על התקנות נפרדות?
- חיסכון במשאבים: מסד נתונים אחד, ליבה אחת.
- פאנל ניהול אחיד: נהל את כל האתרים מממשק אחד.
- פריסה מהירה: context חדש ניתן להגדיר תוך שעה.
- עדכונים קלים: עדכן את MODX פעם אחת.
ראה בעצמך: צור קשר לייעוץ. המהנדסים שלנו עם ניסיון של 5+ שנים יכולים להעריך את הפרויקט שלך. קבל הערכה מדויקת ותוכנית יישום.
אילו טעויות נפוצות קורות בהגדרת Contexts?
אפילו מפתחים מנוסים עושים כמה טעויות. הנפוצה ביותר היא קישור שגוי של משאב השורש en. אם המשאב לא שייך ל-context, MODX לא יכול להציג את האתר. הבעיה השנייה היא תוסף מעבר חסר: בלעדיו, כל הדומיינים מובילים ל-context אחד. שלישית היא התנגשות מטמון: contexts חולקים את מטמון MODX, כך שהגדרות עשויות לדרוס זו את זו. פתרון: הפרד מטמון לפי context על ידי הפעלת אפשרות $resource = $modx->newObject('modDocument'); $resource->set('pagetitle', 'About Us'); $resource->set('alias', 'about-us'); $resource->set('context_key', 'en'); $resource->set('template', 3); $resource->set('parent', 55); $resource->save(); . רביעית: שכחת להגדיר [[~42? &context= לאתרים רב-לשוניים, מה ששובר את הלוקליזציה. חמישית: שגיאות Nginx—הנחיית ]] שגויה או חוסר $siteUrl = $modx->getOption('site_url'); ב-site_start.
| טעות נפוצה | סיבה | איך להימנע |
|---|---|---|
| 404 בעמוד הבית | site_start לא שייך ל-context | ודא קישור משאב השורש |
| אותו תוכן בכל הדומיינים | תוסף המעבר לא עובד | ודא שאירוע OnHandleRequest מטופל |
| בעיות לוקליזציה | cultureKey חסר או שגוי | הגדר cultureKey לכל context |
| התנגשויות מטמון | מטמון משותף לכל ה-contexts | הפעל cache_context בהגדרות |
אנחנו לוקחים בחשבון את הניואנסים האלה בעת ביצוע ההתקנה במפתח מלא.
רשימת בדיקה להגדרת Context
- צור context והגדר פרמטרים.
- קשר משאב שורש (
cache_context). - הגדר תוסף מעבר (דומיין/קידומת).
- עדכן Nginx (העבר HTTP_HOST).
- בדוק קישורים בין contexts.
- בדוק מעבר.
מה כלול בהתקנה במפתח מלא
- בדיקת מבנה האתר הנוכחי.
- יצירת contexts וקישור דומיינים.
- פיתוח תוסף מעבר.
- קונפיגורציית שרת (Nginx/Apache).
- העברת תוכן ל-contexts חדשים.
- תיעוד והדרכת מנהלים.
- שבועיים של תמיכה טכנית.
הזמן התקנת MODX contexts במפתח מלא. צור קשר כדי לדון בפרטי הפרויקט שלך. קבל פתרון מוכן תוך 2–3 ימים עם אחריות לביצועים.







