/navPath]
<%perl>
my @uris = $m->comp("/priv/comp2uri", $m->fetch_next_all());
my @titles = map $_->name() => $m->fetch_next_all();
return unless $#uris == $#titles;
%perl>
% for (my $i=0; $i<@uris-1; $i++) {
<%$titles[$i]%> ->
% }
<%$titles[-1]%>
!!! Listing 4
[Datei pub/search/dhandler, Defaulthandler zur Erzeugung
der Suchseiten]
<%method title>Suche <%$page->{title}%>%method>
Suche im Bereich <%$page->{title}%>
<%once>
my %list = ( "searchjazz.html" => { title => "Jazz",
genre => "jazz",
},
"searchrock.html" => { title => "Rock",
genre => "rock",
},
"searchclassic.html" => { title => "Klassik",
genre => "classic",
},
"searchcountry.html" => { title => "Country",
genre => "country",
},
);
%once>
<%shared>
my $page = %list->{$m->dhandler_arg()};
%shared>
!!! Listing 5
[Datei pub/search/search, Anzeige der Suchtreffer]
<%method title>Suchergebnisse%method>
Trefferliste
... ... ...
<%perl>
my @ids;
if ($crit eq "title")
{ @ids = $catalog->searchTitle($text);
}
elsif ($crit eq "artist")
{ @ids = $catalog->searchArtist($text);
}
%perl>
... ... ...
Die folgenden CDs wurden zu Ihrer Suche gefunden
<%init>
my $catalog = new Catalog();
$catalog->setType($genre);
%init>
<%args>
$crit => "title"
$genre => "classic"
$text => ""
%args>
!!! Listing 6
[Datei pub/cart/add, Komponente zur Bestückung des
Einkaufskorbs]
<%perl>
my $catalog = new Catalog();
for my $cd (@id)
{ $cart->setCount($cd, 1);
my ($type, $title, $artist, $price) = $catalog->getDetails($cd);
$cart->setPrice($cd,$price);
my $descr = $m->scomp( "descr",
title => $title,
artist => $artist,
price => $price,
);
$cart->setDescr($cd, $descr);
}
%perl>
<& showCart.html &>
<%def descr>
<%$title%> von <%$artist%>
zum Einzelpreis von
<%$price%> DM
<%args>
$title => ""
$artist => ""
$price => 0
%args>
%def>
<%init>
my $cart = $session{cart} ||= new Cart();
%init>
<%cleanup>
$session{cart} = $cart;
%cleanup>
<%args>
@id => ()
%args>
!!! Listing 7
[Datei Cart.pm, Cart-Klasse]
#
# @(#) Cart Modul für Mason-CD-Shop
#
# Autor Peter Dintelmann
#
# Version 1.0
#
# Einkaufskorb für den Mason-CD-Shop.
#
# ----------------------------------------------------------------------------
package Cart;
use strict;
use vars qw($VERSION);
$VERSION = "1.0";
# ----- Konstruktor -----
#
sub new { return bless {}, shift }
# ----- getItems() -----
# * gibt Liste aller Items im Einkaufskorb zurück
#
sub getItems { return keys %{$_[0]} }
# ----- delItem() -----
# * löscht ein Item aus dem Einkaufskorb
#
sub delItem { delete ${$_[0]}{$_[1]} }
# ----- reset() -----
# * löscht den gesamten Inhalt des Einkaufskorbs (nach erfolgter Bestellung)
#
sub reset
{ my $this = shift;
$this->delItem($_) for keys %$this;
}
# ----- getCount() -----
# * gibt die aktuelle Anzal des übergebenen Items zurück
#
sub getCount { return $_[0]->{$_[1]}->{count} }
# ----- setCount() -----
# * setzt die Anzahl des übergebenen Items auf einen neuen Wert
#
sub setCount
{ my ($this, $item, $count) = @_;
$this->{$item}->{count} = $count;
$this->delItem($item) if 0 == $count;
}
# ----- getDescr() -----
# * gibt die Beschreibung des übergebenen Items zurück
#
sub getDescr { return $_[0]->{$_[1]}->{descr} }
# ----- setDescr() -----
# * setzt die Beschreibung des übergebenen Items
#
sub setDescr
{ my ($this, $item, $descr) = @_;
$this->{$item}->{descr} = $descr;
}
# ----- getPrice() -----
# * gibt den Einzelpreis des übergebenen Items zurück
#
sub getPrice { return $_[0]->{$_[1]}->{price} }
# ----- setPrice() -----
# * setzt den Einzelpreis des übergebenen Items
#
sub setPrice
{ my ($this, $item, $price) = @_;
$this->{$item}->{price} = $price;
}
# ----- getTotalPrice() -----
# * gibt den Gesamtwert des Einkaufskorbs zurück
#
sub getTotalPrice
{ my $this = shift;
my $price = 0;
$price += $this->{$_}->{price} * $this->{$_}->{count} for keys %$this;
return $price;
}
# ----- Ende -----
# * signalisiere erfolgreiches Laden des Moduls
#
1;
!!! Listing 8