FrontentController klasse erweitern

Hallo,

ich stehe gerade total auf’m schlauch und komme nicht wirklich weiter. Ich habe schon einige kleine “module” geschrieben die am ende einen wert an das template zurück geben oder etwas in die DB geschrieben wird.

Nun möchte ich gerne die FrontendController klasse erweitern und mit einer ganz simplen funktion versehen. Allerdings wird diese funktion unter keiner umständen ausgeführt.

Hier der Code:

class FrontendController extends FrontendController_parent
{
  public function oct()
  {
    $oct = $_GET['oct'];
    setcookie("oct", $oct, 0, "/");
    //return true;
  }
}

Mir ist bewusst das ich hier vermutlich was ganz simples übersehe bzw. zu **** bin :confused:

FrontendController habe ich ausgewählt weil die die funktion auf mehreren unterschiedlichen seiten brauche.

Ich überlege auch gerade ob es nicht mehr sinn machen wie die oxsession.php zu überschreiben und dann die session funktion von oxid zu nutzen. Aber da hätte ich vermutlich das gleiche problem wie aktuell.

Würde mich über hilfe freuen.

Beste Grüße

Zumindest vor v6 konnte man nur die einzelnen Controller (content, start, alist etc) erweitern und nicht die Klasse, von der sie erben. Ich vermute stark, dass es immer noch so ist.
Du könntest ViewConfig oder oxcmp_user erweitern.

Vielen Dank für den hinweis @vanilla_thunder. Ich habe mal eben zum test fix die Article klasse erweitert und es funktioniert aber ich muss im entsprechenden template die funktion aufrufen.

[{$oDetailsProduct->getOct()}]

Gibt es da auch eine andere möglichkeit, so dass die funktion grundsätzlich (immer von alleine) ausgeführt wird, ohne das ich diese nun in jedes nötige template lade?

Bzw. von welchen dateien/klassen redest du genau, denn die oxcmp_user exisitert so nicht mehr …

Beste Grüße

Hab das jetzt wie folgt gelöst:

ViewConfig erweitert:

class ViewConfig extends ViewConfig_parent
{
    public function oct()
    {
      $oct = $_GET['oct'];
      setcookie("oct_g", $oct, 0, "/");
    }
}

tpl Block erstellt:

[{$smarty.block.parent}]
[{$oViewConf->oct()}]

Und den Block in die footer.tpl eingebunden:

[{block name="set_gclid_into_cookie"}]
[{/block}]

Somit habe ich die function praktisch überall verfügbar. Allerdings wirkt das mit dem tpl Block wie ein overkill für mich. Gibt es da keine andere Möglichkeit die function “überall” verfügbar zu machen?

Grüße

du könntest ein anderes, bereits vorhandenes Block nutzen (wenn es darum ging, kein extra Block einfügen zu müssen). oder eine CMS Seite die überall eingebunden wird. Ggf irgendwas im footer oder im header (cookie note?)

Ja simmt schon, da gibt da ein paar blocks wie z.B. [{block name="footer_social"}][{/block}] oder eben den cookie note block.

Ich denke darauf wird es hinlaufen außer es gibt eine Möglichkeit bestimmte php function(en) ohne tpl “gefummel” auszulösen.

Du könntest Deine Methode in __construct() einfügen.

Nachtrag: Also oben in Deiner Erweiterung einfach

public function __construct()
    {
        parent::__construct();
        $this->oct();
    }

einfügen. Geht auch in einer Komponente.
Du kannst auch ne eigene Klasse und Methode mit __call() {…} aufrufen.

es gibt ein paar component Klassen (oxcmp_xxx), die an vielen verschiedenen Stellen geladen werden, man müsste aber gucken, ob eine davon wirklich überall geladen wird. Ich würde mir oxcmp_user zuerst angucken.
Alternativ session erweitern + blForceSessionStart in der config.inc.php aktivieren