public function reorder($newParent, $newIndex) {
        if ($newParent != $this->parent_id) { //Move to submenu
            //items met $this->parent_id en sort>$this->sort met 1 verminderen
            $this->db->query("UPDATE pages SET sort = sort-1 WHERE sort>$this->sort AND parent_id=$this->parent_id");
            //daarna items met $newParent en sort>=$newIndex met 1`vermeerderen
            $this->db->query("UPDATE pages SET sort = sort+1 WHERE sort>=$newIndex AND parent_id=$newParent");
        } else {
            if ($newIndex > $this->sort) { //Move DOWN
                //items met sort<$newIndex and sort>$this->sort met 1 verminderen
                $this->db->query("UPDATE pages SET sort = sort-1 WHERE sort<=$newIndex AND sort>$this->sort AND parent_id=$this->parent_id");
            }
            if ($newIndex < $this->sort) { //Move UP
                //items met sort>$newIndex and sort<$this->sort met 1 vermeerderen
                $this->db->query("UPDATE pages SET sort = sort+1 WHERE sort>=$newIndex AND sort<$this->sort AND parent_id=$this->parent_id");
            }
        }
        $this->db->query("UPDATE pages SET sort = $newIndex, parent_id=$newParent WHERE id=$this->id");
    }


Bovenstaande is mijn code voor het aanpassen van de volgorde van mijn pagina's.
Heb er al erg mee zitten stoeien maar kom er niet uit.
Ik heb bijv in mij db netjes een aantal pagina's: (de nummertjes is de kolom sort)
0 - Pagina 1
1 - Pagina 2
2 - Pagina 3
3 - Pagina 4
4 - Pagina 5
5 - Pagina 6
Als ik dan pagina op positie 0 naar positie 3 verplaats krijg ik
0 - Pagina 2
1 - Pagina 3
2 - Pagina 4
3 - Pagina 1
3 - Pagina 5
3 - Pagina 6
Het eerste stukje klopt wel. maar de laatste 2 3en moet 4 5 zijn
Dit handmatig goed gezet en Pagina 1 weer naar positie 0 verplaatst krijg ik dit:
0 - Pagina 1
0 - Pagina 2
0 - Pagina 3
0 - Pagina 4
1 - Pagina 5
2 - Pagina 6
Wat doe ik fout of zie ik over het hoofd?
Het is niet duidelijk wat er in $this->sort en $this->parent_id staat en waarmee de functie precies mee aangeroepen wordt. Kun je iets meer van het proces laten zien?
$this->sort en $this->parent_id bevatten de huidige waarden van de betreffende variabelen. Parent word gebruikt om zoals de naam als suggereert de parent aan te geven bij submenu items

Eerst wordt de pagina geladen in de class ($this->sort en $this->parent_id zijn nu gezet op de huidige waarden van de db) en daarna word deze functie uitgevoerd met $_GET variablen als parameters. De $newParent en $newIndex spreken voor zich, zoals de naam aangeeft zijn dit de nieuwe waarden.
OK, ik heb er een hele tijd naar zitten kijken, maar ik kom er niet goed uit. Ites zegt me dat het niet zo kan werken, maar ik kan niet goed uitleggen waarom.
Ik zou het sowieso heel anders oplossen. Meer iets met inlezen in een array en dan weer updaten of zo.
Als $this->sort een array is dan kan je niet daar een vergelijking mee doen als:


<?php
if($newIndex > $this->sort) {

}
?>


Je zou dan met foreach door alle $this->sort array waarden moeten lopen. Dan kan je voor elke waarde kijken of deze kleiner is dan $newIndex.

Reageren