Mi è capitato in due occasioni di riscontrare un problema poco comune durante il salvataggio di un articolo con aggiunta di alcuni TAG (sia esistenti che nuovi). Il problema riguarda il CMS Joomla in diverse versioni.

La mia attuale versione (al momento in cui scrivo è la 3.9.24), probabilmente durante qualche aggiornamento, ha cancellato alcuni campi da alcune tabelle (e non solo...) non permettendomi di salvare i nuovi TAG sia direttamente dall'articolo sia dal componente TAG nell'area di amministrazione.

Ma procediamo con ordine.

L'errore a video che mi compariva era questo:

Error

Save failed with the following error: TagsTableTag::_getNode(1, ) failed.

oppure:

Error

Save failed with the following error: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1

e in alcuni casi non compariva nulla, come ad esempio:

Error

Save failed with the following error:

In tutti i casi si capisce che c'è qualche problema nel database mysql. Una ulteriore verifica la possiamo fare controllando, dal pannello di controllo del nostro hosting, il file LOG degli errori. Nel mio caso usciva solo un errore generico (ho tralasciato i vari percorsi del mio sito web): [...] PHP Warning: Invalid argument supplied for foreach() in /web/htdocs/.../src/UCM/UCMContent.php on line 143: /web/htdocs/...administrator/index.php, referer [...].

Dopo diverse ricerche su vari forum su joomla ho certato di capire quale era la struttura del database mysql del CMS ed in particolare quali tabelle erano interessate dall'inserimento, gestione e/o modifica dei TAG in tutto il sito. Queste sono semplicemente (o almeno quelle che son riuscito a trovare e che mi hanno risolto il problema) 4:

  • #_tags
  • #_content_types
  • #_contentitem_tag_map
  • #_ucm_content

Fate attenzione al prefisso, ho messo genericamente il simbolo # al posto del prefisso delle mie tabelle. Se ad esempio le vostre tabelle joomla hanno per prefisso ABC dovrete sostituire # con ABC: ABC_tags, ABC_content_types ...

Importante

Prima di qualsiasi modifica ricordati di effettuare una copia di backup di tutto il sito e del database (soprattutto del database). Ti consiglio di installare il componente di Akeeba ovvero Akeeba Backup!

Tabella #_tags

In questa tabella vengono memorizzati tutti i TAG utilizzati per articoli, categorie, media e tutti i componenti del sito che ne richiedono. Fate Attenzione, nella tabella deve esserci una riga con title=ROOT ed alias=root. Senza questa riga l'assegnazione e la crezione di TAG non funziona. Di conseguenza, dopo aver verificato l'eventuale presenza di altri record e quindi di TAG, eseguite questa query nel vostro database facendo attenzione a cambiare gli eventuali parametri evidenziati in grassetto:

INSERT INTO `#_tags` (`id`, `parent_id`, `lft`, `rgt`, `level`, `path`, `title`, `alias`, `note`, `description`, `published`, `checked_out`, `checked_out_time`, `access`, `params`, `metadesc`, `metakey`, `metadata`, `created_user_id`, `created_time`, `created_by_alias`, `modified_user_id`, `modified_time`, `images`, `urls`, `hits`, `language`, `version`, `publish_up`, `publish_down`) VALUES (1, 0, 0, numero_di_righe_per_2_meno_1, 0, '', 'ROOT', 'root', '', '', 1, 0, '0000-00-00 00:00:00', 1, '{}', '', '', '', id_dell_utente_super_amministratore, '2019-10-24 06:34:24', '', 0, '0000-00-00 00:00:00', '', '', 0, '*', 1, '0000-00-00 00:00:00', '0000-00-00 00:00:00');
  • #: prefisso delle vostre tabelle;
  • numero_di_righe_per_2_meno_1: calcolate il numero... es. 9 righe ci metterete 17 ovvero (9*2)-1;
  • id_dell_utente_super_amministratore: di solito 42, controllate la tabella #_users.

Tabella #_content_types

Questa è la tabella incriminata, almeno per me! Altre volte mi è capitato di avere questa tabella installata correttamente e di avere la tabella #_tags (ricordatevi sempre di sostituire # con il prefisso personalizzato della vostra configurazione mysql di joomla) mancante della riga root. Comunque, fate attenzione che in questa tabella ci siano almeno 15 righe (la versione di joomla al momento della stesura di questo articolo è la 3.9.24) ognuna contenente le istruzioni necessarie per l'associazione dei tag ad ogni contenuto di ogni componente joomla!
Qui di seguito di faccio vedere esattamente cosa dovresti trovarci dentro:

Joomla MySQL TAG

Tabella #_contentitem_tag_map

In questa tabella ci sono tutti i tag creati che fanno riferimento alle due tabelle precedenti. Se non avete inserito alcun TAG prima d'ora forse la troverete vuota! Altrimenti, facendo le modifiche precedentemente scritte, tutti i collegamenti verranno ripristinati e potrete tornare a modificare, aggiungere o eliminare i TAG da ogni contenuto.

In questa tabella non adrete a fare nulla.


Iscrizione Newsletter