컨트롤러에서 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::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 2016 년

@philwinkle Mage::register('custom_var', $var); 세션에 값을 쓰면 현재 작업 템플릿을 제외한 다른 템플릿 파일에서도 액세스 할 수 있습니까?
Butterfly

18

phtml은 블록으로 렌더링해야합니다. 블록 이름은 레이아웃에 있어야합니다.
당신은 전화 후이 작업을 수행 할 수 있습니다$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');

이것은 나를 위해 작동하지 않습니다 :(, 제품의
빠른

@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 파일로 데이터를 보내는 것이 매우 쉽습니다.

Step1 :-먼저 Model 클래스를 생성하고 Varien_Object에서 확장

class Namespace_Modulename_Model_Modelfilename extends Varien_Object
{

}

step2 :-이제 제어 파일을 열고 코드를 함수에 넣습니다.

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

Step3 :-phtml 파일을 열고 코드를 넣습니다.

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

출력 :- 'gaurav';

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.