Datenaustausch zwischen Controller und .tpl

Hallo liebe Shopware Community,

ich benötige Eure Hilfe.

Mit Erfolg habe ich nach Anweisung von:

einen eigenen Frontend Controller erstellt was auch super funktioniert hat - vielen Dank Thumb-Up

Allerdings bin ich jetzt am Ende meines Latein.

Ich habe auf Meiner Controller Seite ein Eingabefeld erstellt und einen Button.

 

Bitte geben Sie eine Zahl ein

 

So weit so gut. Natürlich werden die Elemente auch gestyled. Smile

Jetzt aber meine Frage:

Wie kann ich die Eingabe an Meinen Controller leiten, dort in einer Action oder Funktion, zu dem eingegebenen Wert die Zahl 10 addieren

und unter dem Eingabefeld das Ergebnis ausgeben.

Kann mir da BITTE jemand helfen?

 

Vielen Dank im vorraus.

HTML Code wird leider nicht in der Frage angezeigt - ist aber, denke ich, nicht relevant.

Trotzdem unten ein zweiter Versuch:

""Bitte geben Sie eine Zahl ein

“”

Hallllllllllooooooooooo,

bin dann doch überrascht dass NIEMAND in der Lage ist so eine Frage zu beantworten!

Wo sind denn die ganzen Entwickler und Programmierer???

Selbst im Buch von Daniel Nörgel „Shopware für Entwickler“ steht das nicht drin!

Echt schade, dass die Hilfsbereitschaft so gering ist.

 

 

public function addAction(Enlight_Controller_ActionEventArgs $args)
{
    $request = $this->Request();
    $view = $this->View();
    $myNumber = (int)$request->getParam('myNumber', 0);
    $result = $myNumber + 10;
    $view->assign('result', $result);
}

Im Template dann unter dem Eingabefeld die Variable {$result} ausgeben

Hallo Waldicom,

 

erst einmal vielen lieben Dank für Deine Antwort, über die ich mich SEHR gefreut habe.

 

Ich habe Deinen Codeschnipsel in den Controller eingefügt, aber leider funktioniert es nicht.

Hier mein gesamter Code:

 

Bootstrap.php

<?php
class Shopware\_Plugins\_Frontend\_swagMeincontroller\_Bootstrap extends Shopware\_Components\_Plugin\_Bootstrap {     public function getVersion()     {         return '1.0.0';     }       public function getLabel()     {         return 'Meincontroller';     }          public function getDescription()     {         return 'Meincontroller';     }       public function getInfo()     {         return array(             'version' =\> $this-\>getVersion(),             'label' =\> $this-\>getLabel(),             'description' =\> $this-\>getDescription());     }       public function getCapabilities()     {        return array(              'install' =\> true,              'enable' =\> true,              'update' =\> false        );     }           public function install()     {        $metaDataCache = Shopware()-\>Models()-\>getConfiguration()-\>getMetadataCacheImpl();        $metaDataCache-\>deleteAll();                  $this-\>subscribeEvent('Enlight\_Controller\_Dispatcher\_ControllerPath\_Frontend\_Meincontroller', 'onGetControllerPathFrontend');         return array('success' =\> true, 'invalidateCache' =\> array('backend', 'proxy'));               }            public function enable()     {         return true;     }       public function uninstall()     {        return true;     }      public function disable()     {         return true;     }          public function onGetControllerPathFrontend(Enlight\_Event\_EventArgs $args)    {         return $this-\>Path() . 'Controllers/Frontend/Meincontroller.php';    }       } Controllers/Frontend/Meincontroller.php <?php
class Shopware\_Controllers\_Frontend\_Meincontroller extends Enlight\_Controller\_Action {                      public function init()         {            $this-\>View()-\>addTemplateDir(dirname(\_\_FILE\_\_) . "/../../Views/");         }         public function indexAction()         {              $this-\>View()-\>loadTemplate("frontend/index.tpl");         }          } Views/frontend/index.tpl {extends file='frontend/index/index.tpl'} {block name='frontend\_index\_content'}     ## Rechenbeispiel   Bitte geben Sie eine Zahl ein     
Ergebnis abrufen

         Ergebnis + 10: {$result} {/block}   Leider lädt die Seite nun neu und in der Adressleiste steht '/Meincontroller/addAction' - und es wird mir die Startseite angezeigt. Was mache ich falsch? Bin etwas am verzweifeln. Könntest Du bitte noch einmal helfen.  

Die URL muss nur /add sein (ohne action). Damit sprichst du die addAction an.

viele Grüße 

Der Aufruf muss so aussehen: /Meincontroller/add
Ich sehe aber keine addAction im Controller. Du kannst natürlich die Berechnungen auch in der indexAction() machen. Wenn Du das in der addAction machst, muss Du auch ein passendes Template erstellen. Für die indexAction hast du schon ein Template

 

edit: ups, war zu langsam mit der Antwort :slight_smile:

Habe die URL ausgetauscht, doch wenn ich auf den Button klicke, dann steht in der Adressleiste:

%2FMeincontroller%2Fadd

Leider kann ich keinen HTML Code hier zeigen, da er nach dem auffrischen der Seite verschwindet!!! Foot-in-Mouth

Die addAction habe ich in den Controller gepackt:

 public function init()
        {
            $this->View()->addTemplateDir(dirname(__FILE__) . „/…/…/Views/“);
        }

        public function indexAction()
        {
         $this->View()->loadTemplate(„frontend/index.tpl“);    
        
        }
        
        public function addAction(Enlight_Controller_ActionEventArgs $args)
        {
            $request = $this->Request();
            $view = $this->View();
            $myNumber = (int)$request->getParam(‚myNumber‘, 0);
            $result = $myNumber + 10;
            $view->assign(‚result‘, $result);
        }

{url controller=/Meincontroller/add} muss so sein: {url controller=Meincontroller action=add}

Und ansonsten kannst Du html Code hier einfügen, wenn du auf diesen Button klickst: 

Erst einmal vielen lieben Dank, Waldicom, für Deine Geduld.

O.K, aber so sieht es jetzt aus:

der Controller:

View()->addTemplateDir(dirname( __FILE__ ) . "/../../Views/");
        }

        public function indexAction()
        {
		 $this->View()->loadTemplate("frontend/index.tpl");	
		 
		}
		
		public function addAction(Enlight_Controller_ActionEventArgs $args)
		{
			$request = $this->Request();
			$view = $this->View();
			$myNumber = (int)$request->getParam('myNumber', 0);
			$result = $myNumber + 10;
			$view->assign('result', $result);
		}
}

in der .tpl:

 {extends file="frontend/index/index.tpl"}
{block name="frontend_index_content"}


    {s name='SitemapHeader'} Rechenbeispiel{/s}


Bitte geben Sie eine Zahl ein





	
        Ergebnis abrufen
        
    

Ergebnis: {$result} 
{/block}

 

komme nun nach dem Buton klicken auf die URL /Meincontroller/add - weiße Seite.

Habe auch versucht das template in der addAction zu laden:

$this->View()->loadTemplate("frontend/index.tpl");	

kommt leider auch nur eine weiße Seite.