Eigenen Controller im Frontend aufrufen

Moin,

ich habe einen Oxid Shop PE 6.2.3 und habe ein Modul erstellt mit der Metadata Version 2.1.

Im Modul habe ich wiefolgt einen Controller eingerichtet der mir meine Werte im Frontend ausgeben soll.

metadata.php

'controllers'  => [
    'contactpersoncontroller' => \MyComp\MyContactPerson\Controller\ContactPersonController::class,
],

ContactPersonController.php

<?php

/**
 * Copyright © OXID eSales AG. All rights reserved.
 * See LICENSE file for license details.
 */

namespace MyComp\MyContactPerson\Controller;

class ContactPersonController extends \OxidEsales\Eshop\Application\Controller\FrontendController
{
    protected $_aErrorMsg       = array();
    protected $_sThisTemplate = 'page/shop/start.tpl';
    public function init()
    {
        parent::init();
    }
    public function render()
    {
        parent::render();
        $this->_aViewData['cpdemo'] = "Hello World!";
        $oContactPerson  =$this->getData();
        if (count($oContactPerson)) {
            $this->_aViewData['oContactPerson'] = $oContactPerson;
        }
        return $this->_sThisTemplate;
    }
    public function getData()
    {
        $oData  =   oxNew(\MyComp\MyContactPerson\Application\Model\ContactPerson::class);
        $oData->selectString("SELECT * FROM idcontactperson");
        return $oData->getArray();
    }
}

Ich hätte jetzt erwartet, dass ich in der start.tpl wiefolgt ein String mit Hello World bekomme…

[{$gedemo|@var_dump}]

Es macht jedoch den anschein als ob der Controller garnicht aufgerufen würde.

Kann mir jemand sagen ob und was ich hier vergessen habe? Vielen Dank!

Einerseits heißen bei dir alle Variablen im Template und im Code jeweils unterschiedlich.
Und andererseits muss man den Controller natürlich manuell aufrufen, von selbst ruft sich der Controller nicht auf.

Auch wenn Du den anderen Thread als erledigt markiert hast, verstanden hast das System scheinbar noch nicht.

Damit in Deinem Controller gerendert wird, muss dieser aufgerufen werden und nicht Start.

Okay danke… ich habe die Variablen und die Klasse angepasst und

protected $_sThisTemplate = 'widget/contact/contactperson.tpl';

erstellt.

Jedoch ist mir unklar, wie ich den Frontendcontroller aufrufe.

/index.php?cl=contactpersoncontroller

1 Like

Okay danke!

Dann war ich wahrscheinlich auf dem flaschen Dampfer und ich brauche eher ein Widget um einfach eine Liste der Kontaktpersonen in verschiedenen Templates auszugeben.

Nicht unbedingt. Vielleicht beschreibst einmal genau, was Du wo einbinden möchtest.

Empfehlung Kostenloses Tutorial zum Thema „E-Commerce“ – OXID eShop Entwicklerschulung Basis I + II | Udemy

1 Like

Ich hoffe, dass das schon vor dem Stellen der Fragen gelesen wurde :wink:

1 Like

Ich danke euch für eure Hinweise, ich denke ich habe am Wochenende nun was zu tun ;).

Ich denke, dass das Widget die richtige Entscheidung ist, da ich einfach relativ easy einzige Bedingung ist ob der User eingeloggt ist oder nicht, eine im Backend gepflegte Liste ausspielen möchte. Diese soll aber im Kundenkonto, auf Kategorie Seiten und als VisualCMS Modul verfügbar sein. Das funktioniert aktuell super. Ich kann im Controller des Widgets einfach mitgeben welches Seitentemplate aktuell genutzt wird und eins meiner angelegten Widget Templates mit der foreach die via. Controller das Model anfragt ausspielen.

Das ist genau das was ich wollte, so ist das VisualCMS Snippet auch unglaublich basic in dem ich einfach nur das Widget einbinde.

Allgemein nochmal Vielen Dank für eure Unterstützung!

1 Like