ส่งข้อมูลจากคอนโทรลเลอร์ไปยัง phtml


22

ฉันมีตัวควบคุมนี้:

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

ฉันต้องการเข้าถึง$somethingเอกสาร. phtml ของฉันฉันจะทำอย่างไร (หรือใช้วิธีอื่น: ฉันจะเข้าถึง$somethingไฟล์. phtml ของฉันได้อย่างไร)

คำตอบ:


21

มีสองวิธีในการทำเช่นนี้

กำหนดโดยตรงกับบล็อก:

$block->assign($var);

หรือ

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

จากนั้นคุณสามารถเข้าถึงได้ในไฟล์ phtml ดังนี้:

$this->myvar

ใช้รีจิสทรี Mage:

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

แล้วใช้มันเช่น:

$var = Mage::registry('custom_var');

2
คุณเคยใช้$block->assign($var)แต่จะดึงข้อมูลในphtmlไฟล์ได้อย่างไร?
Mohammad Faisal

คุณจะเข้าถึงได้$this->myvarจากภายในไฟล์เทมเพลต
philwinkle

1
Mage::register($key, $value, ...)ผมเชื่อว่ามัน ดังนั้นMage::register('custom_var', $var)?
musicliftsme

4
มันควรจะเป็น$block->assign('myvar',$var);ไม่ควรหรือไม่
fritzmg

@philwinkle Mage::register('custom_var', $var); เขียนค่าในเซสชันและสิ่งนี้สามารถเข้าถึงได้จากไฟล์เทมเพลตอื่น ๆ ยกเว้นเทมเพลตการกระทำปัจจุบันหรือไม่?
ผีเสื้อ

18

บล็อกของคุณจะต้องแสดงผลโดยบล็อก บล็อกต้องมีชื่อในโครงร่าง
คุณสามารถทำได้หลังจากโทร$this->loadLayout();

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

จากนั้นคุณสามารถรับค่าในphtmlไฟล์เช่น

$value = $this->getSomething();
//or 
$value = $this->getData('something');

นี้ไม่ได้ทำงานสำหรับฉัน :( ผมมีตัวควบคุมซึ่งจะส่งกลับรหัสสินค้าผ่าน AJAX สำหรับ QuickView ของผลิตภัณฑ์.
Shathish

@Shathish นี่เป็นปัญหาที่แตกต่าง คุณสามารถสร้างการตอบกลับเป็น JSON และใช้ค่าในตัวจัดการการตอบกลับ AJAX
Marius

ใช่ฉันใช้ JSON เพื่อส่งคืนเนื้อหาบล็อก (something.phtml) และอัปเดต div ด้วยรายละเอียดเหล่านี้ในหน้ารายการฉันจะส่งตัวแปรจากคอนโทรลเลอร์ของฉันไปยัง something.phtml ได้อย่างไร จริง ๆ แล้วฉันใช้วิธี $ block-> assign () ซึ่งฉันรู้สึกว่าไม่ใช่วิธีที่ถูกต้อง (เนื่องจากเป็นข้อต่อที่แน่น - แก้ไขให้ถูกต้องถ้าฉันผิด) หรือฉันจะโพสต์คำถามนี้เป็นคำถามหรือไม่
Shathish

@shathish บางทีคุณอาจจะถามคำถามอื่นและหวังว่ามันจะไม่ถูกทำเครื่องหมายว่าซ้ำกัน
Marius

3

ในกรณีที่คนที่คุณพลาดมีวิธีหนึ่งที่จะทำสิ่งนี้ให้สำเร็จ

ใช้งาน

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

แหล่ง


แม้ว่าคุณจะมีข้อมูลในเซสชั่นที่จะใช้มันต่อมาผมแนะนำให้ใช้หรือ$block->setSomething() $block->assign()นี่รู้สึกเหมือน "รหัสมากเกินไป" และควรหลีกเลี่ยง php มากที่สุด
Fabian Blechschmidt

-1

หากคุณอยู่ในตัวควบคุมบล็อกของคุณ

class module_namespace_Block_example extends Mage_Core_Block_Template 
{
      protected $_var;

     public function __construct(){

         $this->_var = "something"; 


     }
}

จากนั้นในไฟล์. phtml ของคุณ

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

   ?>

   <h1>You're inside your phtml file...... <?php echo $variable;  //prints "something" ?></h1>

สิ่งที่คุณเรียกว่า "บล็อคคอนโทรลเลอร์" เรียกว่า "บล็อค" ใน Magento คำถามคือเกี่ยวกับการกระทำของตัวควบคุมที่พบในcontrollersไดเรกทอรีของโมดูล
Fabian Schmengler

-4

นี่เป็นเรื่องง่ายมากที่จะส่งข้อมูลจากคอนโทรลเลอร์ไปยังไฟล์ phtml

ขั้นที่ 1: - สร้างคลาส Model ก่อนและขยายจาก Varien_Object

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

ขั้นตอนที่ 2: - ตอนนี้เปิดไฟล์ contollerfile และใส่รหัสในฟังก์ชั่น

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

ขั้นตอนที่ 3: - เปิดไฟล์ PHP และใส่รหัส

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

ผลลัพธ์: - 'gaurav';

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.