Visualizzazione risultati 1 fino 9 di 9

Discussione: Sistema Letto/Non letto per messaggi in un forum con i Cookie o il Database

  1. #1
    Guest

    Predefinito Sistema Letto/Non letto per messaggi in un forum con i Cookie o il Database

    Come da ttiolo, vorrei qualche consiglio su come potrei stratturare la cosa.
    Sto creandomi un forum però sono arrivato a questo problema: ordinare e mostrare i topic nuovo/letti.
    Come posso strutturare il sistema per fare come fanno praticamente tutti i forum? Mi sono guardato qualche sorgente di phpBB, ma non ci ho capito molto...
    Grazie in anticipo

  2. #2
    Guest

    Predefinito

    Prima quando avevo un sito ( prima che qualche utente del forum me lo cancelasse ) facevo in questo modo.

    In poche parole tu hai due pagina una dove fai un while di tutti i messaggi di quel utente dove stampi il titolo del messaggio e affianco un link del tipo pagina.php?id=10&do=leggiin poche parole invii oltre all'idea una variabile "letti" che verrà salvata nel record del messaggio nel campo azone così per sapere quali messaggi non solo letti ti basterà vedere quelli che non hanno la variabile leggi...auguri per il tuo sito

  3. #3
    Guest

    Predefinito

    Io creerei una tabella apposta per le letture con queste colonne

    id_topic_letto, id_utente


    e nella selezione dei topic fai una left join tra la tabella dei topic e la tabella per le "letture" dove l'id dell'utente è quello del navigatore

  4. #4
    Guest

    Predefinito

    Ho visto phpbb che usa i cookie. Col DB lo stavo già facendo (vedi: http://forum.it.altervista.org/php-m...a-tabella.html) e vorrei evitare, altrimenti userò quel sistema, però mi servirebbero consigli per ottimizzare!

    Grazie

  5. #5
    L'avatar di binarysun
    binarysun non è connesso Utente storico
    Data registrazione
    02-07-2004
    Messaggi
    2,017

    Predefinito

    Se ho capito quello che ti serve:
    Li ordini per data di ultima modifica, i più recente in alto.
    Poi evidenzi in base alla data ultima visita (presente nel cookie) quelli da leggere.
    Ma da quelli evidenziati togli i thread visitati di recente (che inserirai nel cookie ad ogni visita)
    "L'intelligenza è una pianta che va curata continuamente.
    Dovreste vedere com'è bello, il mio bonsai."
    Rat-man®

    [Gradient Text]
    [Su che server sei?]
    ->flickr

  6. #6
    Guest

    Predefinito

    E il cookie come posso strutturarlo per far si di memorizzare il thread visitato o meno? Stavo guardando i cookie del forum di AV e no nvedo traccia, se non di quello che dice son loggato. Anche lui utilizza il DB per far questo che vorrei?

  7. #7
    Guest

    Predefinito

    interessante come cosa...
    se usasi il db...
    io pensavo ad una cosa del genere ma non so se funziona...

    id_topic_letto, id_utente, data
    l'utente visita il topic e viene aggiunto alla tabella.
    quando un nuovo utente mette un nuovo messaggio nella discussione di dovrebbe fare il confronto tra il nome del utente che visita il topic di cui si prende la data e l'utente che inserisce il messaggio nuovo.
    se quello che inserisce il messaggio come data e maggiore allora compare la scritta "nuovo messaggio".

    poi visitando il topic si dovrebbe fare upload sulla tabella modificando il campo data prendendo id del topic....

    se sai un modo migliore fammi sapere....

  8. #8
    Guest

    Predefinito

    Usando il DB, ho già il sistema pronto! Siccome non vorrei "sfottere" troppo il DB per queste cose, soprattutto perché utilizzo query simili:
    Codice PHP:
    $sql = 'SELECT topic_id, topic_title, topic_open_u, topic_status, topic_time, topic_views,
    tu.user_name,
    ru.user_name AS reply_username,
    COUNT(DISTINCT cr.post_id) AS topic_replies,
    lp.post_id AS last_post, lp.post_time, lp.post_poster,
    up2db_status
    FROM '
    . TOPICS_TABLE . '
    LEFT JOIN '
    . USERS_TABLE . ' tu
    ON (topic_open_u = tu.user_id)
    LEFT JOIN '
    . POSTS_TABLE . ' cr
    ON (cr.post_t = topic_id)
    LEFT JOIN '
    . POSTS_TABLE . ' lp
    ON (lp.post_id = (SELECT MAX(pt.post_id)
    FROM '
    . POSTS_TABLE . ' AS pt
    WHERE pt.post_t = topic_id
    GROUP BY pt.post_t))
    LEFT JOIN '
    . USERS_TABLE . ' ru
    ON (lp.post_poster = ru.user_id)
    LEFT JOIN '
    . UP2DB_TABLE . '
    ON (up2db_topic = topic_id)
    AND (topic_f = '
    . $row['forum_id'] . ')' .
    (
    $user->data('logged') ? 'AND (up2db_user = ' . $user->data('id') . ')
    AND (up2db_update > '
    . (time() - 86400) . ')' : '') . '
    WHERE topic_f = '
    . $row['forum_id'] . '
    GROUP BY topic_id
    ORDER BY up2db_status DESC, topic_last_update, topic_time'
    ;
    Poi con le condizioni mostor quel che devo! Con un'altra query invece pulisco ed elimino tutti i record che sono minori di (time() - 86400) in questo modo tengo pulita anche la tabella e mostro il messaggio come, ormai, letto.

    Grazie in ogni caso

  9. #9
    Guest

    Predefinito

    scusa essendo che ci ho provato anche io un po di mesi fa e non ci sono riuscito
    a fare i messaggi letti e non...
    tu le tabelle quante sono e come le sono impostate....

Regole di scrittura

  • Non puoi creare nuove discussioni
  • Non puoi rispondere ai messaggi
  • Non puoi inserire allegati.
  • Non puoi modificare i tuoi messaggi
  •