Bij mijn CMS loop ik tegen het volgende aan, en ik kan niet een voorbeeld vinden waar ik uit kan halen wat handig is:

In de cms kan je pagina's aanmaken, en artikeltjes (tekstjes). Artikeltjes kunnen op een of meerdere pagina's geplaatst worden, en moeten de mogelijkheid hebben om de volgorde (per pagina) te veranderen.

De volgende tabellen denk ik momenteel nodig te hebben (even velden die niet nodig zijn hiervoor weggelaten):

PAGINAS
id: PK

ARTIKELS
id: PK

PAGINA-ARTIKEL
pagina: FK
artikel: FK
volgorde: int

Is dit de handigste opzet?

En verder, hoe ik dat in mijn cms wilde gaan laten aanmaken:
Bij het maken (of wijzigen!) van een artikel krijg je een keuzevak (multiple) waar ze de pagina's kunnen selecteren. Zodra deze gesubmit worden, moet het volgende gebeuren:

Alle pagina's die geselecteerd zijn, moeten (blijven) bestaan in de lijst pagina-artikel. Pagina's die niet geselecteerd zijn moeten niet (meer) bestaan in de lijst.

allereerst gaat hij dan met een while loop alle pagina's uit de lijst langs, die NIET geselecteerd zijn. Met een mysql-query kijkt hij eerst of hij bestaat (SELECT where pagina=id) en vervolgens delete hij hem in dat geval.
vervolgens loopt hij de pagina's door die wel gekozen zijn, hij doet insert <waardes> en on duplicate NIKS (wat is "niks" overigens?).

Is dit een goede manier cq. hebben jullie ideeën? Ik vind vooral het laatste stukje niet echt heel netjes.
De opzet is prima, daar moet je niets aan veranderen. Voor het aanmaken van een nieuw artikel is er verder ook geen probleem, dat is een eenvoudige INSERT query.

Bij het updaten van de koppeling van een artikel aan verschillende paginas, is het wellicht het eenvoudigst om eerst alle koppelingen te verwijderen en daarna weer nieuwe koppelingen aan te maken voor de geselecteerde paginas. Op deze manier hoef je maar 2 queries uit te voeren en ben je waarschijnlijk het snelste klaar.
In dat geval lijkt het me handiger om in het tabel pagina-artikel een veld "prullenbak" te maken, waar een 1 komt te staan indien dat veld niet van toepassing is. Dit omdat -als je telkens de pagina's verwijdert- de volgorde ook weer kwijt is. De volgorde moet natuurlijk wel behouden blijven in dit geval (anders zou het erop neerkomen dat als je iets verandert aan het artikel, en submit, dat hij d.m.v. het verwijderen van alles, en opnieuw invoegen, de volgordes ook gelijk weggooit).

Zo dus doen?

Reageren