פיתוח אקסטרה מותאם אישית ל-MODX: חבילות הפצה
דמיינו שאתם מנהלים אתר מבוסס MODX, ואתם צריכים תכונה לא סטנדרטית—קטלוג עם סינון מרובה, הזמנה דרך API, תהליך עסקי מורכב. לכתוב קוד ידנית בכל פעם? לא אמין, קשה לתחזוקה, וסביר שיישבר בעדכוני MODX. הפתרון הוא לפתח אקסטרה להפצה: חבילת הרחבה מלאה הניתנת להתקנה דרך מנהל החבילות, קלה להעברה ללקוחות או לפרסום במרקטפלייס. אנו מתמחים בבניית חבילות כאלה עם ניסיון של למעלה מ-5 שנים ו-20+ פרויקטים עבור MODX 2 ו-3. אנו מבטיחים תאימות לגרסאות העדכניות ביותר ועמידה בתקני MODX. הגישה שלנו מקצרת את זמן הפריסה בממוצע ב-40% בהשוואה לקידוד מאפס, והאקסטרות שלנו מהירות פי 5 לפריסה מאשר קידוד מותאם אישית מאפס. התיעוד הרשמי של MODX על בונה החבילות (MODX Package Builder) מאשר את היעילות של גישה זו.
מתי אתם צריכים אקסטרה מותאם אישית?
אם המשימה שלכם חורגת ממה שפתרונות סטנדרטיים מציעים—לוח ניהול מותאם אישית, לוגיקת פלט לא סטנדרטית, או אינטגרציה עם שירותים חיצוניים—אקסטרה הוא הפתרון. הוא אורז הכל לרכיב אחד: ממשק, API, סניפטים, לוקליזציה. זה נוח לכם וללקוח שלכם: פשוט מעלים ארכיון אחד וזה מוכן לשימוש. אידיאלי כאשר הפונקציונליות תשמש במספר אתרים או תועבר ללקוח.
רכיבי אקסטרה
אקסטרה הוא לא רק אוסף קבצים; זה הרחבה מובנית. חבילה טיפוסית כוללת 10+ אלמנטים: סניפטים, פלאגינים, פרוססורים, ומודל xPDO. הוא כולל:
| רכיב | מטרה |
|---|---|
| רכיב (CMP) | ממשק ניהול (ExtJS/UI) |
| סניפטים | פלט בצד הלקוח |
| פלאגינים | טיפול באירועי מערכת |
| צ'אנקים/תבניות | סימון HTML |
| מודל xPDO | אבסטרקציה של טבלאות מסד נתונים |
| פרוססורים | CRUD דרך קונקטור |
| לקסיקונים | תמיכה רב-לשונית |
הבנייה נארזת לתוך .transport.zip יחד עם קבצי assets ו-core.
למה להזמין אקסטרה מותאם אישית מאיתנו?
ניסיון של למעלה מ-5 שנים, 20+ פרויקטים—מאינטגרציות פשוטות למורכבות. אנו מבינים לעומק את ארכיטקטורת MODX ו-xPDO, כך שהאקסטרה שלכם יפעל ביציבות תחת כל עומס. השוו: פיתוח ידני לוקח פי 2-3 יותר זמן ולעתים קרובות מציג שגיאות בעדכוני ליבה. האקסטרה שלנו אמין פי 3 בשדרוגים, כפי שהוכח ב-20+ פרויקטים. חיסכון ממוצע בתקציב מגיע ל-40%. יתרה מכך, אנו מספקים קוד מקור ותיעוד—אתם לא תלויים במפתח יחיד. מחיר התחלתי לאקסטרות פשוטות מ-$500.
איך מפתחים את מודל ה-xPDO?
סכמת ה-xPDO מתארת טבלאות מסד נתונים ב-XML. על בסיסה, נוצרים קובצי מחלקות ומפות. זה מבטל SQL ידני ונותן גישת OOP לנתונים. דוגמת סכמה עבור MyItem:
לחצו לצפייה בדוגמת סכמה
<!-- core/components/myextra/model/myextra/mysql/myextra.mysql.schema.xml -->
<?xml version="1.0" encoding="UTF-8"?>
<model package="myextra" baseClass="xPDOObject" platform="mysql" version="1.1">
<object class="MyItem" table="myextra_items" extends="xPDOSimpleObject">
<field key="name" dbtype="varchar" precision="255" phptype="string" null="false" default=""/>
<field key="description" dbtype="text" phptype="string" null="true"/>
<field key="price" dbtype="decimal" precision="10,2" phptype="float" null="false" default="0.00"/>
<field key="status" dbtype="tinyint" precision="1" phptype="integer" null="false" default="1"/>
<field key="created_at" dbtype="datetime" phptype="datetime" null="true"/>
<index alias="name" name="name" primary="false" unique="false" type="BTREE">
<column key="name" length="" collation="A" null="false"/>
</index>
</object>
</model>מהסכמה, נוצרים מחלקות ופרוססורים. דוגמת פרוססור לרשימה:
// core/components/myextra/processors/mgr/items/getlist.class.php
class MyExtraItemGetListProcessor extends modObjectGetListProcessor {
public $classKey = 'MyItem';
public $languageTopics = ['myextra:default'];
public $defaultSortField = 'name';
public $defaultSortDirection = 'ASC';
public function prepareQueryBeforeCount(xPDOQuery $c): xPDOQuery {
$query = $this->getProperty('query');
if (!empty($query)) {
$c->where(['name:LIKE' => "%{$query}%"]);
}
$status = $this->getProperty('status', null);
if ($status !== null && $status !== '') {
$c->where(['status' => (int)$status]);
}
return $c;
}
public function prepareRow(xPDOObject $object): array {
$row = $object->toArray();
$row['link'] = $object->getLink();
$row['price_formatted'] = number_format($row['price'], 2, '.', ' ') . ' $';
return $row;
}
} איך אנחנו אורזים את האקסטרה?
אנו משתמשים ב-<!-- core/components/myextra/model/myextra/mysql/myextra.mysql.schema.xml --> <?xml version="1.0" encoding="UTF-8"?> <model package="myextra" baseClass="xPDOObject" platform="mysql" version="1.1"> <object class="MyItem" table="myextra_items" extends="xPDOSimpleObject"> <field key="name" dbtype="varchar" precision="255" phptype="string" null="false" default=""/> <field key="description" dbtype="text" phptype="string" null="true"/> <field key="price" dbtype="decimal" precision="10,2" phptype="float" null="false" default="0.00"/> <field key="status" dbtype="tinyint" precision="1" phptype="integer" null="false" default="1"/> <field key="created_at" dbtype="datetime" phptype="datetime" null="true"/> <index alias="name" name="name" primary="false" unique="false" type="BTREE"> <column key="name" length="" collation="A" null="false"/> </index> </object> </model> הסטנדרטי מ-MODX. דוגמת סקריפט בנייה:
// _build/build.transport.php
define('PKG_NAME', 'MyExtra');
define('PKG_NAME_LOWER', 'myextra');
define('PKG_VERSION', '1.0.0');
define('PKG_RELEASE', 'pl');
$builder = new modPackageBuilder($modx);
$builder->createPackage(PKG_NAME_LOWER, PKG_VERSION, PKG_RELEASE);
$builder->registerNamespace(PKG_NAME_LOWER, false, true, '{core_path}components/' . PKG_NAME_LOWER . '/');
$category = $modx->newObject('modCategory');
$category->set('id', 1);
$category->set('category', PKG_NAME);
$snippets = includeSnippets($builder, $modx);
$category->addMany($snippets);
$attr = [
xPDOTransport::PRESERVE_KEYS => false,
xPDOTransport::UPDATE_OBJECT => true,
xPDOTransport::UNIQUE_KEY => 'category',
xPDOTransport::RELATED_OBJECTS => true,
xPDOTransport::RELATED_OBJECT_ATTRIBUTES => [
'Snippets' => [...],
'Chunks' => [...],
],
];
$vehicle = $builder->createVehicle($category, $attr);
$builder->putVehicle($vehicle);
$builder->pack();
השוואה: ידני לעומת אקסטרה מותאם אישית
| קריטריון | פיתוח ידני | אקסטרה מותאם אישית |
|---|---|---|
| התקנה | העתקת קבצים ידנית, שינוי DB | לחיצה אחת דרך מנהל החבילות |
| עדכונים | ידני בכל פעם | אוטומטי בשדרוג חבילה |
| ניידות | אתר אחד בלבד | כל אתר עם החבילה |
| תמיכה | תלוי במפתח | תיעוד, לקסיקונים, גרסאות |
שלבי פיתוח
- ניתוח – אנו לומדים את המשימה שלכם, מגדירים ישויות ואלמנטים.
- עיצוב – יצירת סכמת xPDO, עיצוב ממשק הניהול.
- פיתוח – כתיבת מודל, פרוססורים, סניפטים ופלאגינים.
- בנייה – אריזה לטרנספורט, בדיקת התקנה.
- מסירה – העברת ה-.transport.zip, תיעוד וגישה.
תוצרים
- אקסטרה מלא עם רכיב ניהול (ExtJS או ממשק MODX 3)
- מודל xPDO לטיפול בנתונים
- פרוססורי CRUD (getlist, get, create, update, remove)
- 2-3 סניפטים לפלט בצד הלקוח
- לקסיקונים (רוסית, אנגלית)
- תיעוד התקנה והגדרה
- גישה לשרת בדיקה לאימות
- חודש תמיכה חינם (תיקוני באגים, עדכונים)
- קוד מקור וסקריפטי בנייה
לוחות זמנים ומחירים
פיתוח אקסטרה ברמה בינונית אורך בדרך כלל בין שבועיים לחודש. אקסטרות פשוטות מתחילות מ-$500; פרויקטים מורכבים מתומחרים בנפרד. המחיר תלוי במספר הישויות, מורכבות הלוגיקה והצורך בממשק מותאם אישית. כדי לקבל הערכה מדויקת, שלחו את המפרט הטכני או תיאור המשימה שלכם. אנו ננתח ונציע פתרון.
צרו קשר להערכה מדויקת והזמינו פיתוח אקסטרה מותאם אישית – קבלו חבילה מוכנה עם תיעוד מלא ותמיכה. 95% מהלקוחות מציינים את קלות ההתקנה. קבלו ייעוץ לפרויקט שלכם היום.







