Envoyer des données du contrôleur vers phtml

22

J'ai ce contrôleur:

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

Je souhaite accéder $somethingà mon document .phtml, comment faire? (ou pour le dire autrement: comment puis-je accéder $somethingà mon fichier .phtml)

Bob van Luijt
la source

Réponses:

21

Il y a plusieurs façons de faire ça.

Attribuez directement au bloc:

$block->assign($var);

ou

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

Ensuite, vous pouvez y accéder dans le fichier phtml comme ceci:

$this->myvar

Utilisez le registre Mage:

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

puis l'utiliser comme:

$var = Mage::registry('custom_var');
philwinkle
la source
2
vous avez utilisé $block->assign($var)mais comment serait récupéré dans le phtmlfichier?
Mohammad Faisal
Vous accéderez via à $this->myvarpartir du fichier de modèle
philwinkle
1
Je le crois Mage::register($key, $value, ...). Alors Mage::register('custom_var', $var)?
musicliftsme
4
Ça devrait l'être $block->assign('myvar',$var);, non?
fritzmg
@philwinkle Est-ce que Mage::register('custom_var', $var); la valeur est écrite dans la session et cela peut être accessible à partir d'un autre fichier de modèle, à l'exception du modèle d'action actuel?
Butterfly
18

Votre phtml doit être rendu par un bloc. Le bloc doit avoir un nom dans la mise en page.
Vous pouvez le faire après avoir appelé$this->loadLayout();

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

Ensuite, vous pouvez obtenir la valeur dans le phtmlfichier comme

$value = $this->getSomething();
//or 
$value = $this->getData('something');
Marius
la source
cela ne fonctionne pas pour moi :(, j'ai un contrôleur qui renvoie l'identifiant du produit via AJAX, pour une vue rapide des produits.
Shathish
@Shathish. C'est un problème différent. Vous pouvez rendre la réponse au format JSON et utiliser les valeurs dans le gestionnaire de réponses AJAX.
Marius
Oui, j'utilise JSON pour renvoyer le contenu du bloc (quelque chose.phtml) et mettre à jour le div avec ces détails dans la page de liste, comment puis-je passer la variable de mon contrôleur à quelque chose.phtml? en fait, je le fais actuellement en utilisant la méthode $ block-> assign (), ce qui, à mon avis, n'est pas la bonne façon (car c'est un couplage serré - corrigez-moi si je me trompe) ou dois-je poster cela comme une question?
Shathish
@shathish vous poserez peut-être une autre question et vous espérez qu'elle ne sera pas marquée comme doublon.
Marius
3

Au cas où vous auriez manqué, il existe un autre moyen de le faire

utiliser des sessions

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

la source

épynique
la source
Même si vous avez les données dans la session pour les utiliser plus tard, je recommande d'utiliser $block->setSomething()ou $block->assign(). Cela ressemble à "trop ​​de code" et il devrait être évité autant de php que possible.
Fabian Blechschmidt
-1

Si vous êtes dans votre contrôleur de bloc.

class module_namespace_Block_example extends Mage_Core_Block_Template 
{
      protected $_var;

     public function __construct(){

         $this->_var = "something"; 


     }
}

Puis dans votre fichier .phtml

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

   ?>

   <h1>You're inside your phtml file...... <?php echo $variable;  //prints "something" ?></h1>
Wolfgang
la source
Ce que vous appelez "contrôleur de bloc" est simplement appelé "bloc" dans Magento. La question concernait les actions du contrôleur trouvées dans le controllersrépertoire d'un module.
Fabian Schmengler
-4

il est très facile d'envoyer des données du contrôleur vers un fichier phtml.

Étape 1: - Créez d'abord la classe Model et s'étend de Varien_Object

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

step2: - Maintenant, ouvrez le fichier de contrôle et mettez le code dans la fonction.

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

Étape3: - Ouvrez le fichier phtml et mettez le code.

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

Sortie: - «gaurav»;

gaurav tyagi
la source