Gửi dữ liệu từ bộ điều khiển đến phtml


22

Tôi có bộ điều khiển này:

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

Tôi muốn truy cập $somethingvào tài liệu .phtml của mình, làm thế nào để làm điều này? (hoặc để đặt nó theo một cách khác: làm thế nào tôi có thể truy cập $somethingvào tệp .phtml của mình)

Câu trả lời:


21

Có một vài cách để làm điều này.

Chỉ định trực tiếp cho Khối:

$block->assign($var);

hoặc là

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

Sau đó, bạn có thể truy cập nó trong tệp phtml như thế này:

$this->myvar

Sử dụng sổ đăng ký Mage:

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

và sau đó sử dụng nó như:

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

2
bạn đã sử dụng $block->assign($var)nhưng làm thế nào để được lấy trong phtmltập tin?
Mohammad Faisal

Bạn sẽ truy cập qua $this->myvartừ trong tệp mẫu
philwinkle

1
Tôi tin là vậy Mage::register($key, $value, ...). Vì vậy , Mage::register('custom_var', $var)?
nhạcliftsme

4
Nó có $block->assign('myvar',$var);nên không?
fritzmg

@philwinkle Có Mage::register('custom_var', $var); ghi giá trị trong phiên và có thể truy cập được từ tệp mẫu khác ngoại trừ mẫu hành động hiện tại không?
Bướm

18

Phtml của bạn phải được kết xuất bởi một khối. Khối phải có tên trong bố trí.
Bạn có thể làm điều này sau khi gọi$this->loadLayout();

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

Sau đó, bạn có thể nhận được giá trị trong phtmltệp như

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

điều này không hiệu quả với tôi :(, tôi có bộ điều khiển trả về id sản phẩm thông qua AJAX, để xem nhanh sản phẩm.
Shathish

@Shathish. Đây là một vấn đề khác nhau. Bạn có thể kết xuất phản hồi dưới dạng JSON và sử dụng các giá trị trong trình xử lý phản hồi AJAX.
Marius

Có, tôi đang sử dụng JSON để trả về nội dung khối (Something.phtml) và cập nhật div với các chi tiết này trong trang danh sách, làm cách nào tôi có thể chuyển biến từ bộ điều khiển của mình sang một cái gì đó. thực sự tôi đang làm điều này hiện đang sử dụng phương thức $ block-> gán () mà tôi cảm thấy không đúng cách (vì nó là khớp nối chặt chẽ - sửa tôi nếu tôi sai) hoặc tôi sẽ đăng bài này dưới dạng câu hỏi?
Shathish

@shathish có thể bạn sẽ hỏi một câu hỏi khác và hy vọng nó không bị đánh dấu là trùng lặp.
Marius

3

Trong trường hợp bạn bỏ lỡ, có một cách nữa để thực hiện điều này

sử dụng phiên

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

nguồn


Ngay cả khi bạn có dữ liệu trong phiên để sử dụng sau này, tôi khuyên bạn nên sử dụng $block->setSomething()hoặc $block->assign(). Cảm giác này giống như "quá nhiều mã" và nó nên tránh càng nhiều php càng tốt.
Fabian Blechschmidt

-1

Nếu bạn nằm trong bộ điều khiển khối của bạn.

class module_namespace_Block_example extends Mage_Core_Block_Template 
{
      protected $_var;

     public function __construct(){

         $this->_var = "something"; 


     }
}

Sau đó, trong tệp .phtml của bạn

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

   ?>

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

Những gì bạn gọi là "khối điều khiển" chỉ được gọi là "khối" trong Magento. Câu hỏi là về các hành động của bộ điều khiển được tìm thấy trong controllersthư mục của một mô-đun.
Fabian Schmengler

-4

điều này rất dễ dàng để gửi dữ liệu từ bộ điều khiển đến tập tin phtml.

Bước 1: - Đầu tiên tạo lớp Model và mở rộng từ Varien_Object

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

Bước2: - Bây giờ Mở contollerfile và đặt mã vào hàm.

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

Bước 3: - Mở tệp phtml và đặt mã.

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

Đầu ra: - 'gaurav';

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.