Sistema di commenti per gli articoli di News e Blog — moderazione, un flusso di approvazione facoltativo per singolo articolo, un plugin di front-office "Post comments" e un widget della dashboard. In v6 l'interfaccia di moderazione è una scheda Comments all'interno dell'editor React di News/Blog. Pacchetto melisplatform/melis-cms-comments.
MelisCmsComments collega un sistema di commenti agli articoli di MelisCmsNews e MelisCmsBlog. Fornisce il backend dei commenti (tabella melis_cms_comments + MelisCmsCommentsService), un plugin di templating per il front-office (elenco dei commenti + form "lascia un commento"), un flusso di validazione per singolo articolo che mantiene i commenti del front-office in attesa finché un amministratore non li approva, e un widget della dashboard Latest comments. In combinazione con MelisCmsUserAccount, i commenti possono richiedere un account del sito con login effettuato.
Nel back-office React (/melis-react) questo modulo non fornisce alcun brick proprio — nessuna ui-react/, nessun react-api.php, nessun react.capabilities.php. È un modulo backend + contributo con tre superfici di proprietà dell'host:
una scheda di moderazione Comments all'interno dell'editor di News/Blog — l'interfaccia della scheda React e i suoi endpoint /comments… sono di proprietà dei brick News e Blog, che delegano al servizio di questo modulo;
un plugin di pagina front-office "Post comments" inserito e configurato nell'editor di pagine CMS React;
un widget della dashboard "Latest comments" — un plugin della dashboard PHP/phtml legacy renderizzato all'interno dell'host dei widget della dashboard React (nessuna riscrittura in React).
Dipendenze Composer: melis-core ^6.0 e melis-cms ^6.0. Dal punto di vista funzionale richiede almeno un modulo di articoli — MelisCmsNews o MelisCmsBlog — per essere utile. MelisCmsUserAccount è un'integrazione facoltativa per i commenti riservati agli account. Tutte le superfici sono subordinate all'attivazione: quando il modulo è assente, gli endpoint dei commenti di News/Blog restituiscono 404 e il pannello di moderazione si nasconde.
Servizio principale di CRUD/moderazione (estende MelisEngineGeneralService). Genera coppie di eventi *_start/*_end su ogni metodo. Chiamato dai controller react-api di News/Blog.
Metodi principali di MelisCmsCommentsService:
php
$svc = $sm->get('MelisCmsCommentsService');// Create or update a comment (BO comments are approved immediately)$id = $svc->saveComment($text, $postId, $commentId, 'NEWS', $name, $authorId, 'front');// Fetch a single comment$comment = $svc->getCommentById($id);// Front-office list for a post (ordered)$list = $svc->getCommentsByPostId($postId, 'BLOG', 'mccom_date_creation', 'DESC');// Back-office query — omit 'validated' to return pending + approved + refused$rows = $svc->getComments([ 'postType' => 'NEWS', 'postId' => $postId, 'withUserInfo' => true, 'limit' => 10,]);// Moderation$svc->approveComment($id); // mccom_validated=1, status=1 (shown)$svc->refuseComment($id); // mccom_validated=2, status=0 (hidden)$svc->deleteCommentById($id);// Cascade-delete when a post is removed$svc->deletePostComments('NEWS', $postId);
saveComment() legge il flag c{type}_validate_comments dell'articolo: quando è abilitato e il commento proviene dal front-office, viene memorizzato come in attesa (validated=0); i commenti del back-office vengono memorizzati come approvati immediatamente. Tutto il testo salvato viene passato attraverso HTMLPurifier 4.12 per la sanificazione XSS.
Scheda di moderazione Comments (React, di proprietà di News/Blog)
Apri un articolo di News o un post di Blog nell'editor e passa alla scheda Comments. Elenca i commenti di questo articolo con un indicatore di stato per riga (blu = in attesa, verde = mostrato, rosso = rifiutato), l'autore, il testo del commento e l'orario, un riquadro inline Name + write-a-comment + Add a comment per pubblicarne uno direttamente, e le azioni per riga approve / refuse / delete (approve/refuse compaiono solo quando la validazione è attiva per l'articolo).
Il componente della scheda React appartiene ai brick News/Blog, non a questo modulo. Non esiste alcun react-api.php in MelisCmsComments — i commenti sono esposti tramite la react-api dei moduli News e Blog stessi, che delegano ogni operazione a MelisCmsCommentsService:
Metodo e URL
Controller / azione proprietari
Scopo
GET /melis/react-api/news/:id/comments
MelisCmsNewsReactApiController::commentsAction
Tutti i commenti (tutti gli stati) di un articolo di news
POST /melis/react-api/news/comments/save
commentSaveAction
Crea/modifica un commento (BO → approvato)
POST /melis/react-api/news/comments/approve/:cid
commentApproveAction
Approva (mccom_validated=1, status=1)
POST /melis/react-api/news/comments/refuse/:cid
commentRefuseAction
Rifiuta (mccom_validated=2, status=0)
POST /melis/react-api/news/comments/delete/:cid
commentDeleteAction
Elimina il commento
GET /melis/react-api/blog/:id/comments
MelisCmsBlog…ReactApiController::commentsAction
Tutti i commenti di un post di blog
POST /melis/react-api/blog/comments/{save,approve,refuse,delete}[/:cid]
Azioni sui commenti Blog
Stesse operazioni per Blog
commentsAction costruisce una query getComments(['postId' => …, 'postType' => 'NEWS']) senza chiave validated, quindi restituisce i commenti in attesa + approvati + rifiutati. Ogni azione restituisce 404 quando il modulo non è disponibile; il contratto è { success, data|error }.
Il MelisCmsCommentsTabController legacy (getComments / save / approve / refuse / delete, protetto da hasAccess('meliscms_page')) è ancora utilizzato dal percorso classic/iframe — vedi la documentazione legacy.
Controller\Plugin\MelisCmsCommentsPlugin è un MelisTemplatingPlugin (chiave di configurazione meliscmscomments, sezione MelisCms, configurazione in config/plugins/MelisCmsCommentsPlugin.config.php). Nel pannello PLUGINS dell'editor di pagine CMS React, sotto Melis Cms Comments, trascina Post comments in una drop zone su un template di pagina News/Blog.
La finestra modale delle impostazioni consente di scegliere il Template (predefinito MelisCmsComments/comments) e il Post Type (NEWS / BLOG), persistiti nell'XML del plugin della pagina come template_path, mccplugin_post_type e registration_page_page_id (per i commenti riservati agli account tramite MelisCmsUserAccount).
Il rendering front-office (front()) risolve l'articolo a partire dal parametro di query newsId / blogId, carica i commenti tramite getCommentsByPostId() e costruisce il form di aggiunta commento (Name + comment + Submit). Quando l'articolo richiede un account, attiva melis_cms_user_account_login_form per incorporare un plugin di login.
Vista predefinita MelisCmsComments/comments; asset plugins/css/commentsPlugin.css, plugins/js/commentsPlugin.js.
Widget della dashboard "Latest comments" (legacy)
Controller\DashboardPlugins\MelisCmsCommentsLatestCommentsPlugin estende MelisCoreDashboardTemplatingPlugin; il suo latestCommentsAction() restituisce un ViewModel Laminas (template melis-cms-comments/dashboard/latest-comments, un .phtml), registrato in config/dashboard-plugins/dashboard.config.php (plugin id MelisCmsCommentsLatest). L'host dei widget della dashboard React renderizza questo plugin legacy così com'è — non esiste una riscrittura in React. Elenca i commenti più recenti per tipo di articolo (schede Blog / News) con i filtri All sites / All users / limit, e per ciascun commento mostra l'autore, un badge di stato, il titolo dell'articolo e la data. I filtri per sito/utente e il ricaricamento della zona sono serviti da MelisCmsCommentsViewHelperController::listAction (melis-cms-comments/dashboard/list, zona dashboard_latest_comments_list).
GDPR: imposta a null mccom_author_account per un account eliminato, quindi rigenera l'evento GDPR del modulo.
Module::addValidateCommentsField() (bootstrap del back-office) verifica quali moduli di articoli sono attivi e aggiunge la colonna c{news,blog}_validate_comments alle loro tabelle se mancante.
L'interfaccia della scheda Comments React e i suoi endpoint /comments… risiedono nei brick News/Blog (MelisCmsNewsReactApiController, MelisCmsBlog…ReactApiController); entrambi delegano a MelisCmsCommentsService. Modello dati, servizio e tool classico: documentazione legacy.
MelisCmsComments
Scopo
MelisCmsComments collega un sistema di commenti agli articoli di MelisCmsNews e MelisCmsBlog. Fornisce il backend dei commenti (tabella
melis_cms_comments+MelisCmsCommentsService), un plugin di templating per il front-office (elenco dei commenti + form "lascia un commento"), un flusso di validazione per singolo articolo che mantiene i commenti del front-office in attesa finché un amministratore non li approva, e un widget della dashboard Latest comments. In combinazione con MelisCmsUserAccount, i commenti possono richiedere un account del sito con login effettuato.Nel back-office React (
/melis-react) questo modulo non fornisce alcun brick proprio — nessunaui-react/, nessunreact-api.php, nessunreact.capabilities.php. È un modulo backend + contributo con tre superfici di proprietà dell'host:/comments…sono di proprietà dei brick News e Blog, che delegano al servizio di questo modulo;Attivazione
Aggiungi a
config/melis.module.load.php:Dipendenze Composer:
melis-core ^6.0emelis-cms ^6.0. Dal punto di vista funzionale richiede almeno un modulo di articoli — MelisCmsNews o MelisCmsBlog — per essere utile. MelisCmsUserAccount è un'integrazione facoltativa per i commenti riservati agli account. Tutte le superfici sono subordinate all'attivazione: quando il modulo è assente, gli endpoint dei commenti di News/Blog restituiscono 404 e il pannello di moderazione si nasconde.Servizi principali
MelisCmsCommentsServiceMelisEngineGeneralService). Genera coppie di eventi*_start/*_endsu ogni metodo. Chiamato dai controller react-api di News/Blog.Metodi principali di
MelisCmsCommentsService:saveComment()legge il flagc{type}_validate_commentsdell'articolo: quando è abilitato e il commento proviene dal front-office, viene memorizzato come in attesa (validated=0); i commenti del back-office vengono memorizzati come approvati immediatamente. Tutto il testo salvato viene passato attraverso HTMLPurifier 4.12 per la sanificazione XSS.Scheda di moderazione Comments (React, di proprietà di News/Blog)
Apri un articolo di News o un post di Blog nell'editor e passa alla scheda Comments. Elenca i commenti di questo articolo con un indicatore di stato per riga (blu = in attesa, verde = mostrato, rosso = rifiutato), l'autore, il testo del commento e l'orario, un riquadro inline Name + write-a-comment + Add a comment per pubblicarne uno direttamente, e le azioni per riga approve / refuse / delete (approve/refuse compaiono solo quando la validazione è attiva per l'articolo).
Il componente della scheda React appartiene ai brick News/Blog, non a questo modulo. Non esiste alcun
react-api.phpin MelisCmsComments — i commenti sono esposti tramite la react-api dei moduli News e Blog stessi, che delegano ogni operazione aMelisCmsCommentsService:GET /melis/react-api/news/:id/commentsMelisCmsNewsReactApiController::commentsActionPOST /melis/react-api/news/comments/savecommentSaveActionPOST /melis/react-api/news/comments/approve/:cidcommentApproveActionmccom_validated=1, status=1)POST /melis/react-api/news/comments/refuse/:cidcommentRefuseActionmccom_validated=2, status=0)POST /melis/react-api/news/comments/delete/:cidcommentDeleteActionGET /melis/react-api/blog/:id/commentsMelisCmsBlog…ReactApiController::commentsActionPOST /melis/react-api/blog/comments/{save,approve,refuse,delete}[/:cid]commentsActioncostruisce una querygetComments(['postId' => …, 'postType' => 'NEWS'])senza chiavevalidated, quindi restituisce i commenti in attesa + approvati + rifiutati. Ogni azione restituisce 404 quando il modulo non è disponibile; il contratto è{ success, data|error }.Il
MelisCmsCommentsTabControllerlegacy (getComments / save / approve / refuse / delete, protetto dahasAccess('meliscms_page')) è ancora utilizzato dal percorso classic/iframe — vedi la documentazione legacy.Plugin di pagina front-office "Post comments"
Controller\Plugin\MelisCmsCommentsPluginè unMelisTemplatingPlugin(chiave di configurazionemeliscmscomments, sezione MelisCms, configurazione inconfig/plugins/MelisCmsCommentsPlugin.config.php). Nel pannello PLUGINS dell'editor di pagine CMS React, sotto Melis Cms Comments, trascina Post comments in una drop zone su un template di pagina News/Blog.MelisCmsComments/comments) e il Post Type (NEWS / BLOG), persistiti nell'XML del plugin della pagina cometemplate_path,mccplugin_post_typeeregistration_page_page_id(per i commenti riservati agli account tramite MelisCmsUserAccount).front()) risolve l'articolo a partire dal parametro di querynewsId/blogId, carica i commenti tramitegetCommentsByPostId()e costruisce il form di aggiunta commento (Name + comment + Submit). Quando l'articolo richiede un account, attivamelis_cms_user_account_login_formper incorporare un plugin di login.MelisCmsComments/comments; assetplugins/css/commentsPlugin.css,plugins/js/commentsPlugin.js.Widget della dashboard "Latest comments" (legacy)
Controller\DashboardPlugins\MelisCmsCommentsLatestCommentsPluginestendeMelisCoreDashboardTemplatingPlugin; il suolatestCommentsAction()restituisce unViewModelLaminas (templatemelis-cms-comments/dashboard/latest-comments, un.phtml), registrato inconfig/dashboard-plugins/dashboard.config.php(plugin idMelisCmsCommentsLatest). L'host dei widget della dashboard React renderizza questo plugin legacy così com'è — non esiste una riscrittura in React. Elenca i commenti più recenti per tipo di articolo (schede Blog / News) con i filtri All sites / All users / limit, e per ciascun commento mostra l'autore, un badge di stato, il titolo dell'articolo e la data. I filtri per sito/utente e il ricaricamento della zona sono serviti daMelisCmsCommentsViewHelperController::listAction(melis-cms-comments/dashboard/list, zonadashboard_latest_comments_list).Tabelle del database
melis_cms_commentsmccom_id,mccom_post_id,mccom_type(NEWS/BLOG),mccom_comment_text,mccom_name,mccom_validated,mccom_status,mccom_date_creation,mccom_author_account.Due colonne vengono aggiunte automaticamente alle tabelle dei moduli di articoli al bootstrap (nessuna modifica di schema richiesta lì):
cnews_validate_commentsmelis_cms_newscblog_validate_commentsmelis_cms_blogModello di stato.
mccom_validated:0= nuovo/in attesa (blu),1= approvato/mostrato (verde),2= rifiutato/nascosto (rosso).mccom_statusrispecchia la visibilità sul sito (1mostrato /0nascosto).Listener e cablaggio tra moduli
Collegati in
Module.phpal bootstrap:MelisCmsCommentsFlashMessengerListenermelis_cms_comments_flash_messengerCMS_COMMENT_ADD / UPDATE / DELETE).MelisCmsCommentsSaveValidateCommentListenermeliscmsnews_get_postvaluescnews_validate_commentsquando un articolo di news viene salvato.MelisCmsCommentsGdprAutoDeleteActionDeleteListenermelis_cms_user_account_gdpr_auto_delete_action_deletemccom_author_accountper un account eliminato, quindi rigenera l'evento GDPR del modulo.Module::addValidateCommentsField()(bootstrap del back-office) verifica quali moduli di articoli sono attivi e aggiunge la colonnac{news,blog}_validate_commentsalle loro tabelle se mancante.File principali
vendor/melisplatform/melis-cms-comments/config/module.config.phpvendor/melisplatform/melis-cms-comments/config/plugins/MelisCmsCommentsPlugin.config.phpvendor/melisplatform/melis-cms-comments/config/dashboard-plugins/dashboard.config.phpvendor/melisplatform/melis-cms-comments/src/Service/MelisCmsCommentsService.phpvendor/melisplatform/melis-cms-comments/src/Controller/MelisCmsCommentsTabController.phpvendor/melisplatform/melis-cms-comments/src/Controller/Plugin/MelisCmsCommentsPlugin.phpvendor/melisplatform/melis-cms-comments/src/Controller/DashboardPlugins/MelisCmsCommentsLatestCommentsPlugin.phpvendor/melisplatform/melis-cms-comments/src/Listener/vendor/melisplatform/melis-cms-comments/src/Model/Tables/MelisCmsCommentsTable.phpvendor/melisplatform/melis-cms-comments/src/Module.phpvendor/melisplatform/melis-cms-comments/library/htmlpurifier-4.12.0/Vedi anche: MelisCmsNews · MelisCmsBlog · MelisCms · MelisEngine · MelisCore