Skip to content

MelisFront

نظام عرض الواجهة الأمامية الذي يحوّل عنوان URL إلى صفحة عامة مكتملة ويقدّم كتل المحتوى (إضافات الصفحة) التي يسحبها المحرّرون ويُفلتونها على الصفحات في الواجهة الخلفية المبنية على React. الحزمة melisplatform/melis-front.

الغرض

MelisFront هو زمن التشغيل الذي يحلّ عنوان ويب إلى صفحة Melis، ويُشغّل مسار العرض (التوجيه، تحسين محركات البحث، إضافات القوالب، التخطيط، التخزين المؤقت، تصغير الأصول) ويُسلّم استجابة HTML إلى الزائر. كما يُشغّل المعاينة الحيّة القابلة للتحرير عبر إعادة عرض أي صفحة في وضع melis. لا يملك MelisFront أي جداول قاعدة بيانات — فكل بيانات الصفحة/الموقع/القالب/تحسين محركات البحث تُقرأ من melis-engine، وهو المصدر الوحيد للحقيقة.

يُعدّ MelisFront أحد ثلاثيّ وثيق الترابط: melis-engine (طبقة البيانات)، وmelis-front (عرض الواجهة الأمامية)، وmelis-cms (محرّر الواجهة الخلفية). التغييرات على أيٍّ منها تتضمّن عادةً الاثنين الآخرين.

في الواجهة الخلفية المبنية على React

لا يملك MelisFront أي أداة React مستقلة: لا لبنة ui-react/، ولا ملف brick.manifest.json، ولا ملف react-api.php — فهو لا يظهر أبداً في الشريط الجانبي الأيسر لـ /melis-react. فسطح تعامله الكامل في الواجهة الخلفية هو مجموعة إضافات الصفحة (كتل المحتوى) التي تُهيّئها داخل محرّر صفحات MelisCms.

تلتقي بـ MelisFront عند تحرير صفحة: MelisCms ← افتح صفحة ← تبويب Edition. تبويب Edition هذا هو محرّر الصفحات الكلاسيكي بالسحب والإفلات المعروض داخل إطار iframe داخل قشرة React (/melis/react-tool-page?key=meliscms_page). داخله تسحب كتل MelisFront إلى المناطق وتفتح نافذة Properties الخاصة بها. لا يقوم React سوى باستضافة ذلك المحرّر القديم؛ ولا يُسهم MelisFront بأي مكوّن React خاص به.

هناك نوعان من الكتل:

  • كتل الوسوم (Tag blocks) تُحرّر في مكانها على الصفحة — HTML (نص منسّق) وMedia (صورة/ملف). بدون نافذة منبثقة.
  • كتل التهيئة (Config blocks) تُعدّ عبر نافذة Properties منبثقة — Menu وBreadcrumb وList-from-folder وGDPR banner. وهي تولّد المحتوى من شجرة الصفحات / تهيئة الموقع.

تفعيله

أضِف إلى config/melis.module.load.php:

php
return [
    'MelisFront',
];

التبعية المُعلَنة لـ Melis: melisplatform/melis-core. وفي زمن التشغيل يستهلك أيضاً خدمات MelisEngine. ترتيب التحميل: melis-coremelis-frontmelis-enginemelis-cms.

كتل الوسوم — التحرير في المكان

HTML (نص)

الكتلة الأساسية: منطقة نص منسّق (TinyMCE) للعناوين والفقرات والروابط والمحتوى المنسّق. تُحرّر مباشرةً على الصفحة، بدون نافذة Properties. صنف الإضافة MelisFrontTagHtmlPlugin.

كتلة HTML/Text في محرّر الصفحات مع شريط أدوات TinyMCE الكامل

Media

تضع صورة أو ملفاً من مكتبة الوسائط. تُحرّر أيضاً في مكانها عبر شريط أدوات مُدمج مع عنصر نائب "Add media content here". صنف الإضافة MelisFrontTagMediaPlugin.

كتلة Media في مكانها مع العنصر النائب Add media content here

كتل التهيئة — نافذة Properties

تُعدّ كتل التهيئة عبر نافذة Properties منبثقة صغيرة تعرضها المنصّة. الحقلان المتكرّران هما القائمة المنسدلة Template (MelisEnginePluginTemplateSelect، الحقل template_path) التي تختار عرض .phtml، ومُنتقي الصفحة (MelisText مع زرّ fa fa-sitemap) الذي يحدّد الصفحة الأولى/الأصل في الشجرة. تُعلن كل كتلة تهيئة نافذتها بوصفها melis.modal_form (مواصفة نموذج Laminas) في config/plugins/<Plugin>.config.php؛ وليس هناك مكوّن React خاص بكل إضافة.

يبني قائمة تنقّل تلقائياً من شجرة الصفحات. حقول النافذة: Template وStarting page. الإضافة MelisFrontMenuPlugin (الحقل pageIdRootMenu).

نافذة Properties لكتلة Menu مع حقلَي Template وStarting page

يعرض مسار "أنت هنا" (Home › Section › Page). حقول النافذة: Template (الافتراضي MelisFront/breadcrumb) وStarting page. الإضافة MelisFrontBreadcrumbPlugin (الحقل pageIdRootBreadcrumb).

نافذة Properties لكتلة Breadcrumb مع حقلَي Template وStarting page

List-from-folder

يأخذ مجلداً في شجرة الصفحات ويسرد صفحاته الفرعية تلقائياً. حقول النافذة: Template (كيفية عرض كل عنصر) وParent page (المجلد المصدر). الإضافة MelisFrontShowListFromFolderPlugin (الحقل pageIdFolder).

نافذة Properties لـ List-from-folder مع حقلَي Template وParent page

GDPR banner

شريط ملفات تعريف الارتباط/الموافقة المعروض على الموقع العام. لا تحتاج نافذته سوى إلى Template؛ أما الصياغة فتأتي من نصوص GDPR الخاصة بالموقع. الإضافة MelisFrontGdprBannerPlugin.

نافذة Properties لشريط GDPR مع حقل Template وحيد

حقول نافذة التهيئة

الإضافةحقول النافذة (الاسم / النوع)القالب الافتراضي
Breadcrumbtemplate_path (MelisEnginePluginTemplateSelect) · pageIdRootBreadcrumb (MelisText، sitemap)MelisFront/breadcrumb
Menutemplate_path · pageIdRootMenu (MelisText، sitemap)MelisFront/menu
List-from-foldertemplate_path · pageIdFolder (MelisText، sitemap)MelisFront/show-list-from-folder
GDPR bannertemplate_path فقطMelisFront/gdpr-banner

يقوم Apply بإرسال القيم رجوعاً عبر طبقة السحب والإفلات، التي تحفظها في XML الجلسة الخاص بالصفحة. لا يشارك React في هذه الدورة؛ فواجهة الإضافة قائمة بالكامل على PHP/JS القديم داخل إطار Edition.

الخدمات الرئيسية

اسم الخدمة المستعارالدور
MelisFrontHeadيدير <title> الصفحة، ووصف meta، والرابط القانوني (canonical)، ويحقن أصول CSS/JS الخاصة بالإضافات.
MelisSiteConfigServiceيقرأ التهيئة لكل موقع حسب المفتاح أو الصفحة أو اللغة — دمج ملف + قاعدة بيانات.
MelisSiteTranslationServiceالبحث عن مفتاح/نص الترجمة لكل موقع وعمليات CRUD، مع تخزين مؤقت لكل موقع.
MelisTranslationServiceترجمات الوحدة/اللغة المحلية (نصوص الواجهة الخلفية)، مع تخزين مؤقت.
MinifyAssetsيبني bundle.css / bundle.js لكل موقع باستخدام matthiasmullie/minify.
MelisFrontNavigationمصنع تنقّل يبني شجرة Laminas\Navigation من شجرة صفحات المحرّك.

عرض الواجهة الأمامية

التوجيه

المسار الأمامي الرئيسي هو نمط Regex يطابق .../id/{idpage}، ويُوجَّه إلى MelisFront\Controller\Index::index. المسارات الفرعية: /renderMode/melis (وضع تحرير الواجهة الخلفية الذي يستخدمه MelisCms) و/preview (معاينة النسخة المحفوظة). المسارات الخاصة: sitemap(.xml) و/css/plugin-width.css و/melissearchindex/… و/melispluginrenderer (عرض إضافة واحدة عبر AJAX) و/minify-assets.

مسار العرض (المستمعون)

مربوطة في src/Module.php عبر EVENT_DISPATCH وEVENT_FINISH (~19 مستمعاً في المجموع):

المرحلةالمستمعون
EVENT_LOAD_MODULES_POSTMelisFrontSEORouteListener، MelisFrontSiteConfigListener، MelisFrontMiniTemplateConfigListener
EVENT_DISPATCHMelisFrontXSSParameterListener، MelisFrontHomePageRoutingListener / …HomePageIdOverrideListener، MelisFrontSEODispatchRouterRegularUrlListener (التحقق من الصفحة، 404/301، يُطلق melisfront_site_dispatch_readyMelisFront404To301Listener، MelisFront404CatcherListener
EVENT_FINISHMelisFrontPluginsToLayoutListener (CSS/JS الخاص بالإضافات)، MelisFrontSEOMetaPageListener (العنوان/الوصف/canonical)، MelisFrontAttachCssListener (CSS الخاص بالصفحة)، MelisFrontLayoutListener (تخطيط الواجهة الأمامية أو تخطيط الواجهة الخلفية + TinyMCE في وضع melisMelisFrontPageCacheListener، MelisFrontMinifiedAssetsCheckerListener

إضافات القوالب (إضافات المتحكّم)

تُوسّع جميعها MelisEngine\Controller\Plugin\MelisTemplatingPlugin، ومُسجّلة تحت controller_plugins. الكتل الظاهرة في محرّر React هي مجموعة فرعية منها:

اسم الإضافة المستعارالكتلة
MelisFrontTagHtmlPluginمنطقة HTML / نص منسّق قابلة للتحرير في المكان.
MelisFrontTagTextareaPluginمنطقة نص عادي.
MelisFrontTagMediaPluginصورة / ملف من مكتبة الوسائط.
MelisFrontMenuPluginقائمة تنقّل مبنية من شجرة الصفحات.
MelisFrontBreadcrumbPluginمسار Breadcrumb (Home › … › الصفحة الحالية).
MelisFrontShowListFromFolderPluginيسرد الصفحات الفرعية من مجلد مختار تلقائياً.
MelisFrontDragDropZonePluginحاوية تخطيط (منطقة إفلات للإضافات الأخرى).
MelisFrontBlockSectionPluginحاوية كتلة/قسم قابلة لإعادة الاستخدام.
MelisFrontGenericContentPluginكتلة محتوى عامة الأغراض.
MelisFrontGdprBannerPluginشريط موافقة ملفات تعريف الارتباط / GDPR.
MelisFrontGdprRevalidationPluginيعيد طلب الموافقة عند تغيّر سياسة GDPR.
MelisFrontSearchResultsPluginيعرض نتائج البحث الداخلي في الموقع.
MiniTemplatePluginيُدرج قالباً مصغّراً جاهزاً بنقرة واحدة.

متحكّم عارض الإضافات

يُعيد MelisFront\Controller\MelisPluginRendererController عرض إضافة واحدة عند الطلب — وهذا ما يستدعيه إطار Edition عندما تُفلت أو تُحرّر كتلة:

  • getPluginAction() (المسار /melispluginrenderer) — عرض إضافة واحدة عبر AJAX.
  • editPluginAction، dndLayoutAction، dndUpdateOrderAction، dndRemoveAction — تدفّقات السحب والإفلات وتحرير الإضافات.

مساعدو العرض (View helpers)

تُستخدم داخل قوالب .phtml الخاصة بالموقع (مُسجّلة تحت view_helpers):

اسم المساعد المستعارالاستخدام
MelisTagيُعلن منطقة قابلة للتحرير (HTML أو وسائط) يملؤها المحرّرون في مكانها.
MelisLinkيُخرج عنوان URL للصفحة المُحسَّن لمحركات البحث (يبقى صحيحاً إذا نُقلت الصفحة).
MelisMenuيعرض قائمة تنقّل من شجرة الصفحات.
MelisDragDropZoneيعرض منطقة سحب وإفلات تستضيف إضافات أخرى.
siteTranslateيُخرج نص ترجمة موقع حسب المفتاح.
SiteConfigيقرأ قيمة تهيئة موقع.

يتوفّر أيضاً مساعدو اللغة/الصفحة الرئيسية لروابط نسخ اللغة ورابط الصفحة الرئيسية.

التنقّل

يُوسّع MelisFrontNavigation (src/Navigation/Factory/) مصنع تنقّل Laminas لبناء كائن Laminas\Navigation من شجرة صفحات المحرّك (MelisEnginePage / MelisEngineTree)، الذي يعرضه مساعدا Menu وBreadcrumb.

تصغير الأصول

يبني MinifyAssetsService (المدعوم بـ matthiasmullie/minify) ملفَّي bundle.css / bundle.js لكل موقع. ويحقنهما MelisFrontMinifiedAssetsCheckerListener (مع كسر التخزين المؤقت) عند وجودهما. أطلِق عملية بناء عبر المسار /minify-assets.

جداول قاعدة البيانات

لا يملك MelisFront أي جداول قاعدة بيانات. فكل بيانات الصفحة والموقع واللغة وتحسين محركات البحث والترجمة يملكها melis-engine وmelis-cms.

مثال

الاستخدام النموذجي في قالب .phtml الخاص بموقع واستدعاءات خدمة PHP:

php
// Inside a site page template (.phtml)
<?= $this->MelisMenu($idPage); ?>                         // navigation menu from the page tree
<a href="<?= $this->MelisLink($targetPageId); ?>"></a>  // SEO-friendly page link
<?= $this->MelisTag($idPage, 'zone_main', 'html'); ?>    // editable HTML zone
<?= $this->siteTranslate('btn_send'); ?>                  // site translation string
<?= $this->SiteConfig('contact_email'); ?>               // site config value
php
// Reading site config and translations in PHP
$siteConfig = $serviceManager->get('MelisSiteConfigService');
$email = $siteConfig->getSiteConfigByKey('contact_email', $siteId);

$tr = $serviceManager->get('MelisSiteTranslationService')
        ->getEntryByTextAndSiteId('btn_send', $siteId, $langId);
php
// Hooking the render pipeline (after page validation, before render)
$sharedEvents->attach('MelisFront', 'melisfront_site_dispatch_ready', function ($e) {
    $params = $e->getParams(); // page id, site, renderMode…
    // e.g. force a redirect, add data to the layout, A/B-test…
}, 50);

الملفات الرئيسية

الشأنالمسار
تمهيد الوحدة + ربط المستمعينvendor/melisplatform/melis-front/src/Module.php
المسارات والخدمات والإضافات والمساعدون والتخزين المؤقتvendor/melisplatform/melis-front/config/module.config.php
تهيئة الإضافات (الإعدادات الافتراضية للواجهة الأمامية + melis.modal_form)vendor/melisplatform/melis-front/config/plugins/
مستمعو مسار العرضvendor/melisplatform/melis-front/src/Listener/
الخدمات (Head، SiteConfig، Translations، Minify)vendor/melisplatform/melis-front/src/Service/
إضافات القوالب (كتل المحتوى)vendor/melisplatform/melis-front/src/Controller/Plugin/
متحكّم عارض الإضافاتvendor/melisplatform/melis-front/src/Controller/MelisPluginRendererController.php
مساعدو العرضvendor/melisplatform/melis-front/src/View/Helper/
مصنع التنقّلvendor/melisplatform/melis-front/src/Navigation/Factory/

اطّلع أيضاً على: melis-engine، melis-cms، melis-core