Volgorde items aanpassen

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • bekok
  • Registratie: Juni 2004
  • Laatst online: 05-08 12:59
Hoi,

Ik heb een website waar ik een lijst met bestanden weergeef. De lijst wordt uit een database opgehaald en momenteel worden ze gesorteerd op ID. Echter, ik wil de functionaliteit maken waarbij ik bij het veranderen van de bestanden tevens de volgorde kan veranderen. Ik heb erover nagedacht hoe dit logisch kan en dat is natuurlijk per bestand aanwijzen waar het moet staan. Het probleem hierbij is echter dat ik niet precies weet hoe ik dit toe moet passen, omdat eigenlijk alle bestanden van plek moeten veranderen als ik bijvoorbeeld het bovenste bestand ergens in het midden wil zetten.

Ik hoop dat het een beetje duidelijk is wat ik bedoel en dat iemand me hierbij kan helpen.

20" iMac; 2.4ghz Core 2 Duo; 3GB; Ati Radeon 2600HD Pro


Acties:
  • 0 Henk 'm!

  • CoolGamer
  • Registratie: Mei 2005
  • Laatst online: 20-09 15:47

CoolGamer

What is it? Dragons?

Je zou een veld kunnen toevoegen waar de sorteervolgorde wordt bijgehouden. Het bestand wat bovenaan staat geef je een 1, het bestand eronder een 2, enz.. Wanneer je een bestand naar boven wilt verplaatsen verwissel je de getallen van die twee. Een nieuwe voeg je toe door een nieuwe aan te maken met een getal wat 1 groter is dan de huidige grootste.

¸.·´¯`·.¸.·´¯`·.¸><(((º>¸.·´¯`·.¸><(((º>¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸<º)))><¸.·´¯`·.¸.·´¯`·.¸.·´¯`·.¸


Acties:
  • 0 Henk 'm!

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 19-09 16:51

LauPro

Prof Mierenneuke®

'order' veld toevoegen en daar op sorteren?

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 22:52

MueR

Admin Tweakers Discord

is niet lief

Goede manier om dat soort dingen af te dwingen is het sorteren laten gebeuren dmv pijltjes of soortgelijke dingen. Voor een eerste import is het wel handig om daar even tijdelijk tekstvelden neer te zetten waar je gewoon getallen in kan kloppen. Zo doet vBulletin het overigens wel met hun forum volgorde. Ik heb daar ondertussen mezelf aangeleerd om in stappen van 10 te werken, kan ik er altijd iets makkelijk tussen zetten.

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 18-09 22:40

Nick_S

++?????++ Out of Cheese Error

Er is geen mooie manier om dit in sql te doen, je zal dit in je programma of stored procedures moeten afvangen. Hier wordt er een beetje ingegaan op de stored procedures.

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


Acties:
  • 0 Henk 'm!

  • LauPro
  • Registratie: Augustus 2001
  • Laatst online: 19-09 16:51

LauPro

Prof Mierenneuke®

@MueR, met en simpele query kan je natuurlijk die volgorde-velden maal 10 doen als je ruimtetekort hebt.

Inkoopacties - HENK terug! - Megabit
It is a war here, so be a general!


Acties:
  • 0 Henk 'm!

  • MueR
  • Registratie: Januari 2004
  • Laatst online: 22:52

MueR

Admin Tweakers Discord

is niet lief

Exact :) Maar je wil niet altijd je DB in duiken.

[ Voor 71% gewijzigd door MueR op 16-02-2010 13:19 ]

Anyone who gets in between me and my morning coffee should be insecure.


Acties:
  • 0 Henk 'm!

  • bekok
  • Registratie: Juni 2004
  • Laatst online: 05-08 12:59
Ja het gebruiken van tientallen en dan de mogelijkheid om daar tussen volgordes te creëren is inderdaad ook een oplossing.
Er is echter (voor zover bekend) geen 'nettere' oplossing? Ik ga in ieder geval alvast even aan de gang met het tientallen systeem, bedankt!

20" iMac; 2.4ghz Core 2 Duo; 3GB; Ati Radeon 2600HD Pro


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
Beheer je het geheel via een interface? Dan kan je gewoon een order veld toevoegen welke incrementeel oploopt. Met een drag&drop interface kan je vervolgens de order opnieuw bepalen en de items een nieuwe index geven.

Via nested sets (ookwel MPTT genoemd) kan je ook eenvoudig twee items verwisselen in volgorde door de lft en rgt van beide elementen te verwisselen :)

Acties:
  • 0 Henk 'm!

  • bekok
  • Registratie: Juni 2004
  • Laatst online: 05-08 12:59
Het systeem zit momenteel zo in elkaar:
Zo wordt een bericht toegevoegd
Zo ziet de database er uit.
En de gegevens worden op de volgende manier opgehaald:
PHP:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
$sql = "SELECT id, naam, bron, rapport FROM nieuws ORDER BY id DESC ";
$result = mysqli_query($link, $sql);
if (!$result) {
    $error = 'Fout bij het ophalen van het nieuws';
    include 'error.html.php';
    exit();
}

$i = 0;

while ($row = mysqli_fetch_array($result)) {
    $nieuwsArray[] = array('naam' => $row['naam'], 'bron' => $row['bron'], 'rapport' => $row ['rapport'], 'nummer' => $i++);
}

if(!$nieuwsArray == 0) {
?>
   <ul id="nieuws">
<?php
    foreach ($nieuwsArray as $nieuws):
?>
    <li>
     Rapport <?php echo $i--;?>: <a href="nieuws/<?php echo $nieuws['rapport'];?>" target="_blank"><?php echo $nieuws['naam'];?></a><br />
     Bron: <?php echo $nieuws['bron'];?>

    </li>
<?php
    endforeach;
?>
   </ul>
<?php
}

include "footer.php";
?>


Het grootste probleem is dus eigenlijk wanneer er een nieuw item wordt toegevoegd die bijvoorbeeld ergens in het midden moet staan i.p.v. bovenaan.

20" iMac; 2.4ghz Core 2 Duo; 3GB; Ati Radeon 2600HD Pro


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
http://jqueryui.com/demos/sortable en zie mijn post hierboven :) Dus gewoon sortable toepassen in je ui en een knopje 'save'. Daarmee lees je de volgorde uit en zet je met een aantal queries de veranderde volgorde weer goed in de database.

Wel je order by aanpassen naar je kolom nummer in plaats van sorteren op id :)

[ Voor 14% gewijzigd door mithras op 16-02-2010 14:16 ]


Acties:
  • 0 Henk 'm!

  • bekok
  • Registratie: Juni 2004
  • Laatst online: 05-08 12:59
mithras schreef op dinsdag 16 februari 2010 @ 14:15:
http://jqueryui.com/demos/sortable en zie mijn post hierboven :) Dus gewoon sortable toepassen in je ui en een knopje 'save'. Daarmee lees je de volgorde uit en zet je met een aantal queries de veranderde volgorde weer goed in de database.

Wel je order by aanpassen naar je kolom nummer in plaats van sorteren op id :)
Ik heb gelezen over nested sets enzo, maar ik kom er eigenlijk niet echt uit.. :( Heb je toevallig een pagina met duidelijke uitleg hoe ik het kan implementeren in mijn systeem?

20" iMac; 2.4ghz Core 2 Duo; 3GB; Ati Radeon 2600HD Pro


Acties:
  • 0 Henk 'm!

  • mithras
  • Registratie: Maart 2003
  • Niet online
HTML:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
<ul id="sortable">
  <li rel="12">Document 1</li>
  <li rel="55">Document 2</li>
  <li rel="32">Document 3</li>
</ul>

<script type="text/javascript">
$('#sortable').sortable({
  stop: function(event, ui) {
    // Maak key => value paren
    // Loop door elk <li> element
    // Lees waarden uit rel attribuut
    // Voeg nieuw element aan array
    // Doe een asynchroon POST request met de data
  }
});
</script>


PHP:
1
2
3
// vang POST op
// Genereer van array een sql statement
// Voer sql statement uit


Volgens mij ben je er dan wel hoor :)

Als je het wat slimmer aanpakt kan je de oude waarde (uit de db) vergelijken met de nieuwe (van de POST data). Dan weet je wat er verwisseld is. Dan hoef je alleen die items aan te passen, wat weer wat efficienter is.

[ Voor 54% gewijzigd door mithras op 17-02-2010 21:45 ]

Pagina: 1