allg. Informationen zum Shop gibt es hier: shop.
die Shop Warenkorbfunktionen. Attribute:
Eingeschlossen in dieses Element wird der Inhalt, welcher ausgegeben werden soll, wenn sich kein Produkt im Warenkorb befindet
<ty-Shop:basketSumQuantityZero>
<div class="no-products">
<ty:content id="no-products">Der Warenkorb enthält noch keine Produkte.</ty:content>
<a href="/shop.html">Einkauf Fortsetzen</a>
</div>
<ty-Shop:basketSumQuantityZero>
Eingeschlossen in diesem Element wird der Inhalt des Warenkorbs ausgegeben, wenn mindestens ein abgelegt wurde
<ty-Shop:basketSumQuantityNotZero>...Warenkorbinhalt...</ty-Shop:basketSumQuantityNotZero>
Eingeschlossen in das Element wird die Produktliste
<ty:shop element="basket" type="form">
<ty-Shop:basketSumQuantityNotZero>
<ty-Shop:basketProducts>
<!-- Artikelname und Hersteller -->
<ty-Shop:articleName/> (<ty-Shop:articleManufacturer/>)
<!-- Anzahl und Löschen -->
Anzahl: <ty-Shop:basketProductQuantity type="editable"/> <!-- Anzahl kann geändert werden -->
<ty-Shop:basketProductRemove>Produkt aus Warenkorb entfernen</ty-Shop:basketProductRemove>
<!-- Preise -->
Einzelpreis: <ty-Shop:basketProductPriceSingle/>
<ty-Shop:basketProductIfHasDiscount>
Regulärer Preis: <ty-Shop:basketProductRegularPriceSingle/>
Rabatt: <ty-Shop:basketProductDiscountPercent/>%
</ty-Shop:basketProductIfHasDiscount>
Discountpreis: <ty-Shop:basketProductPriceSingleDiscount/>
Gesamtpreis: <ty-Shop:basketProductPriceSum/><!-- =Anzahl*Einzelpreis -->
</ty-Shop:basketProducts>
<!-- Warenkorb aktualisieren -->
<ty-Shop:basketUpdateBasket></ty-Shop:basketUpdateBasket>
</ty-Shop:basketSumQuantityNotZero>
</ty:shop>
Output Selectbox
Hiddenformular für Formulardaten
Wird auf der Produkdetail-Seite verwendet. Attribute:
Im folgenden werden zur Wahrung der Übersichtlichkeit kleiner Beispiele aufgeführt. Diese können auch innerhalb eines <ty:shop element=„article“ source=„shop_art_id“> enthalten sein
Beispiel:
<ty:shop element="article" source="shop_art_id"> <h1><ty-Shop:articleName /></h1> <div>Hersteller: <ty-Shop:articleManufacturer/></div> <div>Kurzbeschreibung: <ty-Shop:articleTeaser/></div> <div>Beschreibung: <ty-Shop:articleDescription/></div> <div>weitere Beschreibungen: <ty-Shop:articleAdditionalDescription field="2"/></div> <div>Preis: <ty-Shop:articleLowestPrice/></div> <div>MwSt.: <ty-Shop:articleVat/></div> <div>Variable: <ty-Shop:articleVariable name="region"/></div> </ty:shop>
Am Produkt können bis zu fünf frei definierbare Variablen vergeben werden. Die Werte werden dem Produkt in der jeweiligen Variante zugeordnet und müssen daher über das Subelement articleOptions> augelesen werden.
<ty:shop element="article" source="shop_art_id">
<ty-Shop:articleOptions useAnchor="no">
<strong><ty:content id="datadetail" topic="global">Frei definierbare Daten:</ty:content></strong><br/>
<ty-Shop:optionVar1EntityConditional><ty-Shop:optionVar1Entity/>: <ty-Shop:optionVar1Value/><br/></ty-Shop:optionVar1EntityConditional>
<ty-Shop:optionVar2EntityConditional><ty-Shop:optionVar2Entity/>: <ty-Shop:optionVar2Value/><br/></ty-Shop:optionVar2EntityConditional>
<ty-Shop:optionVar3EntityConditional><ty-Shop:optionVar3Entity/>: <ty-Shop:optionVar3Value/><br/></ty-Shop:optionVar3EntityConditional>
<ty-Shop:optionVar4EntityConditional><ty-Shop:optionVar4Entity/>: <ty-Shop:optionVar4Value/><br/></ty-Shop:optionVar4EntityConditional>
<ty-Shop:optionVar5EntityConditional><ty-Shop:optionVar5Entity/>: <ty-Shop:optionVar5Value/><br/></ty-Shop:optionVar5EntityConditional>
</ty-Shop:articleOptions>
</ty:shop>
Mit <ty-Shop:optionVarXEntityConditional> wird jeweils abgefragt, ob eine Option definiert wurde und diese einen Wert zugewiesen bekommen hat. Ist dies der Fall erfolgt dann die Ausgabe über <ty-Shop:optionVarXEntity/>: <ty-Shop:optionVarXValue/>.
Einem Produkt können „andere Produkte“ zugewiesen werden, welche auf der Detailseite im Sinne von „Kunden die dieses Produkt gekauft haben interessierten sich auch für…“ mit ausgegeben werden könne. Dies geschieht beispielsweise als kurze Liste unterhalb des Produktdetails. Beispiel:
<!-- Ausgabe der Produktdetails -->
<ty:shop element="article" source="shop_art_id">
<h1><ty-Shop:articleName /><ty-Shop:articleOptions limit="1" useAnchor="no"><ty-Shop:optionTitle/></ty-Shop:articleOptions></h1>
<div><ty-Shop:articleTeaser /></div>
<div><ty-Shop:articleDescription/></div>
...
</ty:shop>
<!-- Ausgabe der dem Produkt zugewiesen anderen Produkte -->
<ty:shop element="listOfArticles" count="6" source="articleDetailList">
<!-- insgesamt 6 andere Produkte werden gelistet mit Name, Teaser und Produktbild -->
<ty-Shop:listOfArticlesArticle>
<h2><ty-Shop:articleGoToArticle><ty-Shop:articleName /></ty-Shop:articleGoToArticle></h2>
<div><ty-Shop:articleTeaser /></div>
<div><ty-Shop:articleGoToArticle><ty-Shop:articleImage width="100" height="100" popup="false"/></ty-Shop:articleGoToArticle></div>
</ty-Shop:listOfArticlesArticle>
</ty:shop>
Soll die Crosspromotion innerhalb des Artikel Details erfolgen, so muss die Ausgabe der Detailinformationen an der gewünschten Stelle unterbrochen und nach der Crosspromotion-Box wieder aufgenommen werden. Zur Verdeutlichung ein Beispiel:
<ty:shop element="article" source="shop_art_id"> ...Artikeldetails Teil 1... </ty:shop> <ty:shop element="listOfArticles" count="6" source="articleDetailList"> ...Crosspromotion... </ty:shop> <ty:shop element="article" source="shop_art_id"> ...Artikeldetails Teil 2... </ty:shop>
Ein Produkt kann außer auf der ihm zugewiesenen Standardseite auch auf weiteren Seiten („Crossselling“) ausgegeben werden. Dies eignet sich beispielsweise für die Ausgabe einer Top 10 Liste auf der Startseite oder für eine Seiten übergreifende Ausgabe unterschiedlicher Produkte auf der Startseite einer Produktrubrik. Beispiel:
<ty:shop element="listOfArticles" source="topicextended" crossselling="1" count="10">
<!-- Gibt es ein zugewiesenes Crossselling Produkt, dann wird eine Überschrift ausgegeben count="1"! -->
<ty-Shop:listOfArticlesArticle count="1">
<h1><ty:content id="crossellinghead">Unsere Top 10</ty:content></h1>
</ty-Shop:listOfArticlesArticle>
<!-- insgesamt 10 Produkte werden gelistet mit Name, Preis, Produktbild und Warenkorblink -->
<ty-Shop:listOfArticlesArticle>
<h2><ty-Shop:articleGoToArticle><ty-Shop:articleName maxlength="30" /></ty-Shop:articleGoToArticle></h2>
<div><ty-Shop:articleImage width="100" /></div>
<div>Preis: <ty-Shop:articleLowestPrice/></div>
<div><ty-Shop:articleOptions><ty-Shop:optionToBasket>in den Warenkorb</ty-Shop:optionToBasket></ty-Shop:articleOptions> <div>
</ty-Shop:listOfArticlesArticle>
<ty-Shop:listOfArticlesNoArticles>...keine Produkte vorhanden...</ty-Shop:listOfArticlesNoArticles>
</ty:shop>
Lieferstatus und voraussichtliche Lieferzeit sind Optionen einer Produktvariante und müssen daher über das Subelement articleOptions> ausgegeben werden.
<ty:shop element="article" source="shop_art_id">
<ty-Shop:articleOptions>
Anzahl Produkte am Lager: <ty-Shop:optionStockCount /><br />
Lieferzeit: <ty-Shop:optionDaysToSupply/> Tage
</ty-Shop:articleOptions>
</ty:shop>
Mit element=„listOfArticles“ kann man sich eine Artikelliste ausgeben lassen.
<ty:shop element="listOfArticles" source="id" ignoreQuantityFilter="true" showDeactivated="true" ids="<?php echo implode(",",$articleIds); ?>" count="1">
<ty-Shop:listOfArticlesArticle>
</ty-Shop:listOfArticlesArticle>
</ty:shop>
Mit diesem Tag kann man sich einen Pager für die Artikelliste ausgeben lassen. Der Tag ist in dieser Hinsicht ein Alias für ty:pager. Die Anzahl der Elemente pro Seite steuert man über das Elterntag (z.B.: <ty:shop element=„listOfArticles“ count=„5“>). Diese Funktion steht ab Version 4.0 zur Verfügung.
Hier ein Beispiel für einen einfachen Pager:
<ty:shop element="listOfArticles" count="4" source="topic">
<ty-Shop:listOfArticlesPager maxPages="3" minPages="2">
<div class="searchPager mb-15">
Elemente: <ty-pager:offset/> - <ty-pager:count/> von <ty-pager:maxcount/><br/>
<ty:content id="Archivseiten" topic="global" privs="admin" display="dynamic">Seite:</ty:content>
<ty-pager:pages>
<!-- before and after only if more pages are found than maxPages -->
<ty-pager-pages:before><a href="<ty-pager-pages:firstUrl/>" title="<ty:content id="pages_title" topic="global" privs="admin" noEdit="true">Seite</ty:content> 1">1</a>... </ty-pager-pages:before>
<ty-pager-pages:separator>|</ty-pager-pages:separator>
<ty-pager-pages:active>
<strong><ty-pager-pages:page/></strong>
</ty-pager-pages:active>
<ty-pager-pages:inactive>
<a href="<ty-pager-pages:page-url/>" title="<ty:content id="pages_title" topic="global" privs="admin" noEdit="true">Seite</ty:content> <ty-pager-pages:page/>"><ty-pager-pages:page/></a>
</ty-pager-pages:inactive>
<ty-pager-pages:after> ...<a href="<ty-pager-pages:lastUrl/>" title="<ty:content id="pages_title" topic="global" privs="admin" noEdit="true">Seite</ty:content> <ty-pager-pages:lastPage/>"><ty-pager-pages:lastPage/></a></ty-pager-pages:after>
</ty-pager:pages>
</div>
<div>
<form id="countselector">
<select name="count" onchange="document.getElementById('countselector').submit();">
<option value="4">4</option>
<option value="8">8</option>
</select>
</form>
</div>
</ty-Shop:listOfArticlesPager>
</ty:shop>
Daten eines angemeldeten Nutzers können in Verbindung mit dem myty Shop Modul genutzt werden. Es lassen sich alle Daten in ein Formular für Rechnungsadresse übernehmen. Dazu ist allerdings eine eine Rolle notwendig, in welcher die Nutzerdaten in vorgegeben Attributen hinterlegt werden, die dann über ty-Shop-Tags in Eingabefelder ausgelesen werden können. Die in in der Rolle zu nutzenden Attributnamen sind fett markiert:
Die o.g. Attribute gibt es größtenteils auch für die Lieferadresse. Dazu muss vor dem Attributnamen „delivery_“ gestellt werden. Der Tag sieht dann zum Beispiel folgendermaßen aus: <ty-shop:userDeliveryFirstname/>
Das folgende Beispiel erzeugt im Bestellvorgang ein Formular zur Eingabe der Nutzerdaten. Die ty-Shop:user… Tags erzeugen Texteingabefelder, in welche beim angemeldete Nutzer Nutzerdaten aus siteroles (wenn vorhanden) übernommen werden.
<ty:shop element="user" type="form">
<label for="tyShopFirstname">Vorname</label><br />
<ty-Shop:userFirstname id="tyShopFirstname" />
<label for="tyShopLastname">Nachname</label><br />
<ty-Shop:userLastname id="tyShopLastname" />
<label for="tyShopCompany">Firma</label><br />
<ty-Shop:userCompany id="tyShopCompany" />
<label for="tyShopAddress">Strasse</label><br />
<ty-Shop:userAddress id="tyShopAddress" />
<label for="tyShopAddressNr">Strasse</label><br />
<ty-Shop:userAddressNr id="tyShopAddressNr" />
...
<ty-Shop:userStoreUserData>Zur Auswahl der Zahlungsart</ty-Shop:userStoreUserData>
</ty:shop>
Mit diesem Tag ist es möglich unterschiedliche Ausgaben in der Vorlage, je nach Land des Bestellers. Um die verschiedenen Regionen-Bereiche auszugeben wird folgende Syntax (Beispiel) benötigt:
<ty:shop element="user"> <ty-shop:userRegionConditionalFallback> kein Land gewählt oder Land noch nicht zugewiesen </ty-shop:userRegionConditionalFallback> <ty-shop:userRegionConditional id="0"> Betreiberland </ty-shop:userRegionConditional> <ty-shop:userRegionConditional id="6"> EU-Land </ty-shop:userRegionConditional> <ty-shop:userRegionConditional id="3"> nicht-EU-Land </ty-shop:userRegionConditional> </ty:shop>
Standardmäßig funktionieren immer 2 Möglichkeiten:
Im Merkzettel kann der Kunde während seines Einkaufs Produkte sammeln. Die Produkte auf dem Merkzettel können dann durch Ihn in einem Zug in den Warenkorb gelegt werden. Vorher können einzelne Produkte vom Merkzettel gelöscht werden.
Beispiel für einen einfachen Merkzettel:
// einfache Merkliste - 1 Merzettel
<ty:shop element="listOfNotices" type="form" limit="1">
<input type="hidden" name="topic" value="<?php echo $tyState["topic"] ?>" />
<input type="hidden" name="shop_art_id" value="<?php echo $_REQUEST["shop_art_id"] ?>" />
<input type="hidden" name="manufacturer" value="<?php echo $_REQUEST["manufacturer"] ?>" />
<input type="hidden" name="minprice" value="<?php echo $_REQUEST["minprice"] ?>" />
<input type="hidden" name="maxprice" value="<?php echo $_REQUEST["maxprice"] ?>" />
<ty-Shop:listOfNoticesNotice>
<table cellpadding="5" cellspacing="0" border="0">
<tr>
<th>Produkt</th>
<th>Menge</th>
<th> </th>
</tr>
// Produkte auf der Merkliste auslesen
<ty-Shop:noticeProducts>
<tr>
<td><ty-Shop:articleGoToArticle><ty-Shop:articleName maxlength="50" /></ty-Shop:articleGoToArticle></td>
<td><ty-Shop:noticeProductQuantity type="editable"/></td>
<td><ty-Shop:noticeProductRemove>Entfernen</ty-Shop:noticeProductRemove></td>
</tr>
</ty-Shop:noticeProducts>
</table>
<div><ty-Shop:noticeMoveToBasket type="submit" class="buttons">In den Warenkorb</ty-Shop:noticeMoveToBasket></div>
<div><ty-Shop:noticeRemove type="submit" class="buttons">Entfernen</ty-Shop:noticeRemove></div>
</ty-Shop:listOfNoticesNotice>
</ty:shop>
<ty:abo mode="listabos"> <ty:abo mode="hasabo" abooption="<ty-abo:aboean/>"> Sie haben das <ty-abo:aboname/>!<br/> <ty:abo mode="quitabo" abooption="<ty-abo:aboean/>" text="Abo kündigen"/> Sie können das Abo zum <ty:abo mode="nextquitdate" abooption="<ty-abo:aboean/>"/> kündigen. <ty:abo mode="hasquit" abooption="<ty-abo:aboean/>">Sie haben das Abo gekündigt</ty:abo> </ty:abo> </ty:abo>
<ty:abo mode="productisabo" abooption="<ty-Shop:optionEAN/>">Ist ein Abo</ty:abo> <ty:abo mode="hasnoabowaiting" abooption="<ty-Shop:optionEAN/>">Schon bestellt</ty:abo>
Es ist möglich auch eine Liste von Warenkörbe auszulesen.
<table> <ty:shop element="basketlist" status="queue"> <ty-shop:basketListBasket> <tr class="basket-product-listing"> <ty-Shop:basketProducts useAnchor="no"> <td class="b-article-nr"><ty-Shop:basketProductOptionEAN/></td> <td class="b-article-name"><ty-Shop:articleName/> </td> <td class="b-tax-value"><ty-Shop:articleVat /></td> <td class="b-pieces"><ty-Shop:basketProductQuantity/></td> <td class="b-price-one"><ty-Shop:basketProductPriceSingle/></td> <td class="b-sum"><ty-Shop:basketProductPriceSum/></td> </ty-Shop:basketProducts> <td> <ty-Shop:basketMoveToBasket><img src="/templates/pics/short_basket_active.gif" width="39" height="56" alt="Warenkorb" /></ty-Shop:basketMoveToBasket> </td> </tr> </ty-shop:basketListBasket> </ty:shop> </table>
Die Realisierung eines affiliate Shops mit Bestellprozess über die Hauptdomain kann durch einen Domainübergreifenden Warenkorb erfolgen.
Der Kunde bestellt Artikel auf einer Landingpage z.B. shop1.example.com, die Bestellung (incl. Bestellprozess) soll über den Hauptshop erfolgen z.B. www.example.com. Hierzu ist es erforderlich den Warenkorb an diese Domain zu übermitteln.
Der Shop mit der Domain shop1.example.com, ruft über einen Link eine Shopseite der Hauptdomain auf (z.B. http://www.example.com/Warenkorb.html), damit der Hauptshop nun die Warenkorbdaten der Landigpage laden kann, benötigt dieser noch einen speziellen Warenkorbidentifikator der Subdomain. Dieser Identifikator kann durch den Shop Tag <ty-Shop:basketExternalBasketURLParam/> ausgelesen und an eine URL als Parameter hinzugefügt werden. Der entsprechende Link im Template wird wie folgt erzeugt: http://www.example.com/Warenkorb.html?<ty-Shop:basketExternalBasketURLParam/>
Da der Warenkorb per Standardeinstellung über die Datenbank ausgetauscht (kopiert) wird, ist es erforderlich, das beide Domains im Hintergrund mit dem selben myty und der gleichen Datenbank arbeiten.
Der Shopbetreiber hat zusätzlich die Möglichkeit im Shop Setup die Einstellung zu treffen, dass die Warenkörbe zwischen den Domains synchronisiert werden sollen. Diese Einstellung bewirkt, das der Warenkorb der Hauptdomain mit dem Warenkorb der Landingpage synchronisiert wird, d.h. die Warenkörbe sind immer auf beiden Domains identisch. Ist diese Einstellung nicht gesetzt, so wird nur eine Kopie des Warenkorbs in der Hauptdomain geladen (neue Artikel die auf der Hauptseite hinzugefügt werden, erscheinen nicht im Warenkorb der Landigpage).
Quelltextschnipsel, welche bei der Arbeite mit ty:shop helfen können, werden hier gelistet.
Mit Hilfe des „ty:if_then_else“ - Elements kann geprüft werden, ob für eine Artikeloption ein Wert existiert. Im Beispiel wird abgefragt, ob ein Wert für die unverbindliche Preisempfehlung des Herstellers existiert. Ist dies der Fall, dann wird selbiger ausgegeben. Andernfalls erscheint „k.A.“ in der Webseite
<ty-Shop:articleOptions limit="1" useAnchor="no"> ... <ty:if_then_else> <ty-if_then_else:if><ty-Shop:optionEVP/></ty-if_then_else:if> <ty-if_then_else:then>UVP: <ty-Shop:optionEVP/></ty-if_then_else:then> <ty-if_then_else:else>UVP: k.a.</ty-if_then_else:else> </ty:if_then_else></ty-Shop:articleOptions> ... </ty-Shop:articleOptions>