Senden Sie Daten vom Controller an phtml

22

Ich habe diesen Controller:

...
public function insertAction() {
    $something = 'testcase';
    $this->loadLayout();
    $this->_title($this->__("the title"));
    $this->renderLayout();
}
...

Ich möchte $somethingin meinem .phtml-Dokument zugreifen. Wie mache ich das? (oder $somethinganders ausgedrückt: Wie kann ich in meiner .phtml-Datei darauf zugreifen ?)

Bob van Luijt
quelle

Antworten:

21

Hierfür gibt es verschiedene Möglichkeiten.

Direkt dem Block zuweisen:

$block->assign($var);

oder

$block->assign(array('myvar'=>'value','anothervar'=>true));

Dann können Sie wie folgt in der phtml-Datei darauf zugreifen:

$this->myvar

Benutze die Mage Registry:

Mage::register('custom_var', $var);

und benutze es dann wie folgt:

$var = Mage::registry('custom_var');
Philwinkle
quelle
2
hast du aber benutzt $block->assign($var)wie würde das in phtmldatei abgerufen werden?
Mohammad Faisal
Sie würden über $this->myvarin der Vorlagendatei
zugreifen
1
Ich glaube es ist Mage::register($key, $value, ...). Also Mage::register('custom_var', $var)?
musicliftsme
4
Es sollte sein $block->assign('myvar',$var);, oder nicht?
Freitag
@philwinkle Schreibt Mage::register('custom_var', $var); der Wert in die Sitzung und kann auch von einer anderen Vorlagendatei als der aktuellen Aktionsvorlage aus darauf zugegriffen werden ?
Schmetterling
18

Ihr HTML-Code muss von einem Block gerendert werden. Der Block muss einen Namen im Layout haben.
Sie können dies nach dem Anruf tun$this->loadLayout();

$block = Mage::app()->getLayout()->getBlock('block_name_here')
if ($block){//check if block actually exists
   $block->setSomething($something);
}

Dann kannst du den Wert in der phtmlDatei gerne abrufen

$value = $this->getSomething();
//or 
$value = $this->getData('something');
Marius
quelle
Dies funktioniert bei mir nicht :(, ich habe einen Controller, der die Produkt-ID über AJAX zurückgibt, um einen schnellen Überblick über die Produkte zu erhalten.
Shathish
@ Shathish. Dies ist ein anderes Thema. Sie können die Antwort als JSON rendern und die Werte im AJAX-Antworthandler verwenden.
Marius
Ja, ich verwende JSON, um den Inhalt des Blocks (something.phtml) zurückzugeben und das div mit diesen Details auf der Listenseite zu aktualisieren. Wie kann ich die Variable von meinem Controller an something.phtml übergeben? Tatsächlich mache ich dies derzeit mit der $ block-> assign () -Methode, was meiner Meinung nach nicht der richtige Weg ist (da es sich um eine enge Kopplung handelt - korrigieren Sie mich, wenn ich falsch liege), oder soll ich dies als Frage posten?
Shathish
@shathish vielleicht würden Sie eine andere Frage stellen und hoffen, dass sie nicht als Duplikat markiert wird.
Marius
3

Für den Fall, dass Sie vermisst werden, gibt es einen weiteren Weg, dies zu erreichen

Sitzungen verwenden

Mage::getSingleton('core/session')->setSomeSessionVar($data);// In the Controller
$data = Mage::getSingleton('core/session')->getSomeSessionVar(); // In the View;

Quelle

epynisch
quelle
Auch wenn Sie die Daten in der Sitzung haben, um sie später zu verwenden, empfehle ich, $block->setSomething()oder zu verwenden $block->assign(). Dies fühlt sich an wie "zu viel Code" und es sollte so viel PHP wie möglich vermieden werden.
Fabian Blechschmidt
-1

Wenn Sie sich in Ihrem Blockcontroller befinden.

class module_namespace_Block_example extends Mage_Core_Block_Template 
{
      protected $_var;

     public function __construct(){

         $this->_var = "something"; 


     }
}

Dann in deiner .phtml-Datei

   <?php 
        $variable = $this->_var;
        echo $variable; // prints "something"

   ?>

   <h1>You're inside your phtml file...... <?php echo $variable;  //prints "something" ?></h1>
Wolfgang
quelle
Was Sie "Blockcontroller" nennen, wird in Magento nur "Block" genannt. Die Frage betraf Controller-Aktionen, die im controllersVerzeichnis eines Moduls gefunden wurden.
Fabian Schmengler
-4

Dies ist sehr einfach, um Daten vom Controller in die HTML-Datei zu senden.

Schritt 1: - Zuerst die Model-Klasse erstellen und von Varien_Object aus erweitern

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

Schritt 2: - Öffnen Sie nun die Kontrolldatei und geben Sie den Code in die Funktion ein.

$name='gaurav';
$this->loadLayout();
Mage::getSingleton('Modulename/Modelfilename')->setData('name',$name);
$this->renderLayout();

Schritt 3: - Öffnen Sie die HTML-Datei und geben Sie den Code ein.

echo $name=Mage::getSingleton('Modulename/Modelfilename')->getData('name');

Ausgabe: - 'gaurav';

Gaurav Tyagi
quelle