Newsgroup: it.comp.www.php
Titolo: Ordinare le foto di una photo gallery

Ho creato un mio sistema di photo gallery, ma ho un problema per gestirne l'odinamento.
se inserisco tipo 50 foto, poi mi accordo che la 37 deve stare al posto della 42 e che la 5 deve
spostarsi alla 20 come fareste per gestire questo tipo di ordinamento?
Al momento mi arrangio modificanto la data (soprattutto i secondi) di inserimento facendo poi
l'ordinamento per data, ma non mi sembra soluzione ottimale e potrebbe capitare che non ho secondi
sufficienti per spostare un gruppo di n foto (20 o 40) da una posizione all'altra.
Avete un'idea di come fare?
Grazie mille, Stefano


Puoi aggiungere un campo numerico per farlo... poi le ordini attraverso
quello (ad esempio nella query del db).
Enrico

 quello (ad esempio nella query del db).
Si questo mi pare ovvio ma se io ho adesso 5 foto da 1 a 5 e poi voglio inserire tra la 3 e la 4 una
foto come faccio? Mica posso a mano rinumerare le foto che potrebbero anche essere 1000.
Un'idea io ce l'ho ma vorrei sapere se qualcuno ha già affrontato o visto una soluzione.
ciao Stefano

 ciao Stefano
E' solo un'idea che mi è venuta stasera: ma usare i numeri con la
virgola?? Teoricamente sono infiniti, praticamente no, ma penso che un
numero a 12 cifre dietro la virgola possa essere memorizzato..
Enrico

spostarsi alla 20 come fareste per gestire questo tipo di ordinamento?
Potresti usare una lista linkata in avanti. Dipende dal dove memorizzi i
dati e come fai per tirarli fuori.
Un sistema abbastanza originale potrebbe essere l'associare un ID a ogni
foto, per esempio una foto la chiami 01730456_ALTRAROBBA.JPG. Quando fai
vedere la foto, elimini 01730456_ dall'output.
Ma questo ti indica la foto 0173, e dice che la foto successiva sara' la
foto 0456.
Quindi se crei altre, diciamo, cento foto, da 74007401 a 74999999 (9999,
qui, indica che la "catena" termina) e le vuoi inserire fra la 0173 e la
0456 nell'esempio fatto sopra, devi rinominare DUE file soltanto:
	01730456_ -> 01737400_
	74999999_ -> 74990456_
Il problema sta nel recuperare le foto, perche' *tutte le volte* ti devi
scandire l'intera directory (ma, se ora usi la data e l'ora... mi sa che
lo stai facendo comunque).
Leonardo
-- 
 What do you make, so fair and bright;
 What do you build with sails for flight;
 What do you weave with wool so white?

Stefano@ ha scritto:

Se utilizzi un database per la gallery, allora ti consiglio di 
aggiungere un campo alla tabella relativa alle immagini da mostrare che 
possa permetterti di dare un ordine alle foto.
Crea, ad esempio, il campo ShowOrderID
Numerando ShowOrderID in ordine crescente, e successivamente, 
richiedendo tramite la query risultati ordinati per ordine, avremo le 
foto mostrate a seconda del ShowOrderID.
Quindi ti consiglierei di lasciare una differenza di ShowOrderID di 10 
per ogni foto.
Mi spiego meglio: ecco come potrà risultare la tua tabella:
IDFoto    Titolo    Percorso    ShowOrderID
0         Mare1     mare1.jpg   0
1         Mare2     mare2.jpg   10
2         Mare3     mare3.jpg   20
In questo modo hai a disposizione 10 possibilità di "ripensarci" per 
ogni spazio tra una foto e l'altra (per inserire un'altra foto prima di 
mare3 ma dopo mare2, sarà sufficiente mettergli ShowOrderID = 11, per 
un'altra 12 , e cosi via...)
Se vuoi lasciarti piu margine aumenta la differenza tra l'uno e l'altro 
(ad es.: 0,100,200,300,400,500) e cosi via.
Spero di esserti stato utile,
ciao.

Enrico204 wrote:

via non complichiamo troppo le cose..
table photos
primary key id
varchar filename
per inserire fai una cosa del tipo..
$id = int; // position wanted
$file = string; // photo file name
mysql_query("BEGIN");
$isFree = mysql_query("SELECT id FROM photos WHERE id = $id");
if (mysql_num_rows($isFree) > 0) {
 mysql_query("UPDATE photos SET id = id + 1 WHERE id >= $id");
}
mysql_query("INSERT INTO photos (id, filename) VALUES ('$id', '$file')");
mysql_query("COMMIT");
e dovresti essere a posto..
-- 
www.iuz-lab.info
 - 
www.php-faq.org

Il Sun, 23 Sep 2007 01:01:36 +0200, Mrk ha scritto:
Ringrazio tutti quelli che mi hanno risposto ma ho seguito l'idea che avevo all'inizio ed è efficace quanto rapida.
In pratica ho fatto questo ragionamento:
mettiamo che ho 10 foto ordinate da 1 a 10
1
2
3
4
5
6
7
8
9
10
Spostare la 5 al posto della 9 significherebbe prendere tutte le foto dalla posizione 6 alla nove e decrementarle di una posizione, poi si prende la foto in posizione 5 e le si imposta la nuova posizione a 10
All'opposto se volessi spostare la 9 alla 5 dovrei prendere tutte le foto dalla 6 alla 9 e incrementare la loro posizione di un posto.
All'atto pratico ho aggiunto alla tabella FOTO un campo "ordina" dove le foto sono TUTTE ordinate progressivamente da 1 a n. Quando decido di spostarne una imposto un campo di un FORM dove inserisco la nuova posizione, poi mi porto dietro la posizione di partenza e l'id della foto (la tabella foto ha ovviamente un ID autoincrement che la identifica indipendentemente dalla posizione) e la nuova posizione.
Poi controllo se lo spostamento è in avanti o indietro e imposto 2 semplici query che incrementano/decrementano (in un solo colpo) tutte le foto comprese tra la posizione di partenza e quella di arrivo:
if($_POST['new_pos']>$_POST['pos']){
  mysql_query("UPDATE foto SET ordina=ordina-1 WHERE ordina > ".$_POST['pos']." AND ordina <=".$_POST['new_pos']." AND categoria=".(int)$_POST['gallery']);
  mysql_query("UPDATE foto SET ordina=".$_POST['new_pos']." WHERE id_foto=".$_POST['id_foto']);
}
if($_POST['new_pos']<$_POST['pos']){
  mysql_query("UPDATE foto SET ordina=ordina+1 WHERE ordina >=".$_POST['new_pos']." AND ordina <".$_POST['pos']." AND categoria=".(int)$_POST['gallery']);
  mysql_query("UPDATE foto SET ordina=".$_POST['new_pos']." WHERE id_foto=".$_POST['id_foto']);
}
Funziona alla grande con tempi dell'ordine di microsecondi anche in caso di spostamenti dalla posizione 1 alla 300.
Ovviamente quando inserirò una nuova foto nell'ultima posizione dovrò andarmi a prendere prima il valore MASSIMO della colonna "ordina" e aumentarlo di 1.
Spero vi torni utile.
Ciao Stefano

OPPURE UN SEMPLICE FILE DI TESTO CON L'ORDINE EFFETTIVO DELLE FOTO E I NOMI 
LI LASCI COME SONO .... scusa il maiuscolo l'ho dimenticato inserito.
"iuz" <us...@host.network> ha scritto nel messaggio 
news:fd47lh$ls0$1...@nnrp.linuxfan.it...
