כשהעמודים הסטנדרטיים לא מספיקים: בעיה אמיתית
בפרויקט אחד, היינו צריכים ליצור ממשק לניהול תוכניות שותפים עם חוקים גמישים. רכיבי Bitrix הסטנדרטיים לא התאימו—לוגיקה עסקית מורכבת עם זכויות גישה מותאמות אישית ואינטגרציה עם API חיצוני הייתה נדרשת. בנייה ידנית של קבצי אדמין הייתה מובילה לכפילות קוד ולבעיות עדכון. בחרנו בגישת D7—בקרים עם ניתוב, הגנת CSRF מובנית, וארכיטקטורה מודולרית. הפיתוח ארך 5 ימים במקום השבועיים הצפויים, וחסך חלק משמעותי מהתקציב עקב הפחתת זמן עבודה חוזרת. המהנדסים שלנו מחזיקים בתעודות "1C-Bitrix" ועובדים עם D7 מאז השקתו. פנו אלינו לתוצאות דומות.
למה לבחור בבקר MVC ב-Bitrix?
בקרים מבטלים קוד תבניתי: בדיקות גישה דרך prefilters, CSRF אוטומטי, תמיכה ב-JSON, וניהול סשנים. בקובץ אדמין קלאסי, אתה קורא ידנית ל-bitrix_sessid_post() ובודק זכויות. הניסיון של הצוות שלנו (מעל 50 פרויקטי Bitrix) מראה שמעבר לבקרים מקצר את זמן הפיתוח ב-1–2 ימים לכל עמוד. אנו מבטיחים יציבות במהלך עדכוני ליבה—כל ה-prefilters והניתובים מנוהלים בקוד, לא בקבצים. בנוסף, עלויות התחזוקה יורדות ב-20–30% הודות למבנה אחיד.
איך ליצור עמוד D7 מותאם אישית? שתי גישות
קובץ אדמין קלאסי (/bitrix/admin/my_page.php)—האפשרות הפשוטה ביותר לכלי עזר. הוא אינו דורש הגדרת ניתוב, אך כל בדיקות ה-CSRF וההרשאות מוטלות על המפתח.
<?php require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"); use Bitrix\Main\Loader; use Bitrix\Main\Localization\Loc; Loader::includeModule('my.module'); // Проверка прав if (!$APPLICATION->IsAdminPage() || !\CMain::GetUserRight("main") >= "S") { $APPLICATION->AuthForm("Доступ запрещён"); } $APPLICATION->SetTitle("Мой инструмент"); require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"); // Вывод содержимого страницы ?> <form method="post" action="<?= $APPLICATION->GetCurPage() ?>"> <?= bitrix_sessid_post() ?> <!-- поля формы --> <input type="submit" value="Выполнить"> </form> <?php require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php"); MVC דרך בקר—הדרך הנכונה לעמודים עם לוגיקה.
namespace MyProject\Controllers; use Bitrix\Main\Engine\Controller; use Bitrix\Main\Engine\ActionFilter; class ReportController extends Controller { public function configureActions(): array { return [ 'getReport' => [ 'prefilters' => [ new ActionFilter\Authentication(), new ActionFilter\HttpMethod(['GET', 'POST']), new ActionFilter\Csrf(), ], ], ]; } public function getReportAction(int $periodDays = 30): array { $data = \MyProject\Services\ReportService::build($periodDays); return ['data' => $data, 'total' => count($data)]; } } הבקר מעבד בקשות אוטומטית, בודק את אסימון ה-CSRF, ומחזיר JSON. הניתוב נרשם דרך <?php require_once($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_before.php"); use Bitrix\Main\Loader; use Bitrix\Main\Localization\Loc; Loader::includeModule('my.module'); // Проверка прав if (!$APPLICATION->IsAdminPage() || !\CMain::GetUserRight("main") >= "S") { $APPLICATION->AuthForm("Доступ запрещён"); } $APPLICATION->SetTitle("Мой инструмент"); require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/prolog_admin_after.php"); // Вывод содержимого страницы ?> <form method="post" action="<?= $APPLICATION->GetCurPage() ?>"> <?= bitrix_sessid_post() ?> <!-- поля формы --> <input type="submit" value="Выполнить"> </form> <?php require($_SERVER["DOCUMENT_ROOT"] . "/bitrix/modules/main/include/epilog_admin.php"); .
מדריך שלב-אחר-שלב: יצירת בקר לעמוד מותאם אישית
- הגדר את מרחב השמות ואת מחלקת הבקר, תוך הרחבה של
namespace MyProject\Controllers; use Bitrix\Main\Engine\Controller; use Bitrix\Main\Engine\ActionFilter; class ReportController extends Controller { public function configureActions(): array { return [ 'getReport' => [ 'prefilters' => [ new ActionFilter\Authentication(), new ActionFilter\HttpMethod(['GET', 'POST']), new ActionFilter\Csrf(), ], ], ]; } public function getReportAction(int $periodDays = 30): array { $data = \MyProject\Services\ReportService::build($periodDays); return ['data' => $data, 'total' => count($data)]; } }. - יישם את
\Bitrix\Main\Routing\Router::getInstance()->add(), תוך ציון prefilters לזכויות ו-CSRF. - צור מתודות פעולה (לדוגמה,
\Bitrix\Main\Engine\Controller,configureActions()) עם אימות פרמטרים. - רשום את הניתוב ב-
getListActionאו דרךsaveAction. - הגדר זכויות גישה עם
local/routes.phpאו מסננים מותאמים אישית. - שלב ממשק משתמש: השתמש ב-
Router::add()לרשימות, ב-ActionFilter\Permissionלטפסים.
מה השימוש בבקר MVC ב-Bitrix מביא
בקרים מבטלים קוד תבניתי: בדיקות גישה דרך prefilters, CSRF אוטומטי, תמיכה ב-JSON, וניהול סשנים. בקובץ אדמין קלאסי, אתה קורא ידנית ל-CAdminList ובודק זכויות. הניסיון של הצוות שלנו (מעל 50 פרויקטי Bitrix) מראה שמעבר לבקרים מקצר את זמן הפיתוח ב-1–2 ימים לכל עמוד. אנו מבטיחים יציבות במהלך עדכוני ליבה—כל ה-prefilters והניתובים מנוהלים בקוד, לא בקבצים.
עימוד וממשק משתמש: אינטגרציה עם D7
לרשימות נתונים השתמש ב-CAdminForm:
use Bitrix\Main\UI\PageNavigation; $nav = new PageNavigation('page'); $nav->allowAllRecords(false) ->setPageSize(20) ->initFromUri(); $result = \MyProject\Storage\OrderLogTable::getList([ 'select' => ['*'], 'order' => ['ID' => 'DESC'], 'count_total' => true, 'offset' => $nav->getOffset(), 'limit' => $nav->getLimit(), ]); $nav->setRecordCount($result->getCount()); לדפי רשימת אדמין, השתמש בממשק מוכן דרך bitrix_sessid_post() ו-\Bitrix\Main\UI\PageNavigation.
השוואת גישות: קובץ אדמין מול בקר
| קריטריון | קובץ אדמין קלאסי | בקר MVC |
|---|---|---|
| אבטחה | CSRF ידני | Prefilters מובנים |
| תחזוקה | קשה יותר | מודולרי |
| מהירות פיתוח | מהיר למשימות פשוטות | מהיר יותר למשימות מורכבות |
| עדכוני ליבה | סיכון לשבירה | יציבות |
לוחות זמנים ועלות
| סוג משימה | זמן משוער |
|---|---|
| עמוד אדמין פשוט (טופס + הצגת נתונים) | 2–3 ימים |
| עמוד עם רשימה, עימוד, מסנן, פעולות | 4–7 ימים |
| ממשק CRUD מלא לישות מותאמת אישית עם זכויות ויומנים | 1.5–2.5 שבועות |
העלות מחושבת באופן אישי. בממוצע, חיסכון בזמן בתחזוקה עומד על 20–30% בהשוואה לגישה הקלאסית. למידע נוסף על יתרונות D7, ראה תיעוד רשמי של 1C-Bitrix וב-ויקיפדיה.
מה כלול בעבודה
- עיצוב ארכיטקטורה (בקרים, ניתובים, תבניות)
- יישום לוגיקה עסקית על D7 עם מטמון וזכויות גישה
- אינטגרציה עם ממשק Bitrix (CAdminList, מסננים, עימוד)
- תיעוד API ומבנה קוד
- העברת גישה (מאגר, מסד נתונים, פאנל אדמין)
- הדרכה לצוות התמיכה
- אחריות של 3 חודשים על הפונקציונליות
הערת אבטחה נוספת
בבקרי D7, ניתן להגדיר prefilters לבקרת גישה, לדוגמה, `ActionFilter\Authentication` ו-`ActionFilter\Csrf`, מה שמבטל שגיאות ידניות. בקרים תומכים גם בניהול סשנים והגנה אוטומטית מפני XSS.עמוד D7 מותאם אישית אינו תחליף למערכת הרכיבים. זהו כלי למשימות שאינן מתאימות למודל הסטנדרטי: כלי אדמין, ממשקי ייבוא, לוחות מחוונים עם נתונים מצטברים. כשהם כתובים נכון, הם אינם מתנגשים עם עדכוני ליבה. קבל ייעוץ לפרויקט שלך—נעריך מורכבות וזמן בתוך יום אחד. הזמן הדגמה חינם.







