feat(cms): refactor page content management and implement detailed editors

Refactor the CMS page content system to use a more modular configuration-driven approach. This replaces the monolithic `pageContentConfig.js` with individual configuration files for each page and introduces a shared field utility to standardize editor components.
Key changes:
- Implement a generic `_renderSingletonPageView` helper to reduce duplication across controllers.
- Enhance `_createPageContentController` with `normalizeForEditor`, `normalizeForApi`, and `preparePayload` hooks for custom data transformation.
- Create dedicated configuration and view structures for Partnerships, History, Accreditation, Admissions, and Policies pages.
- Add a specialized section editor for Policies to manage complex nested content.
- Improve the frontend `page-content-editor.js` with support for visibility logic, auto-sequencing for arrays, and URL synchronization for active tabs.
- Update data JSON files to align with the new schema.
This commit is contained in:
Tống Thành Đạt
2026-04-20 19:43:28 +07:00
parent 8b6bf5fe6e
commit 7df3a6f6bf
58 changed files with 7501 additions and 844 deletions
+39 -14
View File
@@ -2,13 +2,13 @@
"hero": {
"badge": "Global NetworkGlobal NetworkGlobal Netwo",
"title": "Industry & Academic Partnerships.Industry & Academic Partnerships.Industry & Academic Part",
"description": "Connecting our students with leading organizations for real-world experience, research opportunities, and career advancement.Connecting our students with leading organizations for real-world experience, research opportun",
"description": "Global NetworkGlobal NetworkGlobal NetwoGlobal NetworkGlobal NetworkGlobal NetwoGlobal NetworkGlobal NetworkGlobal NetwoGlobal NetworkGlobal NetworkGlobal NetwoGlobal NetworkGlobal NetworkGlobal NetwoGlobal NetworkGlobal",
"linkLabel": "Explore DirectoryExplore DirectoryExplor",
"image": "/uploads/partnerships/kVI17_2B.webp",
"imageAlt": "Modern university campus and corporate office buildingModern university campus and corporate office buildingModern unive"
},
"directory": {
"heading": "Partner DirectoryPartner DirectoryPartner DirectoryPartner DirectoryPa",
"heading": "Partner DirectoryPartner DirectoryPartne",
"description": "Discover the organizations shaping the future of education with us.Discover the organizations shaping the future of education with us.Discover the organizations shaping the future ",
"tabs": [
"All PartnersAll PartnersAll Pa",
@@ -89,27 +89,47 @@
]
},
"cta": {
"heading": "Join the ecosystem.Join the ecosystem.Join the ecosystem.Join the ecosystem.Join",
"heading": "Join the ecosystem",
"description": "Partner with London Academy of Management and Sciences to build talent pipelines, collaborate on research, and shape the next generation of leaders.Partner with London Academy of Management and Sciences to build talent p",
"buttonLabel": "Become a partnerBecome a partnerBecome a"
},
"inquiryForm": {
"title": "Partnership InquiryPartnership InquiryPartnership InquiryPar",
"fields": {
"firstName": {
"fields": [
{
"id": "firstName",
"label": "Partnership InquiryPartnership",
"placeholder": "Partnership InquiryPartnership InquiryPa"
"placeholder": "Partnership InquiryPartnership InquiryPa",
"type": "text",
"width": "half",
"required": true,
"options": []
},
"lastName": {
{
"id": "lastName",
"label": "Partnership InquiryPartnership",
"placeholder": "Partnership InquiryPartnership InquiryPa"
"placeholder": "Partnership InquiryPartnership InquiryPa",
"type": "text",
"width": "half",
"required": true,
"options": []
},
"organization": {
{
"id": "organization",
"label": "Partnership InquiryPartnership InquiryPa",
"placeholder": "Partnership InquiryPartnership InquiryPartnership InquiryPar"
"placeholder": "Partnership InquiryPartnership InquiryPartnership InquiryPar",
"type": "text",
"width": "full",
"required": true,
"options": []
},
"partnershipType": {
{
"id": "partnershipType",
"label": "Partnership InquiryPartnership InquiryPa",
"placeholder": "",
"type": "select",
"width": "full",
"required": true,
"options": [
"Partnership InquiryPartnership InquiryPartnership ",
"Partnership InquiryPartnership InquiryPartnership ",
@@ -117,11 +137,16 @@
"Partnership InquiryPartnership InquiryPartnership "
]
},
"message": {
{
"id": "message",
"label": "Partnership InquiryPartnership",
"placeholder": "Partnership InquiryPartnership InquiryPartnership InquiryPartnership InquiryPart"
"placeholder": "Partnership InquiryPartnership InquiryPartnership InquiryPartnership InquiryPart",
"type": "textarea",
"width": "full",
"required": true,
"options": []
}
},
],
"submitLabel": "Partnership InquiryPartnership InquiryPa"
}
}