Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 13
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074

    problemi con text editor online

    Nell'ambito di un semplice CMS, ho la necessità di dotarlo di un editor di testo in grado di implementare alcune formattazioni base (grassetto, corsivo, sottolineato).
    Ovviamente, mi occorre che questo testo formattato possa poi essere salvato (questo è un problema che risolvo via PHP). E, poichè i testi verranno successivamente caricati in una interfaccia Flash, mi occorre anche che la formattazione sia attribuita in modo che venga riconosciuta come tale da Flash.
    Ciò premesso, ho implementato questo editor:
    codice JavaScript
    Codice PHP:
    <script language="JavaScript">
    <!--
    var 
    bHtmlMode false;
    var 
    str_iFrameDoc = (document.all)? "document.frames(\"Composition\").document\;""document.getElementById(\"Composition\").contentDocument\;";
    // Inizializzazione
    onload initialize;
    function 
    initialize() {
        
    iFrameDoc = eval(str_iFrameDoc);
        
    iFrameDoc.open();
        
    iFrameDoc.write("<html><body MONOSPACE style='font:10pt arial,sans-serif'></body></html>");
        
    iFrameDoc.close();
        
    iFrameDoc.designMode "On";
        
    document.getElementById("switchMode").checked false;
    }
    // Porta il focus al riquadro di testo
    function setFocus() {
    if (
    document.all)
        
    document.frames("Composition").focus();
    else
        
    document.getElementById('Composition').contentWindow.focus()
    return;
    }
    // Controlla se la toolbar è abilitata nella modalità testo
    function validateMode() {
        if (! 
    bHtmlMode)
            return 
    true;
        
    alert("Deselezionare \"Visualizza HTML\" per utilizzare le barre degli strumenti");
        
    setFocus();
        return 
    false;
    }
    // Formatta il testo
    function formatC(what,opt) {
        if (!
    validateMode())
            return;
        
    iFrameDoc = eval(str_iFrameDoc);
        
    iFrameDoc.execCommand(what,false,opt);
        
    setFocus();
    }
    //Scambia tra la modalità testo e la modalità HTML.
    function setMode(newMode) {
        var 
    testo;
        
    bHtmlMode newMode;
        
    iFrameDoc = eval(str_iFrameDoc);
        
    riquadro iFrameDoc.body;
        if (
    document.all) {
            if (
    bHtmlMode) {
                
    testo riquadro.innerHTML;
                
    riquadro.innerText testo
            } else {
                
    testo riquadro.innerText;
                
    riquadro.innerHTML testo;
            }
        } else if(
    document.getElementById && document.createTextNode) {
            if (
    bHtmlMode) {
                
    testo document.createTextNode(riquadro.innerHTML);
                
    riquadro.innerHTML "";
                
    riquadro.appendChild(testo);
            } else {
                
    testo document.createRange();
                
    testo.selectNodeContents(riquadro);
                
    riquadro.innerHTML testo.toString();
            }    
        }
        
    setFocus();
    }
    -->
    </script> 
    codice html
    Codice PHP:
    <form action="home.php" method="post" name="composeForm">
            <table class="greyborder" bgcolor="#ffffff" border="0" cellpadding="5" cellspacing="0" width="100%">
              <tbody><tr>
                  <td align="center" valign="top" bgcolor="#CCCCCC"> 
                    <div id="ParaToolbar"><div id="EditMode">
                        <input name="switchMode" id="switchMode" onclick="setMode(switchMode.checked)" type="checkbox">
                        <font color="#000000">[b]Visualizza HTML[/b] | </font>
                        [url="javascript:formatC('removeFormat')"][b]Rimuovi Formattazione Carattere[/b][/url]
                    </div><hr size="1" noshade="noshade"></div>
                <table><tbody><tr align="center" valign="middle"> 
                      <td width="25" height="25"><div title="Grassetto" onclick="formatC('bold');"> 
                          [img]bold.gif[/img]</div></td>
                      <td width="25" height="25"><div title="Corsivo" onclick="formatC('italic')"> 
                          [img]italic.gif[/img]</div></td>
                      <td width="25" height="25"><div title="Sottolineato" onclick="formatC('underline')"> 
                          [img]under.gif[/img]</div></td>
                    </tr></tbody></table>
                <iframe class="Composition" id="Composition" height="200" width="100%"><?PHP echo $testo?></iframe>


              <input type="reset" name="reset" value="Cancella tutto" />
              
              <input name="submit" type="submit" id="submit" value="Modifica Testo" />
                  </td>
                </tr></tbody></table></form>
    Però ho due tipi di problemi, relativamente alle esigenze di cui dicevo in premessa. Intanto, non riesco a trasmettere il testo modificato/formattato utilizzando il form. Il testo, infatti, sta in un iFrame, e se provo ad inserirlo in una textarea non funziona più l'editor.
    E non so come venire a capo di questo problema...
    Il secondo, è che la formattazione avviene utilizzando i tag span, del tipo:
    per il grassetto, <span style="font-weight: bold;"></span>
    per il corsivo, <span style="font-style: italic;"></span>
    per il sottolineato, <span style="text-decoration: underline;"></span>
    mentre Flash riconosce i vecchi tag html , e <u></u>.
    Come posso risolvere questi due problemi?
    metatad
    graphic & web design

  2. #2
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    problemi che gia' sono stati affrontati, da chiunque si sia cimentato con gli editor wysiwyg in pagina web

    per salvare ti serve una textarea, anche nascosta
    il tuo tasto "salva" e' il submit del form
    il form onsubmit richiama una funzione che setta come value della textarea l' innerHTML del contenuto dell' iframe
    codice:
    function salva(){
    	var ifrm=(document.all)?document.frames("Composition").document:document.getElementById("Composition").contentDocument;
    	document.getElementById('id_textarea').value=ifrm.body.innerHTML;
    }
    <form onsubmit="salva()" ... >

    l' altro problema e' piu' complesso

  3. #3
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    devi studiare le regexp, perche' ogni browser scrivera' in output il codice che preferisce e tu devi uniformarlo a quello che accetta flash
    io questo processo di pulizia lo farei sul versante server

    comunque puoi vedere come procede lato client in questo articolo
    http://javascript.html.it/articoli/l...tor-wysiwyg/4/
    articolo che potrebbe tornarti utile nella sua interezza
    ciao

  4. #4
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    grazie 1000 per le indicazioni...
    metatad
    graphic & web design

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2001
    residenza
    Napoli, Italia
    Messaggi
    1,074
    Ho provato la funzione salva() che mi hai suggerito
    JavaScript
    Codice PHP:
    function salva(){
        var 
    ifrm=(document.all)?document.frames("Composition").document:document.getElementById("Composition").contentDocument;
        
    document.getElementById('testo').value=ifrm.body.innerHTML;

    form html
    Codice PHP:
    <input name="submit" type="submit" id="submit" value="Modifica Testo" onsubmit="MM_callJS('salva()')"/> 
    ma non trasmette i dati...
    Inoltre, mi sono accorto di un'altro problema, che in un primo momento mi era sfuggito: nel codice html, ho inserito una stringa PHP per caricare nell'iframe il testo prelevato dal db
    Codice PHP:
    <iframe class="Composition" id="Composition" height="200" width="100%"><?PHP echo $testo?></iframe>
    però poi, al caricamento della pagina, l'iframe appare vuoto, anche se il testo richiamato dal PHP c'è (lo verifico con un echo fatto altrove nella pagina).
    Inoltre, l'iframe mette di default un tag
    all'inizio, ma non riesco a capire dove è settato questo default, e quindi come eliminarlo...
    metatad
    graphic & web design

  6. #6
    Utente bannato L'avatar di Braco
    Registrato dal
    Oct 2005
    Messaggi
    1,697
    Originariamente inviato da Xinod
    problemi che gia' sono stati affrontati, da chiunque si sia cimentato con gli editor wysiwyg in pagina web

    per salvare ti serve una textarea, anche nascosta
    il tuo tasto "salva" e' il submit del form
    il form onsubmit richiama una funzione che setta come value della textarea l' innerHTML del contenuto dell' iframe
    codice:
    function salva(){
    	var ifrm=(document.all)?document.frames("Composition").document:document.getElementById("Composition").contentDocument;
    	document.getElementById('id_textarea').value=ifrm.body.innerHTML;
    }
    <form onsubmit="salva()" ... >

    l' altro problema e' piu' complesso
    XINOD io stesso sto avendo questo problema da giorni
    spiegami, come sistemo il mio? Ho creato l'iframe al posto del textarea http://www.photoman.altervista.org/g...k/Untitled.php
    ma non riesco a farci entrare le faccine, che devo fare?


    <form method="post" action="ins.php" id="mioform" onkeyup="highlight(event)" onsubmit="return (xxxGuest1() &amp;&amp; controlla() &amp;&amp; pulisciCodice())">
    <input type="hidden" name="codicePulito"/>

    ---

    Faccina:

    [img]../faccine/pxaura.gif[/img]

    il textarea come vedi l'ho disattivato:

    <iframe src="" name="messaggio" id="editArea" frameborder="no" scrolling="auto"></iframe>


    <input type="submit" name="messaggio" value="Invia" class="manina-guest" />

  7. #7
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649
    cosa c'entrano le faccine con i problemi di cui parla metatad?

    tu hai fatto un fritto misto come tuo solito
    e io posso dare qualche dritta, ma non ho tempo per sistemare le cose da zero per gli altri

    se usi un iframe non puoi scriverci dentro come se fosse una textarea, devi usare l' execCommand,
    nel tuo caso quindi richiamare
    applicaComando('InsertImage', 'percorso/faccina.gif');

  8. #8
    Utente bannato L'avatar di Braco
    Registrato dal
    Oct 2005
    Messaggi
    1,697
    Originariamente inviato da Xinod
    cosa c'entrano le faccine con i problemi di cui parla metatad?

    tu hai fatto un fritto misto come tuo solito
    e io posso dare qualche dritta, ma non ho tempo per sistemare le cose da zero per gli altri

    se usi un iframe non puoi scriverci dentro come se fosse una textarea, devi usare l' execCommand,
    nel tuo caso quindi richiamare
    applicaComando('InsertImage', 'percorso/faccina.gif');
    Ho già questo codice per richiamare i bottoni B U I, come lo sistemo per le faccine?

    function applicaComando(cmdStr,valCmdStr){
    AttivaFrame("editArea").execCommand(cmdStr,false,v alCmdStr);
    }

  9. #9
    Utente di HTML.it L'avatar di Xinod
    Registrato dal
    Sep 2000
    Messaggi
    13,649

    [img]../faccine/pxaura.gif[/img]

  10. #10
    Utente bannato L'avatar di Braco
    Registrato dal
    Oct 2005
    Messaggi
    1,697
    Originariamente inviato da Xinod

    [img]../faccine/pxaura.gif[/img]
    Grazie Xinod, ci siamo quasi guarda http://www.photoman.altervista.org/g...k/Untitled.php

    ho messo così, cosa non quadra ancora? VVoVe: :

    [img]../faccine/pxaura.gif[/img]

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.