!!! Listing 1 <%perl> my $hour = (localtime)[2]; my $greeting; if ($hour > 18) { $greeting = "Guten Abend"; } elsif ($hour < 12) { $greeting = "Guten Morgen"; } else { $greeting = "Guten Tag"; } <% $greeting %>,
folgende Umgebungsvariablen stehen zur Verfügung: % foreach my $key (sort keys %ENV) { % }
Variable Wert
<% $key %> <% $ENV{$key} %>
!!! Listing 2: [Datei /priv/comp2uri] <%perl> my @uriDir = split "/", File::Basename::dirname $r->uri(); my @fileDir = split "/", File::Basename::dirname $r->filename(); while (@uriDir && @fileDir && $uriDir[-1] eq $fileDir[-1]) { pop @uriDir; pop @fileDir; } my $uriRoot = join "/", @uriDir; my $fileRoot = join "/", @fileDir; return grep s/^$fileRoot/$uriRoot/i => map $_->source_file() => @_; !!! Listing 3: [Datei /navPath] <%perl> my @uris = $m->comp("/priv/comp2uri", $m->fetch_next_all()); my @titles = map $_->name() => $m->fetch_next_all(); return unless $#uris == $#titles; % 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}%>

Suche im Bereich <%$page->{title}%>


Bitte wählen Sie Ihr Suchkriterium
Titel
Künstler
sowie den
Suchtext:

 
<%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", }, ); <%shared> my $page = %list->{$m->dhandler_arg()}; !!! Listing 5 [Datei pub/search/search, Anzeige der Suchtreffer] <%method title>Suchergebnisse

Trefferliste


... ... ... <%perl> my @ids; if ($crit eq "title") { @ids = $catalog->searchTitle($text); } elsif ($crit eq "artist") { @ids = $catalog->searchArtist($text); } ... ... ... Die folgenden CDs wurden zu Ihrer Suche gefunden

% for my $cd (@ids) % { my ($type, $title, $artist, $price) = $catalog->getDetails($cd); % }
Titel Künstler Preis
<%$title%> <%$artist%> <%$price%>

Bitte markieren Sie diejenigen CDs, die Sie in den Einkaufskorb legen möchten und bestätigen Sie mit dem Knopf unten.


 
<%init> my $catalog = new Catalog(); $catalog->setType($genre); <%args> $crit => "title" $genre => "classic" $text => "" !!! 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); } <& showCart.html &> <%def descr> <%$title%> von <%$artist%>
zum Einzelpreis von <%$price%> DM <%args> $title => "" $artist => "" $price => 0 <%init> my $cart = $session{cart} ||= new Cart(); <%cleanup> $session{cart} = $cart; <%args> @id => () !!! 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