producten met opties weergeven

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Lars P

Lars P

03/09/2010 15:34:10
Quote Anchor link
Ik wil producten weergeven met verschillende dropdowns voor de opties. Bij voorbeeld een broek met de opties 'maat' en 'afwerking'.

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
 
PHP hulp

PHP hulp

08/05/2024 04:22:18
 
Pim -

Pim -

03/09/2010 15:51:00
Quote Anchor link
Je opzet is verkeerd. Je moet 3 tabellen hebben:
- 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)
 
Lars P

Lars P

03/09/2010 17:49:11
Quote Anchor link
Hoi Pim,

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> - &euro;'.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
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.