Aktionen Modul

Hallo zusamme,

ich würde gerne via Modul die Aktionen im Shop erweitern.

Leider klappt dies bis jetzt nicht wie gewünscht.

Ich möchte bei den Auswahlen der Aktionen (Promo, Aktion, Banner) eine weitere möglichkeit hinzufügen.

Im Ordner modules befindet sich ein Ordner test, darin enthalten:

Metadata.php

<?php
$aModule = array(
    'id' => 'test',
    'title' => 'Test',
    'description' => 'test',
    'thumbnail' => '',
    'version' => '1.0',
    'author' => '',
    'email' => '',
    'extend' => array(
               'navigation' => 'test/navigation_custom',
    ),
    'templates' => array(
        'actions_main_custom.tpl' => 'test/out/admin/tpl/actions_main_custom.tpl'
    )
);




navigation_custom.php

<?php
class navigation_custom extends navigation_custom_parent
{	
public function render () {
            $ret = parent::render();
            if($ret == 'actions_main.tpl') {
                return 'actions_main_custom.tpl';
            } else {
                return $ret;
            }
            
        }
}

und ein out Ordner mit weiteren Unterordnern (admin/tpl/actions_main_custom.tpl)

Modul ist im Backend installiert und zeigt auch keine Fehler.

Nur leider übernimmt es nicht die Änderungen im actions_main_custom.tpl.

Wenn ich direkt im actions_main.tpl arbeite, werden die Änderungen angezeigt, nur leider ist dies nicht Update-kompatibel

Irgendwelche Ideen? Habe ich einen denkfehler?

Schonmal danke :rolleyes:

Niemand eine Idee?

Oder liege ich komplett falsch mit meinem Vorhaben?

Hast du denn selbst versucht den Fehler zu finden?
so vielleicht mal gucken, was im $ret steht, oder so…

[QUOTE=vanilla thunder;118526]Hast du denn selbst versucht den Fehler zu finden?
so vielleicht mal gucken, was im $ret steht, oder so…[/QUOTE]

Selbstverständlich, sonst hätte ich das Forum nicht bemüht.

Ich stehe ein bisschen auf dem Schlauch.

Danke

und was steht dann bei dir im $ret?

Sorry ich bin nicht so der Gott im programmieren :smiley:

$ret = parent::render();

oder was meinst du genau?

Sorry, bin eher der Gestalter :wink:

genau dieses $ret meine ich :slight_smile:
ich weiß zwar, dass du mein Demo Modul kopiert und teilweise angepasst hast, aber hast du versucht zu verstehen, was in diesen paar Zeilen Code passiert oder zumindest was du da verändert hast?

ja versucht, schon :rolleyes:

<?php
class navigation_custom extends navigation_custom_parent
{	
public function render () {
            $ret = parent::render();
            if($ret == 'actions_main.tpl') {
                return 'actions_main_custom.tpl';
            } else {
                return $ret;
            }
            
        }
}

meines erachtens sage ich dem $ret wenn es sich um das actions_main.tpl handelt, soll er anstelle dessen das actions_main_custom.tpl verwenden…

aber das ist es wohl nicht, da es nicht funktioniert

so an sich denkst du richtig, würde da “actions_main.tpl” kommen, würde es durch “actions_main_custom.tpl” ersetzt werden.

Hast du auch endlich mal geguckt, was im $ret denn so drin steht? Ich vermute - nein.
Da dein Template nicht ankommt, funzt da irgendwas nicht und man muss sich auf die Fehlersuche machen.
Jetzt gibts 3 Möglichkeiten:

  1. der Code ist kaputt
  2. die Funktion render() gibt irgendwas anderes zurück, als du erwartest, also nicht “actions_main.tpl”
  3. hier kommt nicht das an, was du erwartest. Also etwas anderes als “actions_main.tpl”

Nr. 1 können wir ausschließen, weil es ja an einer anderen Stelle funktioniert. Bleiben 2 und 3.

Nr. 3 hättest du prüfen können, indem du $ret ausgegeben/geprüft hättest

und für Nr. 2 müsste man in parent::render(), also die eigentliche render() der Klasse, die du überschreibst, reinschauen. Das wäre dann das Hier: http://docu.oxid-esales.com/CE/sourcecodedocumentation/4.7.3.54408/navigation_8php_source.html#l00020

Sowohl Nr 2 und Nr 3 ergeben, dass im $ret niemals “action_main.tpl” steht, somit greift der Code auch nicht.

Und jetzt der Denkfehler schonend formuliert: du hast die falsche Klasse überschrieben.

Ok, also die falsche Klasse, das habe ich mir fast gedacht :rolleyes:

ist dies dann das richige vorgehen?

            $ret = parent::render();
            if($ret == 'actshop') {
                return 'actions_main_custom.tpl';

actshop, da ich ja die aktionene bearbeiten will? Oder zieht das allgemein nen Rattenschwanz nach sich?

Vielen Dank übrigens für deine Tipps :slight_smile:

äääh keine Ahnung, wo du das her hast und wo der Zusammenhang zwischen “actshop” und Aktionen sein könnte.

Drück mal auf den Link in meinem Beitrag. Da steht am Ende der render() Funktion “return $item”, es heißt, dass das was in $item steht auch in $ret reinkommt
Und am Anfang der Funktion steht $sItem = “nav_frame.tpl”.
Im Endeffekt kommt in $ret also “nav_frame.tpl” rein und da hilft auch “actshop” nicht weiter.

Etwas weniger schonend formuliert wäre dein Denkfehler, dass du eigentlich keine Ahnung hast, was du da machst und anstatt eine Anleitung zu lesen einfach irgendwas irgendwohin kopierst.

Du willst höchstwahrscheinlich die Klasse actions_main und nicht navigation überladen, daher musst du zumindest mal die metadata.php entsprechend anpassen und die richtige Klasse eintragen. Und dann brauchst du den ganzen if-else Code nicht mehr, da reicht nur


public function render () {
   parent::render();
   return 'actions_main_custom.tpl';
}

solltest du mehr anpassen wollen verstehen, was in diesen 3-4 Zeilen Code passiert und wieso, kannst du z.B: hier anfangen
http://it-republik.de/php/artikel/Module-fuer-PHP-basierte-E-Commerce-Systeme-schreiben-4487.html (nur die verlinkte und darauffolgende Seiten)
und vielleicht ein paar Tutorials von der Doku & Tutorials Seite durchlesen

und das hier sieht ganz gut aus: https://www.webfrisch.de/eine-oxid-eshop-admin-seite-erstellen/

Hi, also nach langer Zeit mal ein Feedback.

Also von dir besagtes funktioniert jetzt soweit :wink:

zusätzlich habe ich noch das actions_list.tpl angepasst, so dass man auch bei der Aktionenübersicht sieht, dass es eine neue Aktion gibt.

Jetzt habe ich leider noch ein weiteres Problem.

Ich habe in meinem actions_main_custom.tpl einfach [{ if $edit->oxactions__oxtype->value == 3 }] dubliziert und anstelle von 3 eine 4 gesetzt und ein paar weitere Anpassungen fürs Backend vorgenommen etc.

Jetzt kann ich auch im Backend eine neue Aktion anwählen, ein Bild vom Server hinterlegen (wie beim Banner) und einen Link eintragen.

Nur wie bekomme ich jetzt die Ausgabe im Frontend zustande. Das Bild will einfach nicht ausgegeben werden. Aber in dem Banner taucht es (Gott sei dank) auch nicht auf.

Wenn ich irgendwelche Variablen wie oBanner umbennene bekomme ich im Backend nur noch das Frontend im Frame zu sehen…

Wie funktioniert das denn im allgemeinen mit Backend Eingabe + Frontend Ausgabe in Oxid.

Ein weiterer Tipp wäre echt spitze.

Ich danke dir schonmal im Vorraus :smiley: