producten met opties weergeven
Ik heb de volgende database opzet.
ARTIKEL( id PK, naam, omschrijving, prijs )
OPTIE( artikelcode PK, artikel_id FK, eigenschapnaam, eigenschapwaarde, meerprijs )
ARTIKEL
ID NAAM OMSCHRIJVING PRIJS
1 Jeans Mooie fit 20
OPTIE
ARTIKELCODE ARTIKEL_ID EIGENSCHAPNAAM EIGENSCHAPWAARDE MEERPRIJS
500 1 Maat S 0
500 1 Afwerking Regluar 0
501 1 Maat S 0
501 1 Afwerking Sand 5
502 1 Maat S 0
502 1 Afwerking Stone 5
503 1 Maat M 2
503 1 Afwerking Regluar 0
504 1 Maat M 2
504 1 Afwerking Sand 8
505 1 Maat M 2
505 1 Afwerking Stone 8
Met 1 query kan ik alle info ophalen. Maar hoe zet ik dit nu in een handige array?
Ik wil namelijk op 1 pagina meerdere artikelen tonen met direct dropdowns voor de opties en een bestel knop per product.
Gewijzigd op 03/09/2010 15:35:39 door Lars P
- Het artikel
- De categorie van een optie (dus maat of afwerking, heeft als foreign key art_id)
- De optie (dus Stone of S, heeft als foreign key cat_id)
Ja, je bedoelt dat ik de eigenschapsnaam (categorie) verder had moeten normaliseren.
Dus dan krijg je:
ARTIKEL( id PK, naam, omschrijving, prijs )
OPTIETYPE( id PK, naam, artikel_id FK )
OPTIE( id PK, naam, meerprijs, optietype_id FK )
Maar als ik met 1 query deze gegevens ophaal, krijg ik nog steeds 1 waslijst aan data. Met het volgende script krijg ik wel dropdown per optietype, maar kan geen unieke meerprijs per optie geven. Iemand een idee?
$opties = $query->result_array();
// --------------------------------
// Eerst alles in een array zetten.
// --------------------------------
$artikelen = array();
$eigenschappen = array();
foreach( $opties as $optie ) {
if( !array_key_exists($optie['id'], $artikelen) ) {
$artikelen[$optie['id']] = array('naam' => $optie['naam'],
'omschrijving' => $optie['omschrijving'],
'prijs' => $optie['prijs'],
'opties' => array()
);
}
if( !array_key_exists($optie['eigenschapsnaam'], $artikelen[$optie['id']]['opties']) ) {
$artikelen[$optie['id']]['opties'][$optie['eigenschapsnaam']] = array( 'waarde' => array());
}
if( !in_array($optie['eigenschapswaarde'], $artikelen[$optie['id']]['opties'][$optie['eigenschapsnaam']]['waarde']) ) {
$artikelen[$optie['id']]['opties'][$optie['eigenschapsnaam']]['waarde'][] = $optie['eigenschapswaarde'];
}
}
// --------------------------------
// Nu de artikelen tonen
// --------------------------------
foreach( $artikelen as $id => $artikel ) {
echo '<strong>'.$artikel['naam'].'</strong> - €'.number_format($artikel['prijs'], 2, ',','.').'<br />';
foreach( $artikel['opties'] as $naam => $waarden ) {
echo $naam.' :';
echo '<select name="'.$naam.'">';
foreach( $waarden['waarde'] as $waarde ) {
echo '<option>'.$waarde.'</option>';
}
echo '</select><br/>';
}
}
Gewijzigd op 03/09/2010 17:51:01 door Lars P