• Mercatino: Parte 9

    Passiamo ora alla realizzazione delle funzioni e all'aggiunta di parametri e campi nelle varie tabelle. E' la parte dove si cominciano a vedere risultati, ma non ancora pienamente funzionanti nell'ottica del prodotto finale. Aggiungeremo i vari articoli, tempo permettendo, via via che si implementano anche nel forum di vbulletin.it.


    Dopo il cambio di versione al prodotto, si crea il file /includes/functions_vtp.php delle funzioni globali e lo si include anche nel codice di vbulletin tramite un nuovo plugin e nella configurazione del prodotto per il controllo di presenza all'installazione o l'aggiornamento dello stesso:









    La prima funzione che vogliamo aggiungere al nostro prodotto è la visualizzazione del primo allegato (immagine) come icone daella discussione in lista discussioni. Ovviamente è una funzionalità che risulta utile anche per altri tipi di forum. Ci sono anche alcuni problemi correlati, come ad esempio la dimensione delle anteprima delle immagini, che non deve superare un certo limite, e neppure essere troppo piccolo. La dimensione ideale, dopo aver fatto moltissime prove e confrontato decine di siti che lo implementano, è di 100x100 pixel.

    Aggiungiamo dunque al nostro file appena creato la funzione, che mostra l'anteprima al posto dell'icona della discussione, ossia le faccine ecc:
    Codice PHP: [Visualizza]
    /**
     * vtp_set_thread_icon()
     * 
     * Set thread image to first or random attached picture, or to a default image.
     * 
     * @see 
     * 
     * @param mixed $thread
     * @param bool $showrandom
     * @return void
     */
    function vtp_set_thread_icon(&$thread$showrandom false)
    {
        global 
    $vbulletin;
        
        
    $ordersql 'ORDER BY ' . ($showrandom 'RAND()' 'attachmentid');

        
    $thread['threadiconpath'] = 'images/misc/vtp_nophoto.png'
        if(
    $thread['attach'])
        {
            
    $SQL "SELECT attachmentid, dateline 
                FROM " 
    TABLE_PREFIX "attachment 
                WHERE contenttypeid=1
                    AND contentid=
    $thread[firstpostid]
                    AND state='visible' 
                    AND (filename LIKE '%.gif' OR filename LIKE '%.jpg' OR filename LIKE '%.png' OR filename LIKE '%.jpeg') 
                
    $ordersql 
                LIMIT 1"
    ;
            if(
    $rs $vbulletin->db->query_first($SQL))
            {
                
    $thread['threadiconpath'] = "attachment.php?attachmentid=$rs[attachmentid]&d=$rs[dateline]&thumb=1"
            }
        }

    Essenzialmente, si passa alla funzione la discussione già preparata da vBulletin e un valore opzionale che indica la preferenza di visualizzazione delle immagini, che viene poi impostata nella variabile $ordersql.

    Si assegna poi un'immagine predefinita (se omessa viene mostrata l'icona di vbulletin), e poi si verifica se la discussione ha allegati. In caso che ce l'ha, si cerca nel database il primo messaggio della discussione ed eventuali immagini allegate. Contano soltanto le immagini del primo messaggio della discussione, perché rappresenta la presentazione dell'articolo in vendita. Gli altri messaggi non contano, in quanto eventualmente commenti o aggiunte.

    Quindi si interroga il database e quando viene trovato un'immagine, lo si assegna all'icona della discussione. Il parametro aggiuntivo "thumb=1" assicura che l'immagine venga mostrata sempre come anteprima, indifferentemente dall'impostazione all'interno del messaggio. Alla verifica del tipo di file si possono aggiungere altri tipi di immagini, se gestiti dal sistema.

    Ricordiamoci anche di aggiungere l'immagine predefinita alla definizione di installazione del prodotto: