Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    Sposta su e Sposta giù, come si realizza?

    Spero di riuscire a spiegarmi.
    Supponiamo che agli utenti io faccia inserire in una loro pagina personale dei links a dei siti.

    Questi link sono inseriti in modo "accumulativo". Cioè loro navigano in una lista gigante di link e quando ne trovano uno piacevole cliccando su "aggiungi link alla mia pagina dei link preferiti" fanno comparire quel link nella loro pagina.

    Fin qui tutto semplice e chiaro.

    I link sono suddivisi per argomento. Alcuni parlando di mele, altri di pere ed altri di carciofi.

    Nella pagina dei link personali essi sono di default visualizzati secondo l'ordine cronologico di aggiunta.
    Quindi può capitare che c'è un link di un sito che parla di mele seguito da due di carfiofi, poi altre mele poi una pera e così via.

    Vorrei dare la possibilità agli utenti di scegliersi la posizione dei link nella pagina. Lasciarsi organizzare da sè la lista dei link. Vorrei fare un sistema analogo a quello dei pannelli di gestione dei forum che hanno i links sposta su e sposta giù per posizionare le stanze del forum.

    Loro vogliono portare un link ad inizio lista e cliccano N volte il link "SPOSTA SU".

    Come lo organizzo usando db MYSQL se introdurre altre nuove tabelle?


    Come posso "gestire" questo problema? Avete idee e consigli da darmi?

  2. #2
    Ciao, ti porto l'esempio di un cms, Drupal..

    Per fare quello che dici tu Drupal sfrutta un sistema di pesi, questo significa che ad ogni voce viene assegnato un numero, più grande è questo numero piu pesante sarà la voce quindi si sposterà verso il basso e viceversa..

    La cosa si realizza semplicemente mettendo un campo "peso" sulla tabella dove salvi i link e per ogni link imposti il relativo peso.. l'utente clikkando sul pulsantino "sposta su" fa partire lo script che cambia di "+/-1" il peso del link e di fatto lo ripropone spostato "in su".. ovviamente i link saranno ordinati per il loro peso..

    Questa volta, più che un voto.. è favoreggiamento.

  3. #3
    aggiungi una tabella con id_user, id_link, ed id_order , tutti INT(10) UNSIGNED NOT NULL

    key (id_user, id_link)

    lasci tutto com'è ... salvi i links in un array usando la chiave

    while($row = mysql_fecth_assoc($query))
    $link_list[$row['id_link']] = $row;

    dove la query sarà il risultato per mostrare i link ... tipo
    SELECT id_link, url FROM tabella WHERE id_user = $uid

    aggiungi una sola query

    SELECT id_link FROM tabella_order WHERE id_user = $uid AND id_link IN(array_keys($link_list)) ORDER BY id_order ASC

    nel while($row = mysql_fetch_row($query)) crei la lsita links semplicemente scrivendo qualcosa tipo echo $link_list[$row[0]]['url'];

    e il gioco è fatto ... ovviamente il tutto si complica, pur seguendo una logica analoga, se vuoi anche raggruppamenti per tipo
    Formaldehyde a new Ajax PHP Zero Config Error Debugger

    WebReflection @WebReflection

  4. #4
    Non sapendo come hai organizzato le tue tabelle assumo che i link preferiti siano in una tabella nella quale sono presenti almeno i campi:

    id_link (primario autoincrementante)
    id_utente (utente a cui fa capo questo link preferito)
    url (url del link)
    descrizione (titolo del link)
    id_argomento (id dell'argomento di riferimento)

    Naturalmente (url e id_utente sono univoci)

    Io aggiungo un campo intero "peso".

    Quando aggiungi un nuovo preferito di 'pippo', peso è pari al risultato di
    select max(peso) from preferiti where id_utente='pippo'
    incrementato di 1.

    Quando li visualizzi usi
    select * from preferiti where id_utente='pippo' order by peso

    Per farli "salire" (e quindi perdere peso) ti crei una visualizzazione in cui a fianco ai link metti un'icona che ti passa l'id quel link.
    Quando uno fa click supponiamo sul link che ha id=5 un tu script lo riceverà in GET, quindi occorre risalire al link precedente (di peso) a quello scelto e scambiare il suo peso con quello di 5.
    Es

    select peso from preferiti where id_link=5
    //ottengo il peso del nostro link es: 20

    select id_link,peso from preferiti where peso<20 order by peso desc limit 1
    //cerco il link precedente (evitando rischi di "buchi") in peso es: 15 ,7
    Quindi ora so che
    id=5 ha peso 20
    id=15 ha peso 7


    update preferiti set peso=7 where id_link=5
    // assegno il peso di 15 a 5
    update preferiti set peso=20 where id_link=15
    // assegno il peso di 5 a 15
    scambiando quindi il peso di un link con il suo precedente.

    So che non è chiaro, ma prova a pensarci
    Fidatevi del dottor Auz!
    http://dottorauz.blogspot.com

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.