GoodRelations Extension for Oxid eSalesShop Software
On this page, we will provide the necessary components and instructions for adding GoodRelations support to Oxid eSales.
Currently, this page is in German and summarizes our experiences, but it will turn into a polished recipe in English shortly.
A live Web shop running on Oxid eSales with GoodRelations meta-data export is at <http://tr.im/vIhk> (Thanks to Daniel Bingel!)
Das Oxid eSales Shopsystem kann aufgrund seiner Barrierefreiheit mit wenig Aufwand um semantische Beschreibungen ergänzt werden. Auf dieser Seite wird Ihnen gezeigt, wie diese Beschreibung durch die Modifizierung eines Oxid-Templates unter Verwendung von XHTML und RDFa realisiert werden kann. Hierbei wird insbesondere berücksichtig, dass das modifizierte Template nach den Vorgaben des W3C valide ist.
Zunächst wird der Kopfbereich des Templates angepasst. Dazu öffnen Sie die jeweilige Datei, die den Kopfbereich ihres Templates festlegt (wenn Sie das basic-Template nutzen, handelt es sich hier um die Datei _header.tpl). Zu Beginn des Quelltexts sollten Sie die Dokumenttyp-Deklaration vorfinden, die im basic-Template wie folgt aussieht:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
Diese ersetzen Sie durch folgenden Quelltext:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML4+RDFa 1.0//EN" "http://www.w3.org/MarkUp/DTD/html4-rdfa-1.dtd">
Um die im Shop enthaltenen Detailseiten mit semantischen Beschreibungen zu ergänzen, erstellen Sie zunächste eine Datei offerings_rdfa.tpl innheralb des tpl-Ordners Ihres Templates. Diese öffnen Sie und fügen in ihr den folgenden Quelltext, der die semantische Beschreibung des jeweils angebotenen Produktes erstellt, ein:
<!-- semantic data START-->
<!-- Angebot -->
<div typeof="gr:Offering" about="http://www.waffen-frank-shop.de/semanticweb/offerings.rdf#Angebot_[{ $product->oxarticles__oxid->value }]"
xmlns:gr="http://purl.org/goodrelations/v1#"
xmlns:product="http://search.yahoo.com/searchmonkey/product/"
xmlns:rdfs="http://www.w3.org/2000/01/rdf-schema#"
xmlns:media="http://search.yahoo.com/searchmonkey/media/"
xmlns:xsd="http://www.w3.org/2001/XMLSchema#"
xmlns:use="http://search.yahoo.com/searchmonkey-datatype/use/"
xmlns:foaf="http://xmlns.com/foaf/0.1/">
<span rel="rdfs:seeAlso" resource=""></span>
<span rel="gr:hasBusinessFunction" resource="http://purl.org/goodrelations/v1#Sell"></span>
<span rev="gr:offers" resource="[{ $oViewConf->getBaseDir() }]semanticweb/company.rdf#BusinessEntity"></span>
<!-- Preis -->
<span rel="gr:hasPriceSpecification">
<span typeof="gr:UnitPriceSpecification" about="#Preis_[{ $product->oxarticles__oxid->value }]">
<span property="gr:valueAddedTaxIncluded" datatype="xsd:boolean" content="true"></span>
<span property="gr:hasUnitOfMeasurement" datatype="xsd:string" content="C62"></span>
<span property="gr:hasCurrencyValue" datatype="xsd:float" content="[{ $product->oxarticles__oxprice->value }]"></span>
<span property="gr:hasCurrency" datatype="xsd:string" content="EUR"></span>
</span>
</span>
<!-- Produkt -->
<span rel="gr:includesObject">
<span typeof="gr:TypeAndQuantityNode" about="#TypeAndQuantityNode_[{ $product->oxarticles__oxid->value }]">
<span property="gr:amountOfThisGood" datatype="xsd:float" content="1.0"></span>
<span property="gr:hasUnitOfMeasurement" datatype="xsd:string" content="C62"></span>
<span rel="gr:typeOfGood">
<span typeof="product:Product gr:ProductOrServicesSomeInstancesPlaceholder" about="#Produkt_[{ $product->oxarticles__oxid->value }]">
<span rel="rdfs:seeAlso" resource=""></span>
<span property="gr:hasStockKeepingUnit" datatype="xsd:string" content="[{ $product->oxarticles__oxartnum->value }]"></span>
<span property="product:identifier" datatype="use:sku" content="[{ $product->oxarticles__oxartnum->value }]"></span>
<span property="rdfs:label" content="[{$product->oxarticles__oxtitle->value}] [{$product->oxarticles__oxvarselect->value}]"></span>
<span property="rdfs:comment" content="[{assign var="semdesc" value=$product->oxarticles__oxlongdesc->value}][{$semdesc|strip_tags|replace:'"':'\''}]"></span>
<span rel="rdfs:seeAlso media:image foaf:depiction" resource="[{ $oView->getActPicture() }]"></span>
</span>
</span>
</span>
</span>
</div>
<!-- semantic data END -->
Speichern Sie die modifizierte Datei ab. Damit die semantische Beschreibung nun auf jeder Produktdetailseite erschein, muss die Datei offerings_rdfa.tpl in die Template-Datei integriert werden, die für die Ausgabe der Produktedetailseiten verwantwortlich ist. Im basic-Template ist details.tpldie besagte Datei. Öffnen Sie diese und fügen Sie am Ende des Quellcodes vor
[{include file="_footer.tpl" popup="inc/popup_zoom.tpl" }]
die folgende Zeile ein:
[{include file="offerings_rdfa.tpl" }]
Laden Sie die neu erstellte Datei sowie die modifizierten Dateien auf Ihren Webserver, um das Ergebnis zu testen. Vergessen Sie bitte nicht vor dem Upload eine Sicherheitskopie des alten Templates zu erstellen.
Nach dem Upload überprüfen Sie unter <http://validator.w3.org/> die Validität des Markups Ihres modifizierten Templates. Überprüfen Sie dabei bitte nicht nur die Startseite des OXID-Shops, sondern auch stichprobenweise einzelne Produktdetailseiten. Wenn der W3C Validator Ihr Markup ausschließlich als valide bewerten, dann können Sie den nächsten Abschnitt ignorieren und Ihr modifiziertes Template sorglos nutzen.
In fast allen Fällen sollte der W3C Validator jedoch zahlreiche Fehlermeldungen aufzeigen. Die Ursache hierfür kann zum einen im Template liegen, zum anderen aber auch in der OXID Shop Engine. Ein kleiner Bestandteil des für den Shopbesucher und Crawlern sichtbaren Quellcodes wird nämlich nicht über das Templatesystem generiert, sondern über die Shop Engine. Dieser Bestandteil ist HTML 4.01 Markup und verursacht bei die Überprüfung der Validität verschiedenen Fehlermeldungen, da das modifizierte Template auf XHTML 1.0 basiert.
Um die Fehler zu beseitigen, ist die Umsetzung der im folgenden Abschnitt beschriebenen Änderungen zur Fehlerbehebung notwendig.
In Ihrem OXID-Ordner finde Sie den Ordner core.Öffnen Sie diesen und suchen Sie die Datei oxsession.php. Erstellen Sie eine Sicherheitskopie dieser Datei und öffnen Sie die Originaldatei anschließend. Durchsuchen Sie nun den Quelltext nach "<input". Die Suche dürfte genau einen Treffer liefern und zwar in Zeile 489. Diese Zeile enthält folgenden Quellcode:
return "<input type=\"hidden\" name=\"force_sid\" value=\"". $this->getId() . "\">";
Ersetzen Sie diese Zeile durch die folgende:
return "<input type=\"hidden\" name=\"force_sid\" value=\"". $this->getId() . "\"/>";
Wenn Sie diese Änderung durchgeführt haben, laden Sie die abgeänderte Datei auf Ihren Webserver. Wenn Sie nun die Validität einer Produktdetailseite Ihres OXID-Shops überprüfen, müsste die Anzahl der Fehlermeldungen geringer sein als vor der Änderung.
Zeitaufwand
- input
- form
- col
- img
- link