Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1

    Inserimento immagini su articoli CMS: segnaposto?

    Buona serata a tutto il forum.

    Vorrei sottoporvi una piccola questione, sorta durante lo sviluppo di un piccolo sistema CMS, molto semplice, per un piccolo sito che vorrei far gestire in autonomia al cliente.

    Ho già scritto tutta la parte dell'autenticazione e del listing degli articoli, e tutto funziona direi molto meglio di come pensavo che avrebbe funzionato all'inizio!

    Sto aggiungendo pian piano delle feature per completare il piccolo CMS, e una tra le più ostiche che mi son trovato ad affrontare da php-niubbo è quella dell'inserimento delle immagini nelle notizie.

    Pensando a come risolvere la questione, mi è venuta l'idea di imitare il funzionamento di Joomla, che trovo abbastanza adatto al mio caso, non utilizzando nessun editor WYSIWYG per l'editing delle notizie.

    Vorrei arrivare a questa situazione, ditemi se secondo voi la strada è percorribile, o se ci sono metodi migliori, purché arrivabili da uno alle prime armi come me:

    - nella fase di editing, quando devo inserire un'immagine, inserisco un segnaposto, tipo {IMG::25::right}

    - creo una sezione di upload (l'ho già fatto per gli allegati) con l'inserimento dei dettagli delle immagini (id, path, nomefile, etc..) in una tabella

    - il frontend quando trova il segnaposto carica, secondo l'esempio di prima, l'immagine con id 25, specificando nello style il float a destra.

    Cosa ne pensate? Troppo macchinoso?

    Grazie

  2. #2
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Può essere benissimo... per il segnaposto... evidentemente hai una sorta di template di pagina... in questo caso potrebbe andar bene come hai fatto, ma dipende molto da com'è la sintassi di questo template e dal parser

  3. #3
    ho organizzato il frontend con vari includes, quindi effettivamente risulta funzionare come un template.
    Quel che non ho capito è come dovrebbe funzionare la sostituzione del segnaposto con il relativo codice.
    Ossia a che livello devo processare il testo della notizia, se al momento in cui viene parsata o a livello più generale su tutta la pagina..
    Nel primo caso immagino di doverlo fare processando il risultato della query.. possibile?

    A livello di codice avete qualche suggerimento da darmi? Magari un suggerimento su cose già fatte a cui ispirarmi..

    Grazie

  4. #4
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Bisogna vedere come gestisci questi "template"... se hai delle variabili che rappresentano i contenuti allora devi semplicemente cambiare il blocco del segnaposto con il valore reale così come fai per le altre parti... se la cosa è complessa sarebbe meglio usare un motore di template già pronto, però...

  5. #5
    Il testo della notizia è estratto dal db, e inserito per comodità in una variabile, da richiamare nel template.
    codice:
    $testo_evento = nl2br(stripslashes(stripslashes($evento->testo_evento)));
    Immagino di dovermi inventarmi una funzione "segnaposto_to_img" da usare così
    codice:
    $testo_evento_img = segnaposto_to_img($testo_evento);
    e stampare la prima nel backend, per l'edit della notizia, e la seconda nel frontend.

    Giusto?

    Se così fosse qualche dritta per creare la funzione?

  6. #6
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    sì... ma... la funzione mi sembra semplice, o no? cosa è però esattamente il parametro? se fosse l'url, avresti semplicemente:

    Codice PHP:
    function segnaposto_to_img($src) {
      
    $tag '';
      
    $tag .= '<img src="'.
      
    $tag .= $src;
      
    $tag .= '/>';
      return (
    $tag);
    }; 

  7. #7
    riprendendo il post iniziale, i parametri da passare col segnaposto credo possano limitarsi a due, almeno per ora.
    Se ad esempio $testo_evento contiene in mezzo al testo, che presumibilmente potrà essere diciamo di 150-200 parole, quindi non solo l'immagine, ma una descrizione con all'interno i segnaposti per le immagini, il segnaposto {IMG::25::right}, la funzione segnaposto_to_img dovrebbe cercare il pattern {IMG::$1::$2}, e processarli così:
    - $1 è l'id della foto nel db, quindi farò una query per estrarre il path dell'immagine da inserire
    - $2 è il float, quindi se a destra, sinistra, o con il clear

    Fin qui ci posso arrivare.

    Quel che non so fare è:
    - cercare il segnaposto e cancellarlo
    - mettere al suo posto il return della funzione

  8. #8
    Utente di HTML.it
    Registrato dal
    Apr 2004
    Messaggi
    3,709
    Ah, ho capito... beh... la ricerca puoi farla con le funzioni di stringa o le espressioni regolari... per non usare le regexp e semplificare tutto potresti semplicemente usare dei segnaposto tipo:

    {IMG::25::right}

    A questo punto cerchi "{IMG" e poi esplodi il resto della stringa, ad es.:

    Codice PHP:
    // $tpl // (contiene il template) per esempio con {IMG::25::right}
    // ...
    $phb '{IMG'$phe "}"// marcatori di inizio e fine
    $pb strpos($ph$tpl); // posizione del placeholder
    if ($p !== false) {
      
    $pe strpos($pb$tpl$pb); // fine placeholder
      
    $pl $pe-$pb// lunghezza placeholder
      
    $cd substr($tpl$p+6$pl-2); // ...controllare! Insomma: tutto meno inizio e fine
      // $cd dovrebbe contenere 25::right
      
    list($id$pos) = explode('::'$cd);
      
    $tag '[img].../?id='.$id.' align=[/img]';
    };
    // ... 

    solo che devi mettere tutto in un ciclo per esaminare vari placeholders e poi usare str_replace per la sostituzione... non è "pulitissimo" come processo, ma è un modo semplice di procedere e forse per iniziare più facile che ragionare con regexp se poi avessi bisogno di modificarle.

    Consiglio cmq di usare un motore già pronto!
    ...da controllare soprattutto le posizioni (+1 / -1 da verificare...)!!!!

  9. #9
    Beh, mi hai dato un gran bel punto di partenza per le mie ricerche!
    Per le mie attuali competenze ci dovrò lavorare sopra un po', ma come credo avrai capito vorrei arrivare al risultato scrivendo e capendo tutto ciò che scrivo, anche se è sicuramente meno elegante e soprattutto performante rispetto a sistemi già preconfezionati.

    Ho usato per tanti anni Mamboserver che poi è diventato Joomla, ma ora, per cultura personale, vorrei non solo editare il lavoro degli altri, ma anche scrivere in prima persona, e risolvere i problemi capendo esattamente il procedimento.

    Certo il rischio (o meglio la sicurezza), è di reinventare la ruota, però sul piano didattico è fondamentale!

    Per adesso grazie, spero di cavare il mio ragno dal buco!

  10. #10
    per i posteri (salvo revisioni).. ecco il risultato funzionante!

    ho fatto qualche minima modifica, e cambiato i nomi alle variabili per essere un po' più esplicativi per un niubbo come me, ma ovviamente il 99% del merito è di eiyen, thanks a thousand!

    Codice PHP:
    <?php

    $testo_noimg 
    "Nel mezzo del cammin di nostra vita {IMG::12::right} mi ritrovai per una selva oscura {IMG::2::left}"// (contiene il template) per esempio con {IMG::25::right} 
    $ph_in '{IMG::'// marcatore di fine 
    $ph_in_len strlen($ph_in); // lunghezza marcatore di inizio 
    $ph_out "}"// marcatore di fine 
    $ph_out_len strlen($ph_out); // lunghezza marcatore di fine

    echo "

     testo_noimg = " 
    $testo_noimg;

    while(
    $ph_in_pos !== false) {$ph_in_pos strpos($testo_noimg$ph_in); // posizione del placeholder
        
    if ($ph_in_pos !== false) { // echo "

     
    ph_in_pos " . $ph_in_pos;
            
    $ph_in_pos = strpos($testo_noimg$ph_in); // posizione del placeholder
            
    $ph_out_pos = strpos($testo_noimg$ph_out); // echo "

     
    ph_out_pos " . $ph_out_pos;
            
    $ph_lungh = $ph_out_pos-$ph_in_pos; // echo "

     
    ph_lungh " . $ph_lungh;
            
    $ph = substr ($testo_noimg,$ph_in_pos,$ph_lungh+$ph_out_len); // echo "

     
    ph " . $ph;
            
    $pars = substr ($testo_noimg,$ph_in_pos+$ph_in_len,$ph_lungh-$ph_in_len); // echo "

     
    pars " . $pars;
            list(
    $id,$pos) = explode('::',$pars); // echo "

     
    id " . $id;    echo "

     
    pos " . $pos;
            
    $ph_tag = "img_id=$id e img_pos=$pos";
        };
        
    $testo_noimg = str_replace($ph,$ph_tag,$testo_noimg); 
    };

    echo "

     
    testo_img " . $testo_noimg;


    ?>
    Eseguendo lo script:

    testo_noimg = Nel mezzo del cammin di nostra vita {IMG::12::right} mi ritrovai per una selva oscura {IMG::2::left}

    testo_img = Nel mezzo del cammin di nostra vita img_id=122 e img_pos=right mi ritrovai per una selva oscura img_id=2 e img_pos=left

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.