Skip to content

Creare un sito web (CMS) ​

Melis è, prima di tutto, un CMS. Questa pagina illustra il modello di contenuto — siti, pagine, template e plugin — e come una pagina viene renderizzata sul front office. È il modello mentale che ti serve prima di modificare i template o costruire un modulo sito.

v6 — Back-office React

Melis v6 mantiene lo stesso framework, gli stessi moduli e lo stesso modello di dati descritti qui. Ciò che è cambiato è l'interfaccia del back-office: ora funziona come un'applicazione React all'indirizzo /melis-react. Il CMS include strumenti "brick" nativi in React — una barra laterale con l'albero delle pagine più un editor di pagina a schede e una serie di strumenti laterali (Siti, Template, Stili, Lingue…). L'unica eccezione è la scheda Edition della pagina, che carica ancora il classico editor drag-and-drop in un iframe. Ogni strumento laterale è dotato di un interruttore New / Old che ti permette di passare allo strumento classico se ti serve. I concetti riportati di seguito sono invariati; è nuovo solo dove clicchi.

Il modello di contenuto ​

ConcettoChe cos'èTabella/e principale/i
SiteUn sito web. Ha una home page, delle lingue e uno o più domini per ambiente.melis_cms_site, melis_cms_site_domain
PageUn nodo nell'albero delle pagine del sito. Ha un tipo (site/folder/page), un template e dei contenuti.melis_cms_page_tree, melis_cms_page_published, melis_cms_page_saved
TemplateIl layout usato da una pagina — punta a un controller/action/view di un modulo sito.melis_cms_template
SEOSlug dell'URL e meta tag per singola pagina.melis_cms_page_seo
LanguageUna pagina può avere traduzioni collegate tra loro.melis_cms_lang, melis_cms_page_lang

Queste tabelle appartengono a MelisEngine, il motore del CMS — l'unica fonte di verità per il modello pagina/sito. Il back-office React le legge e le scrive solo attraverso i servizi del motore e i table gateway; non tocca mai lo schema direttamente. Vedi MelisEngine.

Le pagine sono versionate ​

Ogni pagina esiste in due versioni:

  • Saved (melis_cms_page_saved) — la bozza di lavoro che modifichi nel back-office.
  • Published (melis_cms_page_published) — la versione live servita sul front office.

Modifichi la bozza, poi pubblichi quando sei pronto. Il contenuto modificabile della pagina (vedi zone e plugin più avanti) è memorizzato nel record della pagina.

Template ​

Un template (melis_cms_template) è il ponte tra una pagina e il codice che la renderizza. Per il comune tipo di template ZF2, memorizza:

  • tpl_zf2_website_folder — il modulo sito (ad esempio MelisDemoCms),
  • tpl_zf2_controller, tpl_zf2_action — quale controller/action renderizza la pagina,
  • tpl_zf2_layout — il layout in cui racchiuderla.

Quindi una pagina → fa riferimento a un template → che instrada verso una view .phtml all'interno di un modulo sito.

Nel back-office React gestisci i template nello strumento laterale Templates (§ Creare un nuovo sito) — un elenco e un form nativi in React per nome, tipo, sito, layout, controller e action.

Contenuto modificabile: zone e plugin ​

I template espongono due tipi di aree modificabili, tramite i view helper:

MelisTag — zone modificabili semplici ​

Una zona HTML/testo/media con nome che un editor modifica inline (TinyMCE) nel back-office:

php
<?= $this->MelisTag($this->idPage, 'home-html-1', 'html', '<h1>Default heading</h1>') ?>

Il contenuto predefinito viene mostrato finché un editor non lo sovrascrive; il valore salvato è memorizzato nella pagina. Helper: vendor/melisplatform/melis-front/src/View/Helper/MelisTagsHelper.php.

MelisDragDropZone — plugin di templating ​

Una zona di rilascio in cui gli editor trascinano i plugin di templating — blocchi di contenuto riutilizzabili (uno slider, un elenco di news, un modulo di contatto):

php
<?= $this->MelisDragDropZone($this->idPage, 'dragdropzone_home_1') ?>

Helper: vendor/melisplatform/melis-front/src/View/Helper/MelisDragDropZoneHelper.php.

Un plugin di templating estende MelisEngine\Controller\Plugin\MelisTemplatingPlugin e implementa:

  • front() — restituisce i dati/la view renderizzati sul sito live,
  • back() — il form di configurazione mostrato nell'editor del back-office.

MelisCmsSlider e MelisCmsNews sono buoni plugin di riferimento; usa MelisTemplatingPluginCreator per generare lo scaffold del tuo. Gli editor rilasciano questi blocchi nella scheda Edition dell'editor di pagina — vedi più avanti.

Come una pagina viene renderizzata sul front office ​

Il front office è servito da MelisFront (il motore che visualizza i siti) sopra a MelisEngine (servizi pagina/dati). Questo rendering è interamente lato server ed è invariato in v6 — il back-office React si limita a ospitare l'anteprima modificabile, non ri-renderizza la pagina nel browser. In sintesi:

  1. Il vhost imposta MELIS_MODULE → seleziona il modulo sito da servire.
  2. Un URL come …/id/5 si risolve nella pagina con id 5 (rotta in vendor/melisplatform/melis-front/config/module.config.php). Anche gli URL SEO vengono mappati sugli id delle pagine.
  3. MelisEngine carica la pagina + il suo template (vendor/melisplatform/melis-engine/src/Service/MelisPageService.php).
  4. Il controller/action ZF2 del template renderizza la view .phtml del modulo sito.
  5. Le zone MelisTag e i plugin MelisDragDropZone vengono popolati dal contenuto pubblicato della pagina.
  6. Il risultato viene racchiuso nel layout del sito.

Modalità di modifica / anteprima

La stessa pagina può essere richiesta in modalità diverse: …/id/5 (live), …/id/5/preview (bozza salvata), …/id/5/renderMode/melis (modifica nel back-office — è ciò che mostra l'iframe Edition).

Anatomia di un modulo sito ​

Un modulo sito è un normale modulo Laminas che contiene i template, le view e gli asset di un sito web. Il riferimento è vendor/melisplatform/melis-demo-cms/ (vedi MelisDemoCms); i siti personalizzati risiedono solitamente sotto module/MelisSites/<YourSite>/:

MelisDemoCms/
├── config/
│   ├── module.load.php           # modules this site needs (MelisEngine, MelisFront, plugins…)
│   ├── module.config.php         # routes / controllers / services
│   ├── assets.config.php         # front-office CSS & JS
│   └── melis.plugins.config.php  # templating plugins available to templates
├── src/Controller/               # Home, Contact… (render the template views)
├── view/
│   ├── layout/                   # site layouts
│   └── melis-demo-cms/home/index.phtml   # a page template (uses MelisTag / MelisDragDropZone)
└── public/                       # css / js / images

Lavorare nel back-office React ​

In v6 costruisci i siti dal back-office React all'indirizzo /melis-react. Apri la sezione MelisCms nella barra laterale sinistra: mostra il pannello dell'albero delle pagine (i tuoi siti e le loro pagine) più un gruppo Site Tools.

La sezione MelisCms nella barra laterale React — albero delle pagine più Site Tools.

L'albero delle pagine ​

L'albero delle pagine è la mappa dei tuoi siti e di ogni pagina al loro interno. Si trova nella barra laterale sinistra, così resta visibile mentre lavori. Clicca una pagina per aprirla nell'editor; digita un nome per cercare; fai clic destro su un nodo per aggiungere una pagina figlia, vederne i dettagli, duplicarla, spostarla o eliminarla. Puoi anche spostare una pagina tramite drag-and-drop (i diritti lato server decidono cosa puoi spostare).

L'albero delle pagine React — siti e pagine; clicca per aprire, clic destro per le azioni.

L'editor di pagina — inserire contenuto in una pagina ​

Aprendo una pagina viene mostrato l'editor: una cornice nativa React (titolo della pagina + stato, pulsanti d'azione, barra delle schede) attorno al contenuto della scheda corrente. Le schede sono Properties · Edition · SEO · Languages (più le schede fornite da altri moduli — Historic, Analytics, Scripts…). I pulsanti d'azione includono Save, Publish, See (Preview / See online), Duplicate, Erase draft ed Delete.

  • Properties (React nativo) — il nome della pagina, il tipo (Page / Folder / Site), il template (layout), la lingua, la visualizzazione nel menu, lo stile e la tassonomia.

    La scheda Properties React.

  • Edition (editor classico in un iframe) — riempi la pagina. Viene renderizzata in tempo reale e tu trascini blocchi di contenuto (plugin) nelle zone del template (le aree MelisDragDropZone). Questa scheda è il classico editor drag-and-drop caricato all'interno della cornice React, quindi il pannello dei plugin, i layout delle drop-zone e gli editor rich-text sono esattamente come prima.

    La scheda Edition — pagina live con l'overlay drag-and-drop, all'interno della cornice React.

    Il pannello dei plugin — i blocchi di contenuto che puoi rilasciare sulla pagina.

  • SEO (React nativo) — l'URL descrittivo, i campi meta title/description e i campi di reindirizzamento.

  • Languages (React nativo) — crea e gestisce le versioni linguistiche della pagina.

Save vs Publish. Save scrive la bozza (Properties + SEO + il contenuto drag-drop, tutto in una sola azione); See → Preview mostra la bozza; Publish rende live la bozza corrente; Erase draft ripristina la versione pubblicata. Regola pratica: modifica liberamente, Save man mano che procedi, Preview per controllare, poi Publish.

I blocchi di contenuto standard ​

I blocchi che rilasci sulla pagina nella scheda Edition provengono da MelisFront. I più comuni: un blocco HTML (Text) e un blocco Media (entrambi modificati in loco), più i blocchi di configurazione impostati tramite un piccolo modale Properties — Menu, Breadcrumb, List-from-folder e il banner GDPR. Vedi MelisFront per il catalogo completo.

Un blocco HTML (Text) modificato in loco, con la barra degli strumenti WYSIWYG sulla pagina.

Creare un nuovo sito (panoramica) ​

Ad alto livello:

  1. Crea il sito nel back-office — barra laterale → Site Tools → Sites → + New site, poi la procedura guidata in 5 passaggi (Multilingual → Languages → Domains → Module → Summary), che crea il sito e la sua home page.

    Lo strumento Sites React — ogni riga è un intero sito web, con "+ New site".

  2. Fornisci un modulo sito sotto module/MelisSites/<YourSite>/ (controller + template .phtml + asset).

  3. Dichiara i template (melis_cms_template) che puntano al controller/action del tuo modulo — Site Tools → Templates.

  4. Costruisci l'albero delle pagine e assegna i template; aggiungi MelisTag/MelisDragDropZone alle tue view.

  5. Punta un vhost su public/ con SetEnv MELIS_MODULE "<YourSite>" (vedi Installazione).

  6. Pubblica e naviga il front office.

Una volta che un sito esiste, aprilo dallo strumento Sites per gestirlo tramite schede native React: Properties · Module Loading · Domains · Languages · Site Config · Translations · Scripts. La scheda Module Loading è dove attivi una funzionalità per un dato sito (con riordino tramite trascinamento dell'ordine di caricamento).

Inizia leggendo vendor/melisplatform/melis-demo-cms/ da cima a fondo — è l'esempio canonico e funzionante di ogni concetto presente in questa pagina.

File principali ​

AmbitoPercorso
Servizi CMS (pagine/siti)vendor/melisplatform/melis-cms/src/Service/
Brick CMS React (editor di pagina + strumenti laterali)vendor/melisplatform/melis-cms/ui-react/src/
Servizio pagina (engine)vendor/melisplatform/melis-engine/src/Service/MelisPageService.php
Rendering frontvendor/melisplatform/melis-front/
Helper delle zone modificabilivendor/melisplatform/melis-front/src/View/Helper/
Base dei plugin di templatingvendor/melisplatform/melis-engine/src/Controller/Plugin/MelisTemplatingPlugin.php
Sito demo di riferimentovendor/melisplatform/melis-demo-cms/

I moduli React che possiedono l'interfaccia — MelisCms, MelisFront e MelisEngine — documentano per intero gli strumenti, i plugin e il modello di dati.