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)

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');

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');

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


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>

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»;

En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.