Een weekje terug had ik jullie de vraag gesteld hoe ik makkelijk mijn menu kon opslaan in de database etc.
Dit menu moest zeg maar sleepbaar zijn, dit heb ik met jQuery nestedSortable gedaan.
Als je wilt opslaan genereert het script een Serialize output zoals dit:
Hoe sla ik dit het beste op in mijn database? Ik heb gezien dat het met json_decode vaak gedaan wordt, en ik heb daar uiteraard al het één en ander mee geprobeerd, maar ik kom er niet goed uit.
Eventueel kan het menu uiteraard ook nog naar hierarchy of array worden omgezet natuurlijk als dat makkelijker is.
waarom niet gewoon je database zo opbouwen dat je gewoon een tabel hebt voor menu waarin de regels: Id, Naam, SorteerPlek
1. Menu omzetten naar array
2. oude data van de database tabel kopieren naar een menubackup database tabel
3. met een lus de array regels uitlezen en met een query de database tabel updaten
4. als alles goed is gegaan, ben je klaar,, zo niet, dan kopier je de oude data dat nu in de backup tabel staat, terug naar het menu tabelletje in je database.
bij het maken van je website, gebruik je dus gewoon een lus dat data uitleest gesorteerd op SorteerPlek, daarnaast zit je hierdoor niet vast een specifieke menu namen.
waarom niet gewoon je database zo opbouwen dat je gewoon een tabel hebt voor menu waarin de regels: Id, Naam, SorteerPlek
1. Menu omzetten naar array
2. oude data van de database tabel kopieren naar een menubackup database tabel
3. met een lus de array regels uitlezen en met een query de database tabel updaten
4. als alles goed is gegaan, ben je klaar,, zo niet, dan kopier je de oude data dat nu in de backup tabel staat, terug naar het menu tabelletje in je database.
bij het maken van je website, gebruik je dus gewoon een lus dat data uitleest gesorteerd op SorteerPlek, daarnaast zit je hierdoor niet vast een specifieke menu namen.
if (isset($_POST['submit'])){
$savequery = "SELECT `ID`, `ParentID`, `Order`,`Title` FROM `pages` WHERE ID = '$rootid' ORDER BY `ParentID`, `Order`";
$saveresult = mysql_query($savequery);
while ($saverow = mysql_fetch_array($saveresult)){
mysql_query('UPDATE pages SET ParentID='.$ParentID.', Order='.$Order.' WHERE ID="'.$ID.'";');}}
heb al me al goed 1 tot 2jaar niet meer verdiept/gewerkt in PHP, dus zal eerst me kennis weer een beetje omhoog moeten halen..
Maar voor zover ik kan zien, doe jij het volgende:
- wachten tot 'submit event' word opgeroepen
- je haalt een record uit de database
Opmerking: je hebt '$rootid' in je code staan.. en geen '. $rootid .'
- je start een 'while' lus
- update elke record in je database
Als er ondertussen iets fout gaat, zit je dus met mogelijk meerdere items die op de zelfde 'order' staan, daarom suggereerde ik de regel die je wijzigt, daarvoor eerst naar de nieuwe tabel te schrijven.
Eventueel zou je ook gewoon een 'for' lus kunnen gebruiken aangezien je weet hoeveel items je hebt als je de inhoud van je array gaat tellen, wilt niet weglaten dat wat jij hebt gedaan waarschijnlijk beter is.