Drupal - tinyMCE e xhtml Strict

8 contenuti / 0 new
Ultimo contenuto
Drupal - tinyMCE e xhtml Strict

La difficolta di scrivere codice XHTML Strict (come vogliono le PA per i siti Nuovi), può mettere in crisi anche il più volenteroso "redattore" (che spesso è del tutto estraneo a queste problematiche). Per facilitare la scrittura delle pagine, spesso ci si appoggia ad un Editor HTML in javascript.... tutto bello, ma poi questo genera XHTML Strict non valido.... come Rimediare a tutto ciò? Io ho fatto così:
1) Installato TinyMCE
2) Levato i ritorni a capo automatici in Drupal
3) Ho messo il codice sotto in template.php (nella cartella del tema, solo con phptemplate):

function phptemplate_tinymce_theme($init, $textarea_name, $theme_name, $is_running) {
switch ($textarea_name) {
// Disable tinymce for these textareas
case 'log':
case 'img_assist_pages':
case 'caption':
unset($init);
break;

// Force the 'simple' theme for some of the smaller textareas.
case 'signature':
case 'site_mission':
case 'site_footer':
case 'settings][access_pages':
$init['theme'] = 'simple';
unset($init['theme_advanced_toolbar_location']);
unset($init['theme_advanced_toolbar_align']);
unset($init['theme_advanced_path_location']);
unset($init['theme_advanced_blockformats']);
unset($init['theme_advanced_styles']);
break;
}

// Add some extra features when using the advanced theme.
switch ($theme_name) {
case 'advanced':
$init['extended_valid_elements'] = 'a[href|name|title|onclick],';
$init['extended_valid_elements'] .= 'table[],';
$init['extended_valid_elements'] .= 'img[alt|class|height|name|onclick|ondblclick|onkeydown|onkeypress|onkeyup|onmousedown|onmousemove|onmouseout|onmouseover|onmouseup|src|style|title|width]';
$init['theme_advanced_buttons3_add_before'] = 'tablecontrols,separator';
$init['plugins'] = file_exists(drupal_get_path('module', 'tinymce'). '/tinymce/jscripts/tiny_mce/plugins/drupalimage') ? 'drupalimage,table,emotions,print' : 'table,emotions,print';
$init['theme_advanced_buttons3_add'] = 'drupalimage,emotions,separator,print';
break;
}

// Always return $init; !!
return $init;
}
?>

Impostate ed aggiungere righe relative alle proprietà consentirte per singolo tag in $init['extended_valid_elements']. Impostate questo "filtro" per ogni singolo tag che vi interessa.
Nel mio caso specifico, è consentito inserire il tag table con nessuna proprietà, il tag "a" con le sole proprietà href|name|title|onclick ecc...
Ovviamente devo ancora espanderlo, ma questa è la soluzione per usare un editor xhtml ed avere codice pulito strict

Ciao
Gianni

Interessante. Purtroppo talvolta TinyMCE genera codice veramente sporco, apre e chiude TAG inutili. Peccato, FCK sembra migliore.

Blog cultura e informazione -- voglio un server veloce!!!

Se usi i filtri genera solo ciò che gli consenti di generare ;-)
E comunque si parla di XHTML Strict e FCK non brilla in codice strict generato.... anzi. Se poi aggiungi che FCK è lento.... (ovviamente IMO)
Sinceramete i problemi di cui parli non ne ho mai avuti.... unica eccezzione il tag < strong> su pagine già fatte e richiamate con l'editor, mi è successo che il tag venisse ripetuto su ogni linea.... ma al momento è stato l'unico problema riscontrato e comunque su vecchie pagine.
Nelle mie pagine consento solo: tabelle, immagini, link, ancore, titoli.... tutto il resto è bandito. Niente font, niente colori, niente proprietà inutili, niente di niente. Tiny è collegato agli stili di Drupal e allineamenti, proprietà del testo, dei titoli, delle immagini viene dato scegliendo l'apposita classe del css (tramite combo)..... insomma, la perfezione non esiste, ma il codice generato in questo modo è nel 99,9% dei casi XHTML Strict, che è ben diverso e ben più difficile da ottenere che XHTML transizionale, e che comunque è l'unico consentito per tutti i nuovi siti Istituzionale (delle PA). Pena annullamento del contratto, come vuole la legge Stanca.
Se esiste un modo semplice per ottenere XHTML Strict con un altro editor javascript, tra quelli utilizzati in drupal, ovviamente sarei ben contento di saperlo.

P.S.
Non mi fraintendere, mi rendo ben conto che il tuo è un blog e della perfezione ti può interessar poco perchè non sei pressatto da leggi o regole da seguire, quindi non è una polemica. Se vedi il tuo blog, usi XHTML Strict. Il tu Strict non sarà mai valido perchè utilizzando le proprietà proposte da FCK, generi codice transazionale. Se ad esempio guardi le foto, per gli allineamenti utilizzi proprietà che non sono accettate da Strict, inoltre, sempre nelle immagini, FCK aggiunge automaticamente la proprietà border che non esiste in Strict, rendendo le pagine non valide. (ovviamente ho preso il tuo blog di esempio perchè utilizzi FCK.... quindi ripeto, al di la del fatto che le tue scelte siano ragionate e a prescindere da ogni polemica, anzi, il tuo blog lo trovo interessante) :-)

Ciao
Gianni

Con questa modifica mi sa che risolvo anche il problema dei plugin aggiuntivi di cui abbiamo parlato un'altra volta.
Tanto per capirci, è possibile forzare la modalità "simple" solo per una determinata categoria di utenti.
Saluti e buon anno.

.... il fatto è che la necessità ti spinge a trovare la soluzione costi quel che costi (come farebbe chiunque) :-P
Ovviamente le proprietà rimangono visibili in tiny, ma di fatto non hanno alcun effetto (se ad esempio metti border=1 nelle proprietà dlle tabelle, questa viene automaticamente cancellata).
Il mio obbiettivo finale è avere il pannellino di tiny con i soli pulsanti che desidero e comunque questi devono unicamente creare i tag e le proprietà consentite dall' xhtml strict. I Redattori mi han già detto che vogliono utilizzare scritte colorate, sottolineate, testo in grassetto e menate varie (che palle dico io :-)). Per far questo mi faccio delle classi in css (style.css) ed essendo collegate a tiny (il file css lo colleghi tramite la configurazione di tity all'interno di Drupal), le vedono nel combo delle classi. Ne ho già alcune per l'allineamento delle immagini (destro, sinistro, centrale). Praticamente inseriscono l'immagine e poi scelgono dal combo l'allineamento (la classe) e automaticamente l'immagine viene allineata come vogliono e tutto validato XHTML strict.
Domani risono "al pezzo" e ci rilavoro sù, amplio i miei filtri e te li invio sempre su questo thread verso sera. (la condivisione del sapere è fondamentale :-) )
Una domanda, tu hai abilitato il forum? io sì (il mio capo lo vuole).... utilizzi tiny anche in quello oppure no? se sì, hai creato un profilo apposito ed hai filtrato tiny appositamente per quegli utenti esterni o hai lasciato il solito tiny per tutti gli utenti (redattori o utenti del forum che siano)?

P.S.
La scorsa settimana ho ricevuto il primo attacco hacker del sito in costruzione!! Nessun danno, nessun defacciamento, nulla di nulla.... hanno sfruttato xml-rcp.... colpa mia che non avevo ancora aggiornato drupal (ovviamente essendo ancora in prova non mi ero preoccupato di farlo... tanto mi son detto "chi vuoi che interessa un sito in costruzione") :-(
Il sistemista mi ha detto che per l'attacco è stato utilizzato un apposito script che praticamente scandaglia i siti alla ricerca di vulnerabilità. Adesso è aggiornato all'ultima versione ed è tutto OK. La cosa buffa è che ho un altro sito con una versione Drupal "bacata" che stà in piedi da 1,5 anni ed è molto trafficato. Tutto questo per metterti/vi in guardia, non fate la mia stessa cavolata.... aggiornate drupal se non lo avete ancora fatto ;-)

Ciao
Gianni

Purtroppo sono ancora un neofita e non ho avuo molto tempo per entrare appieno nel codice, per cui ho ancora delle difficioltà a fare delle modifiche "di un certo peso".
Una domanda, tu hai abilitato il forum? io sì (il mio capo lo vuole).... utilizzi tiny anche in quello oppure no? se sì, hai creato un profilo apposito ed hai filtrato tiny appositamente per quegli utenti esterni o hai lasciato il solito tiny per tutti gli utenti (redattori o utenti del forum che siano)?
L'intenzione sarebbe quella di utilizzare una versione light di tiny per gli utenti del forum e e per quelli, diciamo così, con meno privilegi.
Tra dire e fare però :) Speriamo bene.

A dimostrazione di quanto detto nel commento precedente, mi sono messo a cercare di modificare il file template.php seguendo le tue indicazioni.
E ho scoperto che non trovo il file template.php.
Questo è uno dei classici giorni in cui rimpiango di non essermi dato all'agricoltura!

Risolto: installando l'apposito engine

case 'settings][access_pages':
Mi spieghi questo bizzarro uso delle parentesi quadre?
Il resto funziona ed ho aggiunto anche il famoso plug-in.
Non riesco però a settare la lingua di default ad italiano per tiny.... cosa che prima invece funzionava sempre.
RISOLTO
$init['language'] ='it';
Ho aggiunto questa riga ed ora va.

Ovviamente a coronamento di tutto dovrò utilizzare un tema xhtml strict (devo studiarmi come crearlo o trovarne uno già pronto).
Una curiosità : ho controllato il file tinymce. module ed in pratica esiste una parte di codice molto simile a quella che tu hai aggiunto nel file template.php.
Perchè non hai fatto la modifica in quel file in modo da avere una configurazione indipendente dall'engine?
Se sto dicendo una C***ATA dimmelo pure che almeno capisco.

Tutto sommato, l'agricoltura può aspettare.....