Formulardaten an Funktion schicken

Hi,

ich habe das template sidebar.tpl erweitert und eine eigene tpl “searchinterface.tpl” included, welche mein formular enthält.

Hier der Code für das Formular aus der searchinterface.tpl:



        <form name="vsearch" action="[{ $oViewConf->getSelfActionLink() }]" method="post">
            [{ $oViewConf->getHiddenSid() }]
	    <input type="hidden" name="cl" value="searchinterface">
	    <input type="hidden" name="fnc" value="getInfo">
            <table>
                <tr>
                    <td>
                    	HSN: <input type="text" maxlength="4" id="hsn" size="4" name="hsn">
                    <td>
                </tr>
                <tr>
                    <td>
                        TSN: <input type="text" maxlength="3" id="tsn" size="3" name="tsn">
                    <td>
                </tr>
                <tr>
                     <td>
			 <button class="submitButton largeButton" type="submit">OK</button>
                    </td>
                </tr>
            </table>
        </form>

Dazu habe ich ich mir eine searchinterface_oxviewconfig.php geschrieben mit der entsprechenden Funktion:


<?php

class searchinterface_oxviewconfig extends searchinterface_oxviewconfig_parent
{

    protected $_sThisTemplate = 'widget/car_search/searchinterface.tpl';
    public function render()
    {
        parent::render();
        return $this->_sThisTemplate;

    }
    
    public function getInfo()
    {
        echo oxConfig::getParameter( 'hsn' );
        echo oxConfig::getParameter( 'tsn' );
    }
}
?>

Die entsprechende metadata.php sieht so aus:


<?php

$sMetadataVersion = '1.1';

$aModule = array(
    'id'           => 'meinmodul',
    'title'        => 'meinmodul',
    'description'  => array(
        'de' => 'Mein Modul',
        'en' => 'My Module'
    ),
    'thumbnail'    => 'thumb.png',
    'version'      => '1.0',
    'author'       => 'rn',
    'extend'      => array(
        'oxviewconfig' => 'meinmodul/application/controllers/searchinterface_oxviewconfig'
    )
);
?>

Ich habe oxviewconfig zum Overriden genommen damit meine Funktion von überall aus dem Shop aufrufbar ist.

Meine Ordner Strucktur sieht folgender maßen aus:

meinmodul/metadata.php
meinmodul/thumb.png
meinmodul/application/controllers/searchinterface_oxviewconfig.php.

[B]Mein Problem ist nun wenn ich mein Formular (in der Sidebar) ausfülle und den OK Button betätige lande ich auf index.php?cl=start&redirected=1 meine Werte aus den beiden Textboxen verschwinden im Nirvana und kommen nicht in meiner Funktion an.[/B]

Ich habe schon das ganze Forum durchsucht und komme trotzdem nicht weiter.
Mir einzelne Sachen aus dem Shop anzuschauen (z.B. das Login Formular) hat mich leider auch nicht weitergebracht. Ich will eigentlich nur die Funktion aus meiner Form heraus aufrufen und die Werte übergeben. Hat hier jemand eine Idee was ich falsch gemacht habe?

redirected=1 heißt das was im Exceptionlog steht.

Ok das steht im exception log:


oxSystemComponentException-oxException (time: 2013-08-05 16:33:43): [0]: Function 'setClassName' does not exist or is not accessible! (searchinterface_oxviewconfig)
 
 Stack Trace: #0 D:\Program Files (x86)\Zend\Apache2\htdocs\OXID\core\oxshopcontrol.php(441): oxSuperCfg->__call('setClassName', Array)
#1 D:\Program Files (x86)\Zend\Apache2\htdocs\OXID\core\oxshopcontrol.php(441): searchinterface_oxviewconfig->setClassName('searchinterface...')
#2 D:\Program Files (x86)\Zend\Apache2\htdocs\OXID\core\oxshopcontrol.php(386): oxShopControl->_initializeViewObject('searchinterface...', 'getVehicleInfo', NULL, NULL)
#3 D:\Program Files (x86)\Zend\Apache2\htdocs\OXID\core\oxshopcontrol.php(155): oxShopControl->_process('searchinterface...', 'getVehicleInfo', NULL, NULL)
#4 D:\Program Files (x86)\Zend\Apache2\htdocs\OXID\modules\d3\d3clrtmp\modules\controllers\d3_oxshopcontrol_clrtmp.php(0): oxShopControl->start(NULL, NULL, NULL, NULL)
#5 D:\Program Files (x86)\Zend\Apache2\htdocs\OXID\modules\d3\d3log\modules\controllers\d3_oxshopcontrol_errorhandler.php(0): d3_oxshopcontrol_clrtmp->start(NULL, NULL, NULL, NULL)
#6 D:\Program Files (x86)\Zend\Apache2\htdocs\OXID\modules\_d3modcfg\modules\controllers\d3_oxshopcontrol_modcfg_extension.php(0): d3_oxshopcontrol_errorhandler->start(NULL, NULL, NULL, NULL)
#7 D:\Program Files (x86)\Zend\Apache2\htdocs\OXID\core\oxid.php(40): d3_oxshopcontrol_modcfg_extension->start()
#8 D:\Program Files (x86)\Zend\Apache2\htdocs\OXID\index.php(27): Oxid::run()
#9 {main}

 Faulty component --> 

‘setClassName’ ist eine Funktionen der oxview.php. (Wenn ich diese spaßeshalber in meine php koopiere verlangt er noch die anderen Funktionen der oxview)

P.S. was ich vergessen hatte zu sagen benutze die Version Community Edition 4.7.6

name=“cl” value="searchinterface"
Damit rufst du einen controller namens “searchinterface” auf, also dein controller, der muss dann nicht von oxviewconfig abgeleitet werden sondern ist eine eigenständige Klasse:

<?php 

class searchinterface extends oxubase

Eigenständige Klassen stehen nicht im “extends” array, sondern werden im “files” array dem autoloader mitgeteilt.

Hey du bist mein Held es Funktioniert!!! Eine Frage noch, wie kann ich jetzt andere Funktionen aus meiner Controller Klasse aufrufen, also direkt aus dem Template heraus ohne Form? Vorher ging das ja mit $oViewConf->meineFunktion() Muss ich diese in eine andere Klasse packen, die von oxviewconfig extended?

Einfach mit $oView->deineFunktion(). oxviewconfig muss man erweitern wenn eine Funktion nicht nur in einer Controllerklasse sondern in allen verfügbar sein soll.

Mit $oView funktioniert es leider nicht. Er sagt mir im log das er die Funktion nicht finden kann:

oxSystemComponentException-oxException (time: 2013-08-06 10:54:52): [0]: Function ‘getDate’ does not exist or is not accessible! (Start)

Die Funktion befindet sich in der Controller Klasse searchinterface (dort wo auch die andere Funktion liegt dich ich per Form aufgerufen habe)

P.S. Wie kann ich eigentlich verhindern das er nach dem Form aufruf auf eine weiße Seite weiterleitet? Muss ich in meiner Controller Klasse eine Weiterleitung einbauen auf die startseite?

Edit: Ok das hab ich nun selber so halb gelöst allerdings stellt er mir dann die Sprache um von Deutsch auf English


    protected $_sThisTemplate = 'page/shop/start.tpl';
    public function render()
    {
        parent::render();
        return $this->_sThisTemplate;

    }