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.