Concetti fondamentali
WebBlocks CMS utilizza un modello di contenuto relazionale esplicito, costruito attorno a pagine, layout, slot e blocchi.
Modello dei contenuti
La struttura di base è:
Page -> Layout -> Slots -> Blocks
- Una pagina possiede il routing, il contesto di sito, lo stato del flusso di lavoro e la scelta del layout.
- Una pagina può possedere anche righe relazionali di Page Assets con riferimenti a file CSS e JS con ambito di pagina.
- Un layout definisce le regioni strutturali disponibili.
- Gli slot sono aree di posizionamento denominate all'interno del layout, come
header,main,sidebarefooter. - I blocchi sono le effettive unità di contenuto collocate negli slot e, quando supportato, annidate sotto altri blocchi.
Le pagine non memorizzano JSON libero da page builder. Contenuti e relazioni sono mantenuti in tabelle relazionali, così la struttura resta esplicita e verificabile.
Page Assets
- Page Assets è una funzionalità core del CMS per i riferimenti a file CSS e JS con ambito di pagina.
- Page Assets è memorizzato in modo relazionale in
page_assets, non all'interno del JSON dipages.settings. - La V1 accetta solo percorsi locali dell'installazione sotto
/site/.... - URL esterni, CSS inline, JS inline, query string, frammenti, traversal ed estensioni non corrispondenti vengono rifiutati.
- Attualmente il CSS viene reso solo nell'head del documento pubblico.
- Attualmente il JS viene reso solo nell'head del documento pubblico con
defer. - Gli asset pubblici di proprietà del CMS risiedono sotto
public/cms/. public/storageè il symlink allo storage pubblico di Laravel perstorage/app/publiced è separato dagli asset di override di sito o di pagina.- I percorsi pubblici canonici degli asset sono
public/site/{site_handle}/css/site.css,public/site/{site_handle}/js/site.js,public/site/{site_handle}/pages/{page_slug}/page.cssepublic/site/{site_handle}/pages/{page_slug}/page.js. - Page Assets viene reso solo per la pagina pubblica proprietaria ed è escluso dai layout di amministrazione e dalle pagine non correlate.
- Revisioni di pagina, duplicazione, spostamento ed esportazione o importazione del sito trattano Page Assets come configurazione di proprietà della pagina.
- L'importazione JSON di una singola pagina può anche creare righe in
page_assetsquando il payload usa percorsi locali/site/...validi che superano le regole di validazione esistenti per i Page Assets. - L'indicizzazione della ricerca non tratta i percorsi dei Page Assets come contenuto del corpo della pagina.
Ambito di sito della pagina
- Una pagina appartiene esattamente a un sito alla volta.
- Il normale form
Edit PagemantieneSitein sola lettura per le pagine esistenti. - La duplicazione di una pagina crea un nuovo record di pagina nello stesso sito o in un altro sito accessibile.
- Gli spostamenti di pagina tra siti usano un flusso di lavoro dedicato
Move to another siteanziché una modifica di campo inline. - La duplicazione delle pagine usa un flusso di lavoro dedicato
Duplicate pageanziché appoggiarsi al normale form di pagina. - Lo spostamento viene eseguito come transazione controllata, così
pages.site_idepage_translations.site_idrestano validi rispetto alla chiave esterna composta(page_id, site_id). - La duplicazione avvia sempre la nuova pagina come bozza e copia lo stato dei contenuti senza copiare la cronologia delle revisioni della pagina di origine.
- Lo spostamento conserva l'id della pagina, le traduzioni, gli slot, i blocchi di proprietà della pagina, le traduzioni dei blocchi, l'ordine, lo stato del flusso di lavoro e la cronologia delle revisioni.
- La duplicazione conserva layout, traduzioni, slot, blocchi di proprietà della pagina, relazioni tra blocchi annidati, traduzioni dei blocchi e riferimenti compatibili agli Shared Slot, ma crea un nuovo id di pagina.
- I conflitti di percorso sul sito di destinazione sono errori di validazione bloccanti nella versione attuale.
- I riferimenti agli Shared Slot devono poter essere rimappati su Shared Slot compatibili con lo stesso handle nel sito di destinazione, altrimenti lo spostamento viene bloccato.
- La duplicazione nello stesso sito conserva i riferimenti agli Shared Slot esistenti.
- La duplicazione tra siti rimappa solo gli Shared Slot compatibili con lo stesso handle nel sito di destinazione.
- Quando una duplicazione tra siti non riesce a rimappare alcuni slot basati su Shared Slot, il comportamento predefinito resta il blocco della duplicazione.
- Il flusso di lavoro di duplicazione può ora disattivare esplicitamente solo quegli slot incompatibili della pagina duplicata, anziché salvare un riferimento a uno Shared Slot di un altro sito non valido.
- Questa alternativa opzionale scrive lo slot della pagina duplicata come
disabled, azzerashared_slot_id, lascia invariata la pagina di origine e in questa versione non copia gli alberi di blocchi degli Shared Slot nella pagina duplicata. - Gli strumenti di portabilità a livello di sito, come Export / Import e Site Clone, restano separati dagli spostamenti e dalla duplicazione delle pagine.
Admin -> Pages -> Import Pageè un flusso di lavoro di portabilità con ambito di pagina. Crea una nuova pagina da un payload JSON documentatowebblocks.cms.page.v1ed è intenzionalmente separato dall'Export / Import a livello di sito.- L'importazione V1 di una singola pagina crea sempre una nuova pagina e la importa sempre come bozza.
- L'importazione V1 di una singola pagina non importa la cronologia delle revisioni della pagina di origine.
- Nell'importazione di una singola pagina, gli slot di pagina basati su Shared Slot devono fare riferimento a uno Shared Slot compatibile del sito di destinazione tramite handle stabile. Nella V1 l'importatore non crea automaticamente Shared Slot.
Identità del sito
- L'identità di prodotto di WebBlocks CMS è fissa nella shell di amministrazione e proviene da
App\Support\WebBlocks. - Project Identity è il contesto di amministrazione a livello di installazione configurato in
Admin -> System -> Settings. - Project Identity comprende attualmente
Project NameeProject Tagline. - Project Identity viene usato solo per il contesto della topbar di amministrazione e per i titoli del browser nell'area di amministrazione.
- Project Identity non modifica il brand fisso della sidebar di WebBlocks CMS, il footer di versione della sidebar, i metadati pubblici del sito, la favicon pubblica, l'ambito della ricerca pubblica o i valori SEO delle traduzioni di pagina.
- I record di sito possiedono l'identità e i metadati rivolti al pubblico.
sites.nameresta il nome interno del record nell'amministrazione.display_nameè l'override opzionale del nome pubblico del sito.taglineè testo pubblico opzionale per il sito.seo_title,seo_descriptioneseo_keywordssono metadati di fallback a livello di sito.favicon_media_idesocial_image_media_idsono riferimenti media opzionali a livello di sito per l'output dell'head pubblico.site_variablessono valori di testo semplice riutilizzabili e opzionali a livello di sito, per la sostituzione controllata di token pubblici.- Anche le righe di traduzione di pagina possiedono campi di override SEO localizzati come
seo_title,seo_description,seo_keywords,og_title,og_descriptioneog_image_media_id. - Questo mantiene i metadati pubblici della pagina dipendenti dalla lingua e fuori dalle impostazioni JSON condivise della pagina.
Media
Mediaè il nome canonico dei file caricati condivisi nell'intero runtime attivo del CMS.- I nomi tecnici attivi usano ora
Media,media_id,media,media_folderseblock_medianel codice di runtime corrente, nelle richieste, nelle revisioni e nei pacchetti di trasferimento del sito. - I nomi legacy
Assetrestano solo per i wrapper di compatibilità, le migrazioni storiche e la normalizzazione di payload o archivi più vecchi. Admin -> Mediamantiene il titolo principale dell'elencoMediae il titolo della card del listatoMedia Library.- Nell'elenco Media, sia il link del titolo sia l'icona della matita aprono
Edit Media: {title}e portano con sé un URL di ritorno sicuro all'elenco filtrato corrente. - L'icona dell'occhio resta l'azione di anteprima ingrandita in modale dall'elenco.
- La rotta di dettaglio
/webadmin/media/{id}reindirizza a/webadmin/media/{id}/edit, così i link di dettaglio dei media portano alla schermata di modifica canonica. Edit Mediaunisce anteprima, dettagli del file, metadati, organizzazione, utilizzo e gestione della zona di pericolo in un'unica schermata.Copy public URLsi trova ora nell'areaFile Detailsdella schermata di modifica anziché nella colonna delle azioni dell'elenco.- L'eliminazione segue il modello standard modale di amministrazione più
Danger Zoneanziché il markup di conferma del browser.
Site Variables
- Le Site Variables sono memorizzate in modo relazionale in
site_variables. - Sono record ordinati con ambito di sito, dotati di chiave, etichetta, valore, stato di abilitazione e ordinamento.
- La sintassi dei token pubblici supportata è esattamente
{{ site.variable_key }}, con spazi interni opzionali. - Le chiavi vengono normalizzate in snake_case minuscolo e devono corrispondere al pattern conservativo
^[a-z][a-z0-9_]*$. - Token sconosciuti, variabili disabilitate, chiavi non valide e token non di sito restano invariati.
- La sostituzione è solo testuale. Non è un motore di template generico.
- Non sono supportati condizionali, cicli, chiamate a funzioni, accesso a env, accesso alla config, esecuzione di PHP, variabili annidate o espressioni arbitrarie.
- La sostituzione avviene solo durante il rendering pubblico condiviso e l'indicizzazione della ricerca pubblica.
- I form e le anteprime di amministrazione conservano il testo del token così come è memorizzato.
- I valori delle variabili sono trattati come testo semplice. Nei contesti pubblici che supportano HTML vengono inseriti come testo con escape, non come markup eseguibile.
Page Builder
La modifica avviene attraverso gli slot.
Flusso tipico:
- Create una pagina.
- Assegnate un layout.
- Modificate gli slot del layout.
- Aggiungete e ordinate i blocchi all'interno di quegli slot.
I blocchi possono avere relazioni padre-figlio, il che consente strutture di contenuto raggruppate senza ridurre il modello a blob opachi.
Blocchi
I blocchi sono le unità editoriali riutilizzabili del CMS.
- I dati condivisi contengono struttura, posizionamento, asset e impostazioni operative.
- I dati tradotti contengono il testo rivolto all'utente per ciascuna lingua.
- I contenuti rivolti all'utente non sono memorizzati in blob JSON arbitrari.
I blocchi di navigazione di sistema seguono la stessa regola relazionale. Navbar mantiene l'handle persistito sticky-navbar per compatibilità, ma ora si comporta come un blocco contenitore primitivo: rende solo nav.wb-navbar più i blocchi figli annidati. Da solo non rende il markup del brand, i link di menu, le azioni di header o un contenitore forzato.
La composizione della Navbar è relazionale anziché guidata da JSON:
Navbarpossiede solo la semantica del wrapper e un'impostazione condivisaPosition.Containerpossiede il vincolo di larghezza. I container legacy continuano per compatibilità a usare per impostazione predefinita il flusso impilato, maFlow = Nonerende Container neutro rispetto al layout, così i blocchi di layout figli controllano la composizione.Clusterè la primitiva di layout orizzontale o raggruppato. Le sue impostazioni controllano larghezza, giustificazione, allineamento sull'asse trasversale, mandata a capo e spaziatura.Stackresta la primitiva di flusso verticale.Navbar Brandpossiede il logo e il testo del brand.Navbar Navigationpossiede la selezione del menu e rende inavigation_itemsdel sito usando le classi navbar di WebBlocks UI. Sugli schermi stretti rende anche un pulsante burger accessibile che apre lo stesso menu tramite il comportamento dropdown di WebBlocks UI, lasciando brand e azioni di header nella riga principale della navbar.Header Actions,Search Form,Containere altri blocchi compatibili possono essere collocati all'interno diNavbarcome figli quando necessario.Navbar BrandeNavbar Navigationdevono trovarsi da qualche parte all'interno dell'albero degli antenati diNavbar, ma non devono necessariamente essere figli diretti del blocco radiceNavbar.Navbar Brandsupporta l'uso con solo logo quando esiste un'immagine di logo. Quando il testo del titolo visibile è vuoto, un'etichetta accessibile esplicita o l'etichetta risolta del sito forniscono il nome di riserva sicuro.
Composizione consigliata:
NavbarContainer (Flow: None)Cluster (Width: Full, Justify: Between, Align: Center, Wrap: Nowrap)Navbar BrandCluster (Justify: End, Align: Center, Wrap: Nowrap)Navbar NavigationHeader Actions
Usate Container per la larghezza, Cluster per la distribuzione orizzontale e Stack per il flusso verticale. Navbar resta solo il wrapper nav e non aggiunge da solo helper di layout specifici del CMS.
Questo mantiene la composizione dell'header esplicita, riutilizzabile e allineata a WebBlocks UI, invece di duplicare una superficie di design della navbar riservata al CMS.
Questo mantiene chiara la proprietà dei contenuti in multisito, localizzazione, revisioni e rendering pubblico.
Ricerca
La ricerca V1 è infrastruttura pubblica derivata, non logica di sito web del livello di progetto.
- La ricerca indicizza solo le pagine pubbliche pubblicate.
- Le righe di ricerca hanno ambito per sito e lingua.
- La ricerca usa le traduzioni di pagina come fonte di verità per il titolo e i metadati dell'URL pubblico.
- Il contenuto di ricerca è costruito dai blocchi pubblicati di proprietà della pagina più i blocchi compatibili degli Shared Slot risolti nel contesto della pagina che li utilizza.
- Le pagine di origine degli Shared Slot nascoste sono escluse dalla risoluzione delle rotte pubbliche e dai risultati di ricerca autonomi.
- La prima versione memorizza le righe derivate nella tabella di database
public_search_indexe usa un matching SQL conservativo anziché un servizio di ricerca esterno. - Le righe di ricerca sono dati di runtime derivati e possono essere ricostruite in sicurezza dai contenuti del CMS.
Layout di pagina
La struttura della pagina pubblica è controllata a livello di pagina e di slot.
Page Layoutè il nome visibile nell'amministrazione per la configurazione del guscio esterno a livello di pagina.- I Page Layout sono ora record gestiti a livello di installazione in
Admin -> System -> Page Layouts. - Il campo di compatibilità memorizzato resta
public_shellin questa fase, così i dati e gli handle di pagina esistenti restano validi. defaultè il guscio pubblico standard.docsè il guscio orientato alla documentazione per layout con regioni di intestazione, barra laterale e contenuto principale.- I
Default LayouteDocs Layoutintegrati sono layout di sistema precaricati con gli handle stabilidefaultedocs. - Le pagine memorizzano l'handle del Page Layout selezionato, non una modalità di guscio risolta separata.
- Page Layout ora possiede token pubblici
body_classopzionali e validati. - I Page Layout Slot sono record relazionali a livello di installazione collegati a un Page Layout che definiscono l'ordine degli slot e i metadati del wrapper.
- Gli Slot Type sono il catalogo riutilizzabile per l'assegnazione dei Page Layout Slot.
- Il rendering a runtime risolve l'handle memorizzato in un record Page Layout quando disponibile, quindi risolve le classi del body e i wrapper degli slot a partire dai suoi Page Layout Slot gestiti.
- Body Class è pensato per il CSS specifico del layout sul
<body>pubblico, mentre gli id e le classi dei wrapper dei Page Layout Slot forniscono agganci CSS a livello di regione all'interno di quel layout. - Il comportamento sticky della Navbar pubblica deriva dalla primitiva
wb-navbarinclusa. Quando uno slot di intestazione pubblico predefinito contiene solo un blocco Navbar, il CMS promuove il wrapper dello slot alla radicenav.wb-navbaraffinché il comportamento sticky non sia vincolato da un ulteriore wrapper di intestazione. - Edit Page confronta i Layout Slot gestiti del Page Layout selezionato con i Page Slot attuali della pagina.
- I Layout Slot mancanti possono essere aggiunti esplicitamente tramite
Add Missing Layout Slots. - I Page Slot in eccesso vengono conservati per sicurezza e vengono segnalati anziché eliminati.
- Le nuove pagine utilizzano i Page Layout Slot gestiti attivi del Page Layout selezionato prima di ricadere sugli array di slot legacy.
- Cambiare il Page Layout in un salvataggio normale non modifica automaticamente i Page Slot esistenti.
- I Page Layout personalizzati di V1 possono usare handle personalizzati, ma riutilizzano comunque in modo conservativo il comportamento di guscio
defaultodocsesistente per compatibilità. - Il nome dello slot determina il ruolo semantico del wrapper pubblico per quella regione.
- I wrapper degli slot vengono risolti automaticamente dai Page Layout Slot gestiti quando disponibili, con definizioni di ripiego legacy per i layout integrati. Gli slot sconosciuti usano il wrapper
divpredefinito sicuro. - L'HTML di layout avanzato e attendibile esiste solo per il markup strutturale adiacente al wrapper. Non è una superficie di scripting generica e non deve essere usato per gli script.
- Gli slot di intestazione sono neutrali rispetto al layout per impostazione predefinita e non impongono
wb-stackattorno ai loro alberi di blocchi. - Gli slot principali possono comunque gestire il ritmo impilato tramite il loro partial di guscio quando tale presentazione è intenzionale.
- La spaziatura tra intestazione e contenuto principale appartiene al wrapper del guscio pubblico, non a
Navbarné ad altri singoli blocchi di intestazione. I wrapper di intestazione e principale del guscio predefinito gestiscono quel ritmo, così il primo blocco di contenuto non ha bisogno di margini superiori improvvisati. - Il comportamento sticky della navbar deve restare di proprietà del contratto
.wb-navbarincluso in WebBlocks UI. Il page layout e i wrapper degli slot di intestazione gestiscono la struttura a livello di pagina, ma il CMS non deve iniettare una classe sticky di navbar parallela. - I blocchi renderizzano il contenuto dentro quei wrapper di slot e non devono possedere il guscio esterno della pagina.
- La validazione del Page Layout consente frammenti di wrapper attendibili per colmare lacune strutturali, ma rifiuta script, attributi di evento, URL
javascript:e contenutiiframe,objectedembed.
Per le pagine in stile documentazione, usate il page layout invece di spostare la responsabilità del layout sui singoli blocchi di contenuto. La ricetta abituale è Page Layout = Docs Layout con gli slot Header, Sidebar e Main, così il guscio può mapparli automaticamente sui wrapper di navbar, barra laterale e contenuto principale della documentazione.
In V1, Page Layout possiede la scelta del guscio pubblico esterno, i nomi degli slot possiedono la semantica dei wrapper di regione e i blocchi possiedono il contenuto all'interno di quei wrapper.
Metadati pubblici
- I metadati pubblici vengono risolti a partire dal sito corrente e dal contesto di traduzione della pagina corrente, non da Project Identity né dalle impostazioni legacy modificabili di nome o slogan dell'applicazione.
- I titoli pubblici delle pagine sono per impostazione predefinita
Site Label · Page Label. - La precedenza dell'etichetta del sito è:
display_namedel sito,seo_titledel sito,namedel sito e infine un valore di ripiego sicuro del CMS. - La precedenza dell'etichetta della pagina è:
seo_titledella traduzione della pagina, quindi il titolo della traduzione della pagina. - La precedenza della descrizione è:
seo_descriptiondella traduzione della pagina,seo_descriptiondel sito, altrimenti nessun tag di descrizione. - La precedenza delle parole chiave è:
seo_keywordsdella traduzione della pagina,seo_keywordsdel sito, altrimenti nessun tag di parole chiave. - La precedenza del titolo Open Graph è:
og_titledella traduzione della pagina, altrimenti lo stesso schema di titolo pubblico con il sito in primo piano. - La precedenza della descrizione Open Graph è:
og_descriptiondella traduzione della pagina,seo_descriptiondella traduzione della pagina,seo_descriptiondel sito. - La precedenza dell'immagine Open Graph è:
og_image_media_iddella traduzione della pagina,social_image_media_iddel sito, altrimenti nessun tagog:image. - Il media della favicon del sito è invariato e in questa fase resta ancora solo a livello di sito.
- I metadati multisito restano consapevoli dell'host attraverso il sito pubblico risolto; il sito primario non viene usato ciecamente quando un altro sito corrisponde all'host corrente.
Contesto di ricerca
- La ricerca pubblica resta limitata al sito e alla lingua (locale) risolti.
- Il testo della finestra modale di ricerca può includere l'etichetta del sito risolta, così gli utenti vedono in quale sito si sta cercando.
- Il testo della ricerca pubblica usa Site Identity, non Project Identity.
Shared Slots
Gli Shared Slot sono un livello di proprietà del contenuto degli slot che si colloca sotto il modello di page layout esistente.
- Il page layout continua a determinare quali slot sono disponibili.
- Il guscio di pagina più il nome dello slot continuano a determinare i wrapper pubblici di ciascuno slot.
- L'origine di ogni slot di pagina può essere
page,shared_slotodisabled. pagesignifica che lo slot usa blocchi di proprietà diretta della pagina, che resta il comportamento attuale.shared_slotsignifica che lo slot fa riferimento a un albero di blocchi Shared Slot riutilizzabile e limitato al sito, renderizzato dinamicamente a runtime pubblico.disabledsignifica che il wrapper dello slot esiste ancora, ma al suo interno non viene renderizzato alcun blocco.- Gli Shared Slot sono alberi di blocchi di slot riutilizzabili e limitati al sito, non modelli basati su copie.
- I riferimenti agli Shared Slot sono validi solo all'interno dello stesso sito. Le operazioni di pagina tra siti devono essere rimappate su uno Shared Slot compatibile del sito di destinazione oppure ricadere su un risultato sicuro di blocco o disattivazione, a seconda dell'operazione e della scelta esplicita dell'utente.
- Gli Shared Slot non possiedono i gusci di pagina né i wrapper degli slot. Il guscio di pagina possiede ancora il guscio esterno e lo slot di pagina consumatore possiede ancora il wrapper per
header,main,sidebaro altre regioni di slot. - Uno Shared Slot valido contribuisce solo con l'albero di blocchi renderizzato all'interno di quel wrapper di slot di pagina esistente.
- Il rendering pubblico degli Shared Slot è conservativo:
- I riferimenti a shared slot di un altro sito non renderizzano nulla.
- Le schermate di amministrazione degli Shared Slot descrivono il vincolo opzionale
SharedSlot.public_shellcomePage Layout, ma il nome del campo memorizzato restapublic_shellper retrocompatibilità in questa release. - Se
SharedSlot.public_shellè impostato, deve corrispondere esattamente all'handle del page layout consumatore. - Se
SharedSlot.slot_nameè impostato, deve corrispondere al nome dello slot di pagina consumatore. - Valori nulli o vuoti di
public_shelleslot_nameagiscono come corrispondenze generiche. - Un handle di Page Layout personalizzato che mappa su
shell_type = docsnon corrisponde automaticamente a uno Shared Slot vincolato adocsin V1.
L'ambito attuale comprende ora le fondamenta, il rendering pubblico, la gestione amministrativa limitata al sito, l'assegnazione dell'origine degli slot di pagina e il supporto alla portabilità tra siti per gli Shared Slot.
- Gli Shared Slot hanno un proprio elenco di amministrazione e propri form di metadati nell'area dei contenuti di sito dell'amministrazione.
- Gli alberi di blocchi degli Shared Slot si modificano tramite un editor di blocchi dedicato agli Shared Slot che riutilizza l'attuale modello di authoring dei blocchi invece di copiare il contenuto negli slot di pagina consumatori.
- I blocchi degli Shared Slot restano record
blocksreali collegati tramiteshared_slot_blocks, con il testo tradotto che resta nelle tabelle di traduzione esistenti. - L'eliminazione di uno Shared Slot è bloccata finché uno slot di pagina vi fa ancora riferimento.
- L'editor di pagina espone ora un selettore di origine per slot con tre modalità supportate:
Page Content:page_slots.source_type = pageeshared_slot_id = null.Shared Slot:page_slots.source_type = shared_sloteshared_slot_idpunta a uno Shared Slot attivo e compatibile dello stesso sito.Disabled:page_slots.source_type = disabledeshared_slot_id = null.- Cambiare l'origine di uno slot non elimina né scollega l'albero di blocchi di proprietà della pagina per quello slot. Se un editor passa uno slot a
shared_slotodisabled, i blocchi di proprietà della pagina restano collegati, così tornando aPage Contentsi ripristina il contenuto specifico della pagina precedente. - L'aggiunta dei Layout Slot mancanti segue lo stesso principio di sicurezza: crea solo nuovi Page Slot e non altera gli slot supportati da Shared Slot, gli slot Disabled né gli alberi di blocchi di proprietà della pagina.
- L'editor di pagina filtra le scelte di Shared Slot in modo conservativo. Compaiono solo gli Shared Slot attivi dello stesso sito e i vincoli opzionali
public_shelleslot_namedello Shared Slot devono corrispondere al guscio e al nome dello slot della pagina consumatrice. - I form di amministrazione degli Shared Slot etichettano ora quel vincolo opzionale
public_shellcomePage Layout, così il termine visibile all'utente corrisponde alle schermate dell'editor di pagina e di gestione dei Page Layout. - L'esportazione/importazione e la clonazione del sito trasferiscono ancora gli handle
public_shella livello di pagina come parte della configurazione della pagina. Le definizioni di Page Layout a livello di installazione restano locali all'installazione in V1, quindi le installazioni di destinazione dovrebbero definire gli handle personalizzati che si aspettano di renderizzare senza ripiego. - Anche le definizioni di Page Layout Slot a livello di installazione restano locali all'installazione in V1.
- Le protezioni di rendering pubblico a runtime restano attive anche dopo la validazione in scrittura, così le assegnazioni non valide, obsolete, di altri siti, inattive o incompatibili continuano a non renderizzare pubblicamente alcun contenuto condiviso.
- Gli Shared Slot partecipano ora all'esportazione/importazione e alla clonazione del sito. I loro metadati, gli alberi di blocchi delle pagine sorgente nascoste, le traduzioni, l'ordinamento annidato e i riferimenti ai media vengono trasferiti come contenuto di sito di prima classe. Gli slot di pagina consumatori mantengono i riferimenti
shared_slottramite l'handle dello Shared Slot durante l'esportazione e vengono rimappati sugli Shared Slot del sito di destinazione durante importazione e clonazione. - Le pagine sorgente nascoste degli Shared Slot restano interne. Sono escluse dai normali payload di esportazione delle pagine, dagli elenchi di pagine ordinari e dal routing pubblico, anche se i loro record di blocchi continuano a sostenere l'editor degli Shared Slot e i flussi di portabilità.
- Gli Shared Slot hanno ora una propria cronologia delle revisioni e un proprio flusso di ripristino, intenzionalmente separato dalle revisioni di pagina.
- Le revisioni degli Shared Slot catturano i metadati dello Shared Slot più l'albero di blocchi riutilizzabile dello Shared Slot dietro la pagina sorgente interna nascosta.
- Il ripristino di una revisione di Shared Slot ripristina lo Shared Slot sul posto. L'id dello Shared Slot resta stabile, i riferimenti
page_slots.shared_slot_idesistenti restano intatti e il contenuto ripristinato ha effetto immediato su ogni pagina che fa riferimento a quello Shared Slot. - Le revisioni degli Shared Slot non considerano le revisioni di pagina autorevoli per il contenuto degli Shared Slot, e le revisioni di pagina non pretendono di catturare gli alberi di blocchi degli Shared Slot.
Pubblicazione di pagine e blocchi
La pubblicazione del flusso di lavoro di pagina e la pubblicazione dei blocchi sono separate per impostazione predefinita. Pubblicare un record di pagina rende la pagina instradabile quando le sue regole di lingua (locale) e di percorso corrispondono, ma non pubblica silenziosamente i blocchi in bozza o in revisione all'interno di quella pagina. Questo consente a editor e revisori di pubblicare il guscio della pagina trattenendo alcuni blocchi per una revisione successiva.
Quando un utente sceglie esplicitamente di includere i blocchi di proprietà della pagina, WebBlocks CMS pubblica solo i blocchi di proprietà degli slot di pagina non condivisi della pagina. I blocchi figli annidati sotto quegli slot di proprietà della pagina sono inclusi. Gli slot supportati da Shared Slot sono esclusi; i loro alberi di blocchi riutilizzabili devono essere revisionati e pubblicati tramite i flussi di lavoro specifici degli Shared Slot.
La Internal Content API segue la stessa regola. POST /webadmin/api/pages/{page}/publish usa per impostazione predefinita include_page_owned_blocks: false, richiede content.publish ed esclude gli Shared Slot. Gli strumenti di IA o operatore devono attivare include_page_owned_blocks: true solo con l'approvazione esplicita dell'utente.
Confine di Site Promotion
- Site Promotion opera sul contenuto di proprietà del sito, non sull'intera installazione.
- Può aggiornare campi sicuri di identità del sito, assegnazioni di lingua (locale), variabili di sito, pagine, traduzioni di pagina, slot, blocchi, Shared Slot, navigazione, asset di pagina e, facoltativamente, asset di file del pacchetto.
- Preserva i dati a livello di installazione e di runtime live come utenti, sessioni, backup, cronologia degli aggiornamenti, invii dei moduli di contatto, reportistica sui visitatori, domini, impostazioni di ambiente e segreti.
- Non tratta
public_search_indexcome contenuto portabile. Le righe di ricerca vengono ricostruite dal contenuto promosso dopo l'applicazione. - È un flusso di lavoro a pacchetti controllato, non una replica grezza del database.
Confine del progetto
Il core di WebBlocks CMS contiene le funzionalità CMS riutilizzabili.
- Tenete in
project/il codice specifico dell'installazione che deve sopravvivere agli aggiornamenti del CMS. - Tenete fuori dal core i comandi, le viste, le rotte, la configurazione, gli helper di importazione e i flussi di migrazione specifici del sito quando non sono funzionalità di prodotto riutilizzabili.
- Trattate
project/come il confine di estensione sicuro rispetto agli aggiornamenti per una singola installazione. - Tenete nel core il comportamento di prodotto riutilizzabile come blocchi, layout, interfaccia di amministrazione, renderer pubblici, workflow, backup/ripristino, esportazione/importazione e il supporto generico del livello di progetto.
- Tenete in
project/gli helper di migrazione/importazione dei siti e gli strumenti di sincronizzazione dei contenuti specifici dell'installazione. - I ponti di migrazione rapida dei siti web possono vivere in
project/quando sono intenzionalmente temporanei e specifici di un sito web. L'importatore della documentazione rimanente di WebBlocks UI ne è un esempio: memorizza i frammenti<main>della documentazione scaricata come HTML attendibile in forma di payload di progetto, senza insegnare al core del CMS nulla su quel sito web. - Un ponte di questo tipo dovrebbe preservare il contenuto curato esistente del CMS, mantenere il comportamento del guscio o della navigazione di proprietà del CMS e rendere esplicito il confine temporaneo dell'HTML attendibile, così da lasciare possibile una successiva rifinitura in blocchi di prima classe.
- I pacchetti di rilascio del core non includono contenuti di
project/.
Consultate ../DEVELOPMENT.md per il flusso completo di sviluppo e rilascio.