• Bannato User Attivo

    Questa richiesta mi ricorda qualcosa... 😛 😄
    Comunque il problema è proprio la funzione str-replace().

    Io apporterei queste modifiche:

    Forzando il termine da ricercare.
    Sappiamo, se non ricordo male :yuppi:, che una parola è un insieme di caratteri senza spazi. Ha inizio dopo uno spazio e finisce con lo spazio finale o carattere di punteggiatura.

    Potresti quindi aggiungere uno spazio iniziale e uno finale al termine da ricercare. Il problema è che dovresti ripetere in tutto anche per quei caratteri che comunque indicano la fine di una parola ( , ; . : - _ ' ? ! ecc....).

    Per il problema dell'apostrofo, prova a sostituirlo con il corrispondente ’ (apostrofo destro) ‘ (apostrofo sinistro).

    Potrebbe essere una soluzione?
    Al momento mi viene solo questa.....


  • User Attivo

    Ciao GloboGsm,
    Portatile84 ha grosso modo ragione... prova però con str_replace che ti consente di fare tutto con una sola operazione:

    $row->text = preg_replace ("#([\ ])$pattern([\ . ; : .])#si", "$1<a href="">$pattern</a>$2", $row->text);

    che nella tua ipotesi, dato il testo:
    sem sem semplice semaaa sem, sem: sem; sem. aaasem; aaasem sem
    restituisce:
    sem sem semplice semaaa sem, sem: sem; sem. aaasem; aaasem sem
    (i sottolineati sarebbero link o quello che vuoi tu :D).

    Il significato dell'istruzione può sembrare complicato ma non lo è: la prima parte in rosso identifica il carattere "spazio bianco" mentre la seconda parte identifica il carattere "spazio bianco" oppure un segno di punteggiatura.
    I caratteri $1 e $2 in verde si riferiscono all'eventuale istruzione in rosso trovata: praticamente $1 rimette lo spazio se viene trovato mentre $2 rimette lo spazio o la punteggiatura. Lo slash precede i caratteri particolari tipo il punto o lo spazio... (mi pare che se la metti sempre non ti sbagli mai :)). I cancelletti delimitano il criterio di ricerca e "si" dopo il cancelletto sono due modificatori (per un elenco completo puoi guardare http://it.php.net/manual/it/reference.pcre.pattern.modifiers.php).

    Ovviamente puoi arricchire il tutto come vuoi, aggiungendo per esempio nel pattern l'uso dei caratteri "<" e ">" per fargli trovare anche le parole in bold, corsivo ecc...

    L'esempio che ti ho scritto non risolve il caso in cui "sem" sia il primo termine della stringa, ma credo che giocando un po' con la funzione ne dovresti venire a capo semplicemente. Puoi guardare altri dettagli della funzione preg_replece sulla guida di riferimento.

    Anche per quanto concerne gli apostrofi Portatile84 ha ragione, sostanzialmente l'apostrofo spezza la stringa... O la cambi con un'altra apostrofo o provi a quotarla, magari mettendo **addslashes($pattern) **nel criterio di ricerca che ti ho dato, ma devi fare un po' di tentativi che così al volo non mi è chiaro dove intervenire.
    :ciauz:


  • Super User

    ho provato a sostituire questo:```
    $row->text = preg_replace( $pattern, $replacement, $row->text );

    con questo:
    

    $row->text = preg_replace ("#([\ ])$pattern([\ . ; : .])#si", "$1<a href="">$pattern</a>$2", $row->text);

    ma il mambot ha perso la sua funzione, praticamente il testo si legge normale, senza funzione tooltip. :(

  • User Attivo

    No, non era quella la sostituzione, era solo un esempio in cui mettevo un link stile wiki piuttosto che un tips. 😄
    Non conosco mambot e devi fare qualche tentativo.

    Prova per prima cosa a sostituire:
    $pattern = "/(" . $search_term . ")(?![^<]?>)/i";*

    con:
    $pattern = "#([\ ])$search_term([\ . ; : .])#si";

    e poi sostituisci:
    $replacement = "<span style='border-bottom: 1px dotted #666;' class='$class' title='$title :: $description'>\1</span>";

    con:
    $replacement = "$1<span style='border-bottom: 1px dotted;' class='$class' title='$title :: $description'>$term</span>$2";

    Quando fai la prova, se non ti funziona (molto probabile:fumato:) vai a vedere cosa c'è scritto sul codice sorgente e postalo qui, che con qualche tentativo forse ci riusciamo!
    :ciauz:


  • Super User

    Nulla, non va :bho:
    Allego i file del mambot e del componente che lo gestisce.

    PS: Qui c'è un'altra discussione del sorgente della libreria che sto usando io, e anche esternamente a joomla, sembra non funzionare, o meglio, io non riesco a farlo funzionare 😄


  • User Attivo

    Mi riporti il sorgente intorno ad un tips?


  • User Attivo

    Ho sostituito:
    $pattern = "/(" . $search_term . ")(?![^<]?>)/i";*
    con questo:
    $pattern = "#([\ ])$search_term([\ , ; : .])#si";

    questo:
    $row->text = preg_replace( $pattern, $replacement, $row->text );
    con questo:
    $row->text = preg_replace( $pattern, $replacement, str_replace(" ", " ", $row->text) );
    nel caso il termine compaia due volte di seguito, una dopo l'altra;

    questo:
    $replacement = "<span style='border-bottom: 1px dotted #666;' class='$class' title='$title :: $description'>\1</span>";
    con questo:
    $replacement = "$1<span style='border-bottom: 1px dotted;' class='$class' title='$title :: $description'>$term</span>$2";

    sostanzialmente quanto già detto. Dovrebbe essere compatibile per le versioni di php successive alla 4.0.4.

    Il risultato è nello screenshot allegato, in cui il mouse e sull'ultima parola sottolineata. Se mi dai qualche altra indicazioni posso aiutarti...
    :ciauz:


  • User

    Ho provato il mambot su un Joomla che ho in locale. Ho cambiato questa riga in mosfwtooltips.php (metto in grassetto quello che ho aggiunto)

    $pattern = "/\b(" . $search_term . ")\b(?![^<]*?>)/i";

    Così non viene evidenziato il termine quando è contenuto come parte di un'altra parola. Però secondo me ci sono altri bug perché il tooltip non si vede come si dovrebbe cioè vedo quello standard non quello di mootools.

    Comunque prova a vedere se risolvi uno dei problemi, semmai si vedrà poi per l'altro.


  • Super User

    Innanzitutto, vi ringrazio entrambi per l'aiuto e il tempo che state dedicando a questo mio problema.

    Facciamo un sunto della situazione, in modo da capire quali sono i bug riscontrati e intervenire su di essi:

    1. In un sito joomla installato in remoto, il tips funziona solo nella home page, e si vede bene sia con FF, che con IE.
      Nelle altre pagine, sembra non funzionare la libreria mootools.

    2. Se, nella stesura del testo che dovrà comparire nel tips, si usano degli apostrofi, il testo del tips non viene visualizzato, ne in home page, ne in altre pagine, stesso discorso con FF e IE. (ma non considero un problema questo)

    3. Se è attivo un tips su un termine che a sua volta, è parte integrante di un altro termine, quest'ultimo viene visto come tips. (Risolto con la modifica citata da gmassi)

    Vi mostro 3 immagini con il tips in azione, in modo da capire come dovrebbe essere visualizzato.

    Giusta visualizzazione in home page, con FF e IE:
    image

    Errata visualizzazione in altre pagine, con FF (no mootools + testo troncato):
    image

    Errata visualizzazione in altre pagine, con IE [(no mootools) lo sfondo del testo si vede rosso per una mia impostazione di XP, altrimenti sarebbe bianco]:
    image

    Rimane il bug più importante, e cioè, la visualizzazione nelle pagine al di fuori della home page !
    Grazie di nuovo ragazzi 😉


  • User Attivo

    Ciao,
    non conoscevo l'uso di \b, che sostanzialmente significa "delimitatore di parola"... veramente un'ottima soluzione, anche se non capisco ancora l'utilità dalla parte che segue, quella in rosso:
    $pattern = "/\b(" . $search_term . ")\b(?![^<]?>)/i*";
    ma questa è pura speculazione informatica...;)

    Per quanto concerne l'errata visualizzazione ora è chiaro il problema.
    Nella sostituzione c'è la righa:
    <span style='border-bottom: 1px dotted #666;' class='$class' title='$title :: $description'>$term</span>
    e quella che tu chiami errata visualizzazione è in realtà più che corretta. Probabilmente in home si utilizza un altra funzione con i relativi fogli di stile. Se vuoi rendere tutto uniforme a quanto vedi in home devi andare in homepage, visualizzare il codice sorgente, copiare tutto il pezzo di codice intorno ad un tips qualunque, che nell'esempio sarà qualcosa del tipo:
    ambito <.......>Web Design</...>,
    dove al posto dei puntini potresti avere uno span, un div o qualcosa del genere, con delle classi o degli stili.

    Una volta copiata quella stringa bisogna fonderla con quella in neretto sopra riportata, se la posti lo facciamo insieme...
    :ciauz:


  • Super User

    Ecco a te, questo è di un tips in home page:

    <span style='border-bottom: 1px dotted #666;' class='tip_Web_Design' title='Definizione :: attività di ideazione, progettazione e costruzione di un sito internet.'>Web Design</span>
    ```e questo di altra pagina:
    
    

    <span style='border-bottom: 1px dotted;' class='tip_Restyling' title='Definizione :: rinnovare la grafica e i contenuti di un Sito Internet gia esistente.'>Restyling</span>

    
    Sono identici.

  • User

    @ceccus

    anche se non capisco ancora l'utilità dalla parte che segue, quella in rosso:
    $pattern = "/\b(" . $search_term . ")\b(?![^<]?>)/i*";Quello è un lookahead. Il problema è che una parola per cui normalmente si dovrebbe creare il tooltip potrebbe trovarsi dentro un tag html (in un attributo alt, title o nome di classe per esempio) e in questo caso la sostituzione non si deve fare per non rovinare il codice. Molti tutorial sulle espressioni regolari non spiegano lookaheads e lookbehinds, uno che invece lo fa è questo

    http://www.tote-taste.de/X-Project/regex/printable.html#6

    @globo
    Hai ancora il problema? Una cosa che ho notato guardando meglio è che il mambot non include il percorso completo del javascript e questo potrebbe creare qualche problema.

    Aggiungi $mosConfig_live_site in queste righe di mosfwtooltips.php

    
    function botMosFwToolTips( $published, &$row, &$params, $page=0 ) {
        global $database, $_MAMBOTS, $mainframe, **$mosConfig_live_site**;
    
    

    if ( !isset($_MAMBOTS->_content_mambot_params['mosfwtooltips']) ) {
    $mainframe->addCustomHeadTag('<script type="text/javascript" src="' . $mosConfig_live_site . '/components/com_fw_tooltips/mootools.v1.11.js"></script>');
    $mainframe->addCustomHeadTag('<script type="text/javascript" src="' . $mosConfig_live_site . '/components/com_fw_tooltips/mosfwtooltips.js"></script>');
    $mainframe->addCustomHeadTag('<link href="' . $mosConfig_live_site . '/components/com_fw_tooltips/fw_tooltips.css" rel="stylesheet" type="text/css" />');

    Vediamo se cambia qualcosa.

  • Super User

    Grazie gmassi, ora non posso perchè ho seri problemi col server, appena sistemo il tutto, faccio la prova e ti faccio sapere 😉


  • User Attivo

    Quello è un lookahead. Il problema è che una parola per cui normalmente si dovrebbe creare il tooltip potrebbe trovarsi dentro un tag html (in un attributo alt, title o nome di classe per esempio) e in questo caso la sostituzione non si deve fare per non rovinare il codice. Molti tutorial sulle espressioni regolari non spiegano lookaheads e lookbehinds, uno che invece lo fa è questoGrazie della delucidazione...

    Hai ancora il problema? Una cosa che ho notato guardando meglio è che il mambot non include il percorso completo del javascript e questo potrebbe creare qualche problema.Esatto, ho fatto la prova in locale e fornendo i percorsi assoluti dei tre file il problema è risolto:
    ***<script type="text/javascript" src="components/com_fw_tooltips/mootools.v1.11.js"></script>
    <script type="text/javascript" src="components/com_fw_tooltips/mosfwtooltips.js"></script>
    <link href="components/com_fw_tooltips/fw_tooltips.css" rel="stylesheet" type="text/css" />


    Questo perché nel caso che ho verificato il mod_rewrite faceva comparire la pagina come se fossero in una sottodirectory e quindi nei tre percorsi relativi non era presente alcun file.
    :ciauz:


  • Super User

    Perfetto, funziona alla grande, siete grandi :vai:


  • User Newbie

    Si potrebbe avere il modulo funzionante su IE7???
    Esiste un area download???

    GRazie
    Alberto


  • Super User

    che problema riscontri ?