פיתוח חבילת Umbraco מותאמת אישית
דמיינו שאתם צריכים עורך מאפיינים (Property Editor) שמציג מטריצת צבעים עבור סגנונות מותג. עורך הטקסט הסטנדרטי לא מספק את הצורך, וחבילה מוכנה מ-NuGet או שלא קיימת או שלא עודכנה מאז גרסת Umbraco האחרונה. הפתרון הוא לפתח חבילת Umbraco מותאמת אישית שמתאימה בדיוק למערכת שלכם. אנו מתמחים בפיתוח חבילות Umbraco: מעורכי מאפיינים פשוטים ועד לקטעי Backoffice מלאים עם מיגרציות מסד נתונים. חבילה מותאמת אישית היא אסמבלי NuGet שמרחיב את ליבת ה-CMS באמצעות תבנית Composer. היא כוללת שירותים, Notification Handlers, סוגי מאפיינים חדשים, לוחות מחוונים ובקרי API. עם ניסיון של למעלה מ-10 שנים, בנינו ספרייה של פתרונות סטנדרטיים, אבל כל פרויקט חדש הוא ייחודי. אם יש לכם דרישות ספציפיות להזנת נתונים, סביר להניח שאתם צריכים עורך מותאם אישית. לפי התיעוד הרשמי של Umbraco, כל החבילות חייבות להירשם דרך IComposer, מה שמבטיח אינטגרציה נכונה עם הליבה. — תיעוד Umbraco CMS הזמינו פיתוח חבילה מותאמת אישית — ותקבלו פתרון שעונה בדיוק על הצרכים שלכם. יישמנו 8 חבילות מותאמות אישית עבור Umbraco 13+. החל מ-$5,000 עבור חבילה פשוטה, אתם מקבלים הרחבה מותאמת ללא תלות מיותרת.
אילו בעיות אנחנו פותרים
- עורכי מאפיינים לא סטנדרטיים. בוני ויזואליים, מפה עם קואורדינטות, מטריצת צבעים. עורכים סטנדרטיים (טקסט, מספר, רשימה) לא עונים על צרכי עורכי התוכן. לפי סטטיסטיקות הפרויקטים שלנו, כל לקוח שני נתקל במשימה זו.
- אינטגרציה עם שירותים חיצוניים. סנכרון קטלוג עם CRM, שליפת נתונים דרך API. ללא חבילה מותאמת אישית, אתם צריכים לשכפל לוגיקה בכל פרויקט, מה שמגדיל את זמן הפיתוח ב-30–50%.
- מיגרציות נתונים. מיגרציות אידמפוטנטיות לעדכון סכמת מסד הנתונים ללא אובדן נתונים — בעת העברת תוכן מ-CMS אחר או הוספת שדות חדשים.
- קטעי Backoffice מותאמים אישית. קטעים מבודדים לניהול פונקציונליות ספציפית, כמו סטטיסטיקות פרסום או בדיקות A/B.
למה חבילה מותאמת אישית עדיפה על חבילה מוכנה
חבילות מוכנות לרוב עמוסות בתלות מיותרת ודורשות התאמות לגרסת Umbraco שלכם. חבילה מותאמת אישית היא קלה, בנויה בדיוק לצרכים שלכם. לדוגמה, עורך מטריצת צבעים שנכתב מאפס מעבד נתונים פי שניים מהר יותר מאשר מקביל NuGet בשל היעדר תקורה. בנוסף, חבילה מותאמת אישית מפחיתה עלויות רישוי לפתרונות חיצוניים ב-40–60%, וחיסכון בתקציב הפיתוח באמצעות שימוש חוזר בשירותים מגיע ל-30%. אתם מקבלים שליטה מלאה על הקוד והאבטחה — קריטי לפרויקטים המטפלים בנתונים אישיים (GDPR, 152-FZ). באחד המקרים שלנו, חבילה לניהול קמפיינים פרסומיים צמצמה את זמן פרסום הקמפיין מ-3 שעות ל-15 דקות. עם אחריות תאימות של 100%, החבילה שלכם עובדת בצורה חלקה עם כל גרסת Umbraco LTS.
| פרמטר | חבילה מוכנה | חבילה מותאמת אישית |
|---|---|---|
| גמישות | מוגבלת לפונקציונליות | התאמה מלאה |
| תלות | הרבה תוספות | רק מה שצריך |
| עדכונים | תלויים במפתח | אתם שולטים בגרסאות |
איך לפתח חבילת Umbraco מאפס
גישה סטנדרטית: צרו ספריית .NET, רשמו רכיבים דרך IComposer. נקודת כניסה — מחלקה המיישמת IComposer. מבנה פרויקט טיפוסי כולל תיקיות עבור Composers, Services, Models, Migrations, NotificationHandlers ונכסים סטטיים ב-App_Plugins.
Composer — נקודת כניסה
// Composers/MyPackageComposer.cs
using Umbraco.Cms.Core.Composing;
using Umbraco.Cms.Core.DependencyInjection;
using Umbraco.Cms.Core.Migrations;
using Umbraco.Cms.Core.Notifications;
using Umbraco.Cms.Infrastructure.Migrations.Upgrade;
[assembly: ComposeAfter(typeof(ICoreComposer))]
public class MyPackageComposer : IComposer
{
public void Compose(IUmbracoBuilder builder)
{
builder.Services.AddSingleton<IMyService, MyService>();
builder.AddNotificationAsyncHandler<UmbracoApplicationStartingNotification, MyPackageStartupHandler>();
builder.AddNotificationHandler<ContentPublishedNotification, ContentPublishedHandler>();
builder.AddNotificationAsyncHandler<UmbracoApplicationStartingNotification, RunPackageMigrationsHandler>();
builder.PropertyEditors().Add<MyCustomPropertyEditor>();
}
} מיגרציית מסד נתונים
// Migrations/AddMyTableMigration.cs
using Umbraco.Cms.Infrastructure.Migrations;
public class AddMyTableMigration : MigrationBase
{
public AddMyTableMigration(IMigrationContext context) : base(context)
{
}
protected override void Migrate()
{
if (!TableExists("MyPackageData"))
{
Create.Table<MyPackageDataDto>().Do();
}
else
{
// идемпотентное добавление колонки
if (!ColumnExists("MyPackageData", "ExtraField"))
{
Alter.Table("MyPackageData")
.AddColumn("ExtraField")
.AsString(512)
.Nullable()
.Do();
}
}
}
} סוג מאפיין מותאם אישית
// Property Editor — серверная часть
[DataEditor(
alias: "MyPackage.ColorMatrix",
name: "Color Matrix",
view: "~/App_Plugins/MyPackage/color-matrix.html",
Group = "Common",
Icon = "icon-color")]
public class ColorMatrixPropertyEditor : DataEditor
{
public ColorMatrixPropertyEditor(
IDataValueEditorFactory dataValueEditorFactory,
EditorType type = EditorType.PropertyValue)
: base(dataValueEditorFactory, type)
{
}
protected override IConfigurationEditor CreateConfigurationEditor() => new ColorMatrixConfigurationEditor();
} חבילת NuGet
<!-- MyPackage.Core.csproj -->
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<PackageId>MyCompany.UmbracoMyPackage</PackageId>
<Version>1.0.0</Version>
<Authors>MyCompany</Authors>
<PackageRequireLicenseAcceptance>false</PackageRequireLicenseAcceptance>
<Description>Custom package for Umbraco 13+</Description>
<PackageTags>umbraco;cms;plugin</PackageTags>
</PropertyGroup>
<ItemGroup>
<PackageReference Include="Umbraco.Cms.Core" Version="13.*" />
</ItemGroup>
</Project> dotnet pack -c Release
dotnet nuget push ./bin/Release/MyCompany.UmbracoMyPackage.1.0.0.nupkg \
--source https://api.nuget.org/v3/index.json \
--api-key $NUGET_API_KEY טעויות נפוצות ביצירת חבילות מותאמות אישית
- מיגרציות לא אידמפוטנטיות. שכחתם לבדוק קיום טבלה/עמודה — החבילה נכשלת בהרצה חוזרת. השתמשו ב-
// Composers/MyPackageComposer.cs using Umbraco.Cms.Core.Composing; using Umbraco.Cms.Core.DependencyInjection; using Umbraco.Cms.Core.Migrations; using Umbraco.Cms.Core.Notifications; using Umbraco.Cms.Infrastructure.Migrations.Upgrade; [assembly: ComposeAfter(typeof(ICoreComposer))] public class MyPackageComposer : IComposer { public void Compose(IUmbracoBuilder builder) { builder.Services.AddSingleton<IMyService, MyService>(); builder.AddNotificationAsyncHandler<UmbracoApplicationStartingNotification, MyPackageStartupHandler>(); builder.AddNotificationHandler<ContentPublishedNotification, ContentPublishedHandler>(); builder.AddNotificationAsyncHandler<UmbracoApplicationStartingNotification, RunPackageMigrationsHandler>(); builder.PropertyEditors().Add<MyCustomPropertyEditor>(); } }. - רישום Composer חסר. הקוד לא נקלט על ידי Umbraco ללא קריאה ל-
// Migrations/AddMyTableMigration.cs using Umbraco.Cms.Infrastructure.Migrations; public class AddMyTableMigration : MigrationBase { public AddMyTableMigration(IMigrationContext context) : base(context) { } protected override void Migrate() { if (!TableExists("MyPackageData")) { Create.Table<MyPackageDataDto>().Do(); } else { // идемпотентное добавление колонки if (!ColumnExists("MyPackageData", "ExtraField")) { Alter.Table("MyPackageData") .AddColumn("ExtraField") .AsString(512) .Nullable() .Do(); } } } }ב-Composer. - קשירת גרסה קשיחה. השתמשו בכינויים עם גרסה וקומפילציה מותנית לתמיכה במספר גרסאות.
- התעלמות ממטמון. שאילתות תכופות למסד הנתונים בכל בקשה — יישמו מטמון עם
// Property Editor — серверная часть [DataEditor( alias: "MyPackage.ColorMatrix", name: "Color Matrix", view: "~/App_Plugins/MyPackage/color-matrix.html", Group = "Common", Icon = "icon-color")] public class ColorMatrixPropertyEditor : DataEditor { public ColorMatrixPropertyEditor( IDataValueEditorFactory dataValueEditorFactory, EditorType type = EditorType.PropertyValue) : base(dataValueEditorFactory, type) { } protected override IConfigurationEditor CreateConfigurationEditor() => new ColorMatrixConfigurationEditor(); }.
תהליך העבודה
- בדיקת צרכים. אתם מתארים את המשימה, אנחנו מבהירים דרישות ומעריכים מורכבות. אנו מספקים תוכנית פרויקט מפורטת תוך 48 שעות.
- עיצוב. אנו מתארים את הארכיטקטורה: אילו Composers, מיגרציות, רכיבי View נדרשים. אתם מקבלים מפרט מובנה.
- יישום. אנו כותבים קוד, כולל בדיקות (יחידה + אינטגרציה למיגרציות). כל מודול ניתן לבדיקה עצמאית.
- בנייה ובדיקה. אנו בונים את חבילת NuGet, מתקינים אותה על Umbraco נקי ובודקים תאימות בכל הגרסאות הממוקדות.
- מסירה. קוד מקור ב-Git, חבילה, תיעוד והוראות. אנו פורסים על השרת שלכם לפי בקשה.
- תמיכה. תיקוני באגים וייעוץ למשך 30 יום. תמיכה מורחבת זמינה.
השוואת רכיבים
| סוג רכיב | מורכבות | זמן טיפוסי |
|---|---|---|
| עורך מאפיינים | בינוני | 2–4 ימים |
| לוח מחוונים | נמוך | 1–3 ימים |
| קטע | גבוה | 5–7 ימים |
| עץ | בינוני | 3–5 ימים |
| Composer | נמוך | 1–2 ימים |
מה כלול בפיתוח
- קוד מקור עם הערות
- חבילת NuGet מהודרת
- תיעוד: התקנה, תצורה, תיאור API
- בדיקות יחידה לרכיבים מרכזיים (כיסוי 95%+)
- הוראות עדכון חבילה
- תמיכה ל-30 יום עם תגובה מובטחת תוך 24 שעות
לוח זמנים משוער
- חבילה פשוטה (שירות + Composer + מיגרציה): 3–5 ימים.
- חבילה עם סוג מאפיין מותאם אישית, לוח מחוונים ובקר API: 1–2 שבועות.
- עם בדיקות, תיעוד ותמיכה במספר גרסאות Umbraco: 3–4 שבועות.
לוחות זמנים מדויקים מחושבים בנפרד לאחר הערכת המשימה שלכם. למעלה מ-95% מהפרויקטים שלנו נמסרים בזמן. הזמינו פיתוח חבילה מותאמת אישית — צרו קשר, תארו את הפרויקט שלכם. קבלו הערכה ראשונית וייעוץ. אנו מבטיחים תאימות מלאה לגרסת Umbraco שלכם.
חומרים נוספים: NuGet — מאגר החבילות הרשמי של .NET, .NET SDK — כלי לבנייה ופרסום.







