Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 15

Discussione: Aiutino Smiley

  1. #1

    Aiutino Smiley

    Salve a tutti,
    Ho un piccolo ma fastidioso problema con una funzione.
    Allora ho una textarea che viene controllata da una funzione per vedere se c'è la presenza di smiley e se c'è viene sostituita con l'immagine... solo che se io nella textarea scrivo un "." questo punto viene sostituito da un'immagine vuota ...
    ecco la funzione (classe):


    Codice PHP:
    <?php 
    class Smiley {
              function 
    Text_Replace($text) {
                      
    $dir "smiley";         
                      
    $directory opendir($dir);                  

    while (
    $smiley readdir($directory)) {
                 
    $value str_replace(".gif"""$smiley);             
    $text str_replace($value"<img src=\"$dir/$smiley\" />"$text);         
    }                  
    return 
    $text;     
    }  

    ?>
    qualcuno mi da una mano? in modo che se io in una textarea scrivo un semplice punto mi resta quello e non diventa un'immagine vuota?

    Grazie Mille.
    Andrea.

  2. #2
    Utente di HTML.it L'avatar di bubi1
    Registrato dal
    Dec 2009
    Messaggi
    1,230
    readdir ti restituisce anche la directory corrente "." e quella sopra ".."

    Leggi la documentazione di questa funzione per trovare un esempio su come eliminare i punti.

  3. #3
    grazie mille ecco il codice finale:

    Codice PHP:
    <?php 
    class Smiley {          
    function 
    Text_Replace($text) {                  
    $dir "smiley/";         
    $directory opendir($dir);                  
    while (
    $smiley readdir($directory)) {             
    if (
    $smiley != "." && $smiley != "..") {             
    $value str_replace(".gif"""$smiley);             
    $text str_replace($value"<img src=\"$dir$smiley\" />"$text);             
    }         
    }                 
    return 
    $text;     
    }  

    ?>
    ora però vorrei prendere le smiley e stamparle a video e quando un utente ci clicca sopra scrive il rispettivo testo nella textarea come potrei procedere?

  4. #4
    io faccio cosi

    Codice PHP:
    [img]percorso/smile.fig OnClick=[/img
    poi ovviamente il str_replace lo applico alla stringa ":-)" in modo che sostituisce questa stringa con la relativa img.
    Nel tuo caso penso che al posto di ":-)" ci dovrebbe essere il nome del file img.

    Fammi sapere se funziona.

  5. #5
    allora ho un altro problema... non tutte le immagini gif vengono visualizzate correttamente... in alcuni casi viene printato questo:

    <img src=y/money.gif">

    anche se le immagini sono gif e il criterio è lo stesso...
    come mai??

    EDIT:

    Ho risolto... ecco il codice finale della classe smiley...

    Codice PHP:
    <?php 
    class Smiley {               
    function 
    Text_Replace($text) {                  
    $dir "template/smiley";         
    $directory opendir($dir);                  

    while (
    $smiley readdir($directory)) {             
    if (
    $smiley != "." && $smiley != "..") {                 
    $value str_replace(".gif"""$smiley);                 
    $text str_replace($value"<img src=\"$dir/$smiley\">"$text);             
    }         
    }                   
    return 
    $text;     
    }          

    function 
    Print_Smiley() {                  
    $dir "template/smiley";         
    $directory opendir($dir);                  
    while (
    $smiley readdir($directory)) {             
    if (
    $smiley != "." && $smiley != "..") {                 
    $value str_replace(".gif"""$smiley);                 
    print(
    "<img src=\"$dir/$smiley\" onClick=\"document.textarea.text.value+='$value'\">");             
    }         
    }      


    ?>

  6. #6
    senza aprire una nuova discussione...
    dovrei fare la stessa cose anche per il bbcode... ora per visualizzare le immagini nessun problema... ma per la funzione click come posso gestirla visto che non posso rinominare le immagini secondo il codice a cui è riferito il tag?

    Grazie Mille.
    Andrea.

  7. #7
    mi sà che stiamo entrambi smanettando con gli stessi problemi!!
    Tu sicuramente sei più bravo... ma uno scrpt per i commenti è una delle prime cose che ho provato a fare.

    Intanto non mi hai detto se il codicino che ti ho dato prima ti funziona...

    Per quanto riguarda il bbcode e anche per quanto riguarda gli smile mi ha aiutato molto questo link

    Per l'inserimento dei bbcode nella text area guarda questo
    link

    Per la conversione dei bbcode guarda questo occorre usare le (dannate... per me) espressioni regolari.

    Codice PHP:
    function bbcode_conversione($commento){

         
    $search = array(
    '/\[b\](.*?)\[\/b\]/is',                                
    '/\[i\](.*?)\[\/i\]/is',                                
    '/\[u\](.*?)\[\/u\]/is',
    '/\[img\](.*?)\[\/img\]/is',
    '/\[url\](.*?)\[\/url\]/is',
    '/\[url\=(.*?)\](.*?)\[\/url\]/is',
    '/\[mail\](.*?)\[\/mail\]/is'
             
    );

         
    $replace = array(
             
    '[b]$1[/b]',
             
    '[i]$1[/i]',
             
    '<u>$1</u>',
             
    '
    <img src=$1 alt=image>
    '
    ,
             
    '[url="$1"]$1[/url]',
             
    '[url="$1"]$2[/url]',
         
    '[email="$1"]$1[/email]'
             
    );

         
    $commento preg_replace ($search$replace$commento);


    return 
    $commento;

    Ti dico inoltre un'altra cosa che mi è capitata... per evitare di distruggere il layout della pagina avevo messo la funzione wordwrap() che tronca le parole troppo lunghe: il problemi si presenta nel caso (frequente) in cui si tratti di url img o email... in maniera un pò casereccia ho fatto così:

    Codice PHP:

        $pos 
    strstr($commento'[/img]');
        if (!
    $pos){
        
    $pos strstr($commento'[/url]')}
        if (!
    $pos){
        
    $pos strstr($commento'[/email]')}
        if (!
    $pos){
        
    $commento=wordwrap($commento,30," ",true);} 
    Posizionato prima della conversione bbcode in caso di presenza di img url o email la funzione wordwrap() non viene applicata.

    Spero di esserti stato utile.

    PS:NON SO' PERCHE' MA LA FUNZIONE CHE TI HO POSTATA NON VIENE VISUALIZZATA CORRETTAMENTE

  8. #8
    Allora visto che stiamo smanettando tutti e due ti posto i codici funzionanti di bbcode, smiley con un relativo esempio che mi sono fatto... la parte finale dei bbcode è MOLTO MOLTO casareccia ma almeno funziona (in pratica prendo le immagini singole non tutto in automatico)

    Classe BBCode: (bbcode.class.php)

    Codice PHP:
    <?php
    class BBCode {
        
        function 
    Text_Replace($text) {
            
            
    $tag = array(
                
    '/\[b\](.*)\[\/b\]/',
                
    '/\[i\](.*)\[\/i\]/',
                
    '/\[u\](.*)\[\/u\]/',
                
    '/\[s\](.*)\[\/s\]/',
                
    '/\[h1\](.*)\[\/h1\]/',
                
    '/\[h2\](.*)\[\/h2\]/',
                
    '/\[h3\](.*)\[\/h3\]/',
                
    '/\[h4\](.*)\[\/h4\]/',
                
    '/\[h5\](.*)\[\/h5\]/',
                
    '/\[h6\](.*)\[\/h6\]/',
                
    '/(\[url=)(.+)(\])(.+)(\[\/url\])/',
                
    '/\[img\](.*?)\[\/img\]/',
                
    '/(\[size=)(.+)(\])(.*?)(\[\/size\])/',
                
    '/(\[color=)(.+)(\])(.*?)(\[\/color\])/',
                
    '/\[list\](.*)\[\/list\]/',
                
    '/\[li\](.*)\[\/li\]/',
                
    '/\[marquee\](.*)\[\/marquee\]/',
                
    '/\[center\](.*)\[\/center\]/',
                
    '#\[code\](.*?)\[\/code\]#e',
                
                
    // BBCode Video
                
    '/\[yb\](.*)\[\/yb\]/',            
            );
            
            
    $replace = array(
                
    '[b]$1[/b]',
                
    '[i]$1[/i]',
                
    '<u>$1</u>',
                
    '<s>$1</s>',
                
    '<h1>$1</h1>',
                
    '<h2>$1</h2>',
                
    '<h3>$1</h3>',
                
    '<h4>$1</h4>',
                
    '<h5>$1</h5>',
                
    '<h6>$1</h6>',
                
    '[url="$2"]$4[/url]',
                
    '[img]$1[/img]',
                
    '<span style="font-size:$2px">$4</span>',
                
    '<span style="color:$2">$4</span>',
                
    '<ul>$1[/list]',
                
    '[*]$1',
                
    '<marquee>$1</marquee>',
                
    '<center>$1</center>',
                
    "'<div class=\"code\">'.highlight_string(stripslashes('$1'), true).'</div>'",
                
                
    // BBCode Video
                
    '<object width="425" height="344">
                <param name="movie" value="http://www.youtube.com/v/$1"></param>
                <param name="allowFullScreen" value="true"></param>
                <param name="allowscriptaccess" value="always"></param>
                <embed src="http://www.youtube.com/v/$1" type="application/x-shockwave-flash" allowscriptaccess="always" allowfullscreen="true" width="425" height="344"></embed>
                </object>'
    ,
            );  
            
            
    $text preg_replace($tag$replace$text);
            
            return 
    $text;                 
        }
        
        function 
    Print_BBCode() {
            
            
    $dir "template/bbcode";
            
            print(
    "<img src=\"$dir/b.png\" onClick=\"document.textarea.text.value+='[b]Text[/b]'\">");
            print(
    "<img src=\"$dir/i.png\" onClick=\"document.textarea.text.value+='[i]Text[/i]'\">");
            print(
    "<img src=\"$dir/u.png\" onClick=\"document.textarea.text.value+='[u]Text[/u]'\">");
            print(
    "<img src=\"$dir/s.png\" onClick=\"document.textarea.text.value+='[s]Text[/s]'\">");
            print(
    "<img src=\"$dir/h1.png\" onClick=\"document.textarea.text.value+='[h1]Text[/h1]'\">");
            print(
    "<img src=\"$dir/h2.png\" onClick=\"document.textarea.text.value+='[h2]Text[/h2]'\">");
            print(
    "<img src=\"$dir/h3.png\" onClick=\"document.textarea.text.value+='[h3]Text[/h3]'\">");
            print(
    "<img src=\"$dir/h4.png\" onClick=\"document.textarea.text.value+='[h4]Text[/h4]'\">");
            print(
    "<img src=\"$dir/h5.png\" onClick=\"document.textarea.text.value+='[h5]Text[/h5]'\">");
            print(
    "<img src=\"$dir/h6.png\" onClick=\"document.textarea.text.value+='[h6]Text[/h6]'\">");
            print(
    "<img src=\"$dir/ul.png\" onClick=\"document.textarea.text.value+='[ul]Text[/ul]'\">");
            print(
    "<img src=\"$dir/li.png\" onClick=\"document.textarea.text.value+='[li]Text[/li]'\">");
            print(
    "<img src=\"$dir/center.png\" onClick=\"document.textarea.text.value+='[center]Text[/center]'\">");
            print(
    "<img src=\"$dir/marquee.png\" onClick=\"document.textarea.text.value+='[marquee]Text[/marquee]'\">");
            print(
    "<img src=\"$dir/font.png\" onClick=\"document.textarea.text.value+='[size=Number]Text[/size]'\">");
            print(
    "<img src=\"$dir/colour.png\" onClick=\"document.textarea.text.value+='[colour=Name]Text[/colour]'\">");
            print(
    "<img src=\"$dir/code.png\" onClick=\"document.textarea.text.value+='[code]Text[/code]'\">");
            print(
    "<img src=\"$dir/img.png\" onClick=\"document.textarea.text.value+='[img]URL[/img]'\">");
            print(
    "<img src=\"$dir/url.png\" onClick=\"document.textarea.text.value+='[url=URL]Text[/url]'\">");
            print(
    "<img src=\"$dir/yb.png\" onClick=\"document.textarea.text.value+='[yb]Video ID[/yb]'\">");

        }
    }
    ?>

    Classe Smiley: smiley.class.php
    Codice PHP:
    <?php
    class Smiley {
            
        function 
    Text_Replace($text) {
            
            
    $dir "template/smiley";
            
    $directory opendir($dir);
            
            while (
    $smiley readdir($directory)) {
                if (
    $smiley != "." && $smiley != "..") {
                    
    $value str_replace(".gif"""$smiley);
                    
    $text str_replace($value"<img src=\"$dir/$smiley\">"$text);
                }
            } 
            
            return 
    $text;
        }
        
        function 
    Print_Smiley() {
            
            
    $dir "template/smiley";
            
    $directory opendir($dir);
            
            while (
    $smiley readdir($directory)) {
                if (
    $smiley != "." && $smiley != "..") {
                    
    $value str_replace(".gif"""$smiley);
                    print(
    "<img src=\"$dir/$smiley\" onClick=\"document.textarea.text.value+='$value'\">");
                }
            } 
        }
    }
    ?>

    ESEMPIO:
    Codice PHP:
    <?php 
    require_once('bbcode.class.php');
    require_once(
    'smiley.class.php');
    $bbcode = new BBCode();
    $smiley = new Smiley();
    ?>

    <?php 
    $bbcode
    ->Print_BBCode();
    print(
    "
    "
    );
    $smiley->Print_Smiley();
    ?>

    <form action="" method="post" name="textarea">
    <textarea name="text"></textarea>

    <input type="submit" name="submit" value="Replace" />
    </form>

    <?php
    if (isset($_POST['submit'])) {
        
    $text $_POST['text'];
        
        
    $text $bbcode->Text_Replace($text);
        
    $text $smiley->Text_Replace($text);
        
        print(
    $text);
    }
    ?>
    Questo esempio è privo di sicurezza perchè sto realizzando un CMS e la classe di sicurezza che ho creato non l'ho ancora impementata...

    Spero di esserti di aiuto in questo modo

    IMPORTANTE: ATTENTO CHE QUANDO HO POSTATO IL CODICE SI E' MODIFICATO QUINDI NELLA FUNZIONE BBCODE CI SONO DEGLI ERRORI NON VOLUTI PURTROPPO!!!

  9. #9
    PS:NON SO' PERCHE' MA LA FUNZIONE CHE TI HO POSTATA NON VIENE VISUALIZZATA CORRETTAMENTE
    IMPORTANTE: ATTENTO CHE QUANDO HO POSTATO IL CODICE SI E' MODIFICATO QUINDI NELLA FUNZIONE BBCODE CI SONO DEGLI ERRORI NON VOLUTI PURTROPPO!!!
    Paradossale: parlando di bbcode siamo incappati in un bug del bbcode di html.it!!

    Sbirciando il tuo codice ho visto questa riga

    Codice PHP:
    '[img]$1[/img]'
    in pratica la conversione di [img] avviene con una immagine di larghezza di 500px... immagino che serva per preservare il layout.
    Non si tiene conto della grandezza originale... questo ti comporta che anche quando sono postate img piccole avranno tale larghezza con i relativi effetti di sgranamento.
    Io ho risolto il problema applicando una funzioncina (copiata in rete ma nn trovo più il link) che qualora supera l'altezza e la larghezza massima consentita le ridimensiona secondo tale misura.

    Codice PHP:
    function check_img($stringa,$width_max,$height_max){
            if(
    strstr($stringa,"alt=image>")){ //se nel messaggio c'è un'immagine
                
    $stringa_exp explode("alt=image>",$stringa); //suddividi il messaggio quando trovi "alt=image>"
                
    while(list($i,$item) = each($stringa_exp)){
                    
    //L'ultima stringa non deve essere processata ma direttamente inserita per l'uscita
                    
    if($i == count($stringa_exp)-1){
                        
    $stringa2 .= $item;
                        break;
                    }
                    
    $inizio strpos(rtrim($item), "[img]);//trova la posizione di [/img] $width_max || $img[1] > $height_max){
                        
    $end_tag = "[img],$end_tag,$item.[/img]");
                }
            }else 
    $stringa2 = $stringa;
            
    $vettore = array($stringa2,$stringa1,$img[0],$img[1]);
            return 
    $vettore[0];
        } 
    Non sò se ti può essere utile...

  10. #10
    stavo cercando anche io una funziona che facesse una cosa del genere...
    adesso me la studio per benino poi se mai posto eventuali problemi...

    grazie mille

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.