Aheu,
so langsam steige ich bei Oxid durch und habe auch schon die ersten Erfolge, auch wenn ich immernoch ziemlich erschlagen bin.
Derzeit versuche ich einen weiteren Tab zu erstellen (hat schonmal geklappt) und diesen mit speziellen Attributen (Nährwerte von Lebensmitteln) zu befüllen. Die Attribute haben alle ein bestimmtes Präfix. Die Details-Klasse habe ich per Modul erweitern können und die getAttributes Funktion wurde um einen Filter erweitert, der die Attribute mit dem Präfix “’#NW_” nicht lädt. Das klappt soweit ganz gut. Nun nutzt tabs.tpl das Template attributes.tpl.
Dieses soll so bleiben wie es ist, also habe ich es in meinen Modul-Ordner kopiert und die Ordnerstruktur aus dem Azure Template nachgebaut (ist das überhaupt sinnvoll).
Der zusätzliche Tab soll dieses Template dann nutzen, welches eine Funktion aufruft, welche die Attribute mit dem Präfix ausgibt.
In der tabs.tpl sieht die Einbindung so aus:
[{block name="details_tabs_attributes"}]
[{if $oView->getAttributes()}]
[{capture append="tabs"}]<a href="#attributes">[{oxmultilang ident="DETAILS_SPECIFICATION"}]</a>[{/capture}]
[{capture append="tabsContent"}]<div id="attributes">[{include file="page/details/inc/attributes.tpl"}]</div>[{/capture}]
[{/if}]
[{/block}]
[{block name="details_tabs_nutrition"}]
[{if $oView->getNutrition()}]
[{capture append="tabs"}]<a href="#nutrition">[{oxmultilang ident="DETAILS_NUTRITION"}]</a>[{/capture}]
[{capture append="tabsContent"}]<div id="nutrition">[{include file="nutrition.tpl"}]</div>[{/capture}]
[{/if}]
[{/block}]
in der metadata.php ist die tpl so drin:
$aModule = array(
'id' => 'naehrwerte',
'title' => 'Nährwerte in Produktansicht',
'description' => array(
'de' => 'Nährwerte in Produktansicht',
'en' => 'Nutrition Values in article details.'
),
'thumbnail' => '',
'version' => '1.0.0',
'author' => 'Kalle K.',
'email' => '[email protected]',
'extend' => array('Details' => 'naehrwerte/details_ext'),
'templates' => array( 'nutrition.tpl' => 'naehrwerte/application/views/azure/tpl/page/details/inc/nutrition.tpl')
);
Kopiere ich meine nurtition.tpl in den originalen Template-Ordner und gebe den Pfad richtig an, dann klappt es. Ich möchte aber nicht im ursprünglichen Template rumpfuschen…
Wobei ich das derzeit auch nicht so richtig durchziehen kann, da ich die originale tabs.tpl editieren musste um die Anzeige des zusätzlichen Tabs zu realisieren. Um wirklich sauber zu arbeiten müsste ich diese also auch noch irgendwie overriden.
Wie mache ich das? Ich bekomme bisher ja nichtmal neue tpls zum laufen.
Kann mir da jemand weiterhelfen?
Vielen Dank.
Kalle
Aheu,
ich habe zwar immernoch keine Lösung gefunden wie ich das komplett in einem Modul machen kann, aber mit einem ChildTheme komme ich erstmal weiter ohne das originale Azure Theme zu verändern.
Wenn das Ganze aber vielleicht mal dahin wachsen soll, dass es eine Erweiterung werden soll, die auch mit anderen Themes funktioniert, dann ist das doch trotzdem nicht die passende Lösung, oder?
Kalle
Du könntest auf Blocks zugreifen und deinen Tab so irgendwo zwischen anderen 2 einfügen
Aheu,
wie die Blocks arbeiten habe ich noch nicht so ganz durchschaut, aber um den aufzurufen müsste ich doch trotzdem die tabs.tpl anfassen, oder entgeht mir da irgendwas?
Kalle
in der tabs.tpl gibts “vom Hause aus” folgende (relevante) Blocks: details_tabs_longdescription, details_tabs_attributes, details_tabs_pricealarm, details_tabs_tags, details_tabs_media, details_tabs_fbcomments, details_tabs_fbinvite
in deinem Modul kannst du deine gewollten Anpassungen bzw gewünschten Code vor oder nach einem beliebigen Block reintun. Oder auch den ganzen Block ersetzen.
Hier ist ein Tutorial:
Aheu,
vielen Dank. Verstanden habe ich die Funktionsweise der Blöcke - glaub ich.
Aber selbst der simple Versuch einen Block mit einem leeren Block zu überschreiben klappt nicht. Oxid scheint den ursprünglichen Block zu nutzen. Und auch
[{$smarty.block.parent}]
abc
in der neuen tpl Datei, die genutzt werden soll, bringt nirgends auf der Seite ein “abc”.
So wie ich das verstanden habe muss der Pfad zum Block seit 4.7. vom Modules-Root ausgehen. Das ist der Fall.
'blocks' => array( array('template' => 'page/details/inc/tabs.tpl', 'block' => 'details_tabs_attributes', 'file' => 'naehrwerte/out/blocks/nutritiontab.tpl'))
So schön das Prinzip doch ist, so schwer scheint es sich da reinzufinden, vor allem wenn bei jeder Version scheinbar benötigte Pfadangaben geändert werden und Tutorials auf alten Versionen basieren 
Dass das Modul läuft und berücksichtigt wird, erkenne ich an der Verwendung der geänderten Funktion für die Attribute. Wo liegt also der Fehler beim Block?
EDIT: Ich geh echt kaputt. Nehme ich die Pfadangabe raus und gebe nur die Datei an, dann klappt es.
Kalle
du brauchst nicht kaputt zu gehen, nur aufmerksam zu lesen 
auf der Seite, deren link ich oben gepostet habe, im Beispiel für die Syntax steht:
block file basename
und im Beispiel ganz unten auf der Seite sieht man es nochmal, dass dort keine Pfadangaben verwendet werden. Und auch nicht mal die Dateierweiterung".tpl".
was “basename” bedeutet, findet man ganz schnell mit Hilfe von google raus.
außerdem kann ein kurzer blick in den Webserver Error Log oft einen entsprechenden Hinweis zur Lösung liefern.
Hier würde der Log dir sagen, dass die Datei …/modules/naehrwerte/out/blocks/naehrwerte/out/blocks/nutritiontab.tpl nicht gefunden wurde,
was auch nochmal darauf hindeutet, dass die Pfadangabe überflüssig sei.
Aheu,
in der Beschreibung zur metadata.php unter
http://wiki.oxidforge.org/Features/Extension_metadata_file#blocks
steht
In OXID eShop 4.7 / 5.0 with metadata version 1.1 template block “file” value has to be specified directly from module root.
Daher bin ich von einer kompletten Pfadangabe ausgegangen. Da die Modulaktivierung den Datenbankeintrag ja selbständig vornimmt, habe ich mir die Syntax nicht näher angeschaut.
Ans Error-Log komme ich derzeit leider nicht ran 
Es geht voran bei mir. Mal sehen ob das Modul “Marktreife” erlangt. Für meine Bedürfnisse reicht es erstmal.
Kalle
P.S:Beim durchsuchen des Forums findet man ständig extrem hilfreiche Beiträge von Dir. Vielen Dank dafür. Du bringst Neulinge bei OXID echt voran.
danke,
aber hast du auch metadata Version 1.1?
in dem Code oben steht noch 1.0.0
Aheu,
ich hatte die Versionsnummer mittlerweile angepasst.
Taucht sie sonst noch irgendwo auf? Deine Formulierung deutet das irgendwie an. Ich persönlich vermute einfach, dass die Verarbeitung der metadata.php in 4.7.2 sozusagen Version 1.1. ist, sie aber für Aufwärtskompatibilität auch mit 1.0.0 klar kommt, wenn das in der metadata.php so angegeben ist. Erwarte ich hier zuviel von Oxid, oder habe ich die Funktionsweise bzw. Verarbeitung der metadata.php noch nicht kapiert?
Kalle
wenn du hinterher auf 1.1 umgestellt hast, hat OXID das wahrscheinlich nicht mitbekommen, weil die Einstellungen beim ersten Aktivieren des Moduls gecached werden.
Version ist vom Modul nicht von der metatdata.php. Im Pfad ‘naehrwerte/out/blocks/nutritiontab.tpl’ ist ‘naehrwerte/’ zuviel weil der Pfad ausgehend vom Ordner des Moduls und nicht vom “modules”-Ordner aus gerechnet wird.