如何将变量从 Controller 传递到 Block
How to pass variables from Controller to Block
您好,我在将变量从控制器传递到 Block 时遇到错误。我正在尝试执行搜索功能。
错误信息:
Fatal error: Call to a member function setCustomerRegistries() on a
non-object in
E:\xampp\htdocs\magento2\app\code\local\Mdg\Giftregistry\controllers\SearchController.php
on line 27
控制器
<?php
class Mdg_Giftregistry_SearchController extends Mage_Core_Controller_Front_Action{
public function indexAction(){
$this->loadLayout();
$this->renderLayout();
return $this;
}
public function resultsAction(){
$this->loadLayout();
if ($searchParams = $this->getRequest()->getParam('search_params')) {
$results = Mage::getModel('mdg_giftregistry/entity')->getCollection();
if($searchParams['type']){
$results->addFieldToFilter('type_id', $searchParams['type']);
}
if($searchParams['date']){
$results->addFieldToFilter('event_date', $searchParams['date']);
}
if($searchParams['location']){
$results->addFieldToFilter('event_location', $searchParams['location']);
}
$this->getLayout()->getBlock('mdg_giftregistry.search.results')->setCustomerRegistries($results);
}
$this->renderLayout();
return $this;
}
}
阻止
<?php
class Mdg_Giftregistry_Block_List extends Mage_Core_Block_Template
{
public function getCustomerRegistries()
{
$collection = null;
$currentCustomer = Mage::getSingleton('customer/session')->getCustomer();
if($currentCustomer)
{
$collection = Mage::getModel('mdg_giftregistry/entity')->getCollection()
->addFieldToFilter('customer_id', $currentCustomer->getId());
}
return $collection;
}
}
模板
<?php
$_collection = $this->getCustomerRegistries();
$helper = Mage::helper('mdg_giftregistry')
?>
<div class="customer-list">
<?php if(!$_collection->count()): ?>
<h2><?php echo $this->__('You have no registries.') ?></h2>
<a href="<?php echo $this->getUrl('giftregistry/index/new') ?>">
<?php echo $this->__('Click Here to create a new Gift Registry') ?>
</a>
<?php else: ?>
<ul>
<?php foreach($_collection as $registry): ?>
<li>
<h3><?php echo $registry->getEventName(); ?></h3>
<p><strong><?php echo $this->__('Event Name:') ?> <?php echo $registry->getEventName(); ?></strong></p>
<p><strong><?php echo $this->__('Event Location:') ?> <?php echo $registry->getEventLocation(); ?></strong></p>
<a href="<?php echo $this->getUrl('giftregistry/view/view', array('_query' => array('registry_id' => $registry->getEntityId()))) ?>">
<?php echo $this->__('View Registry') ?>
</a>
<?php if($helper->isRegistryOwner($registry->getCustomerId())): ?>
<a href="<?php echo $this->getUrl('giftregistry/index/edit', array('_query' => array('registry_id' => $registry->getEntityId()))) ?>">
<?php echo $this->__('Edit Registry') ?>
</a>
<a href="<?php echo $this->getUrl('giftregistry/index/delete', array('_query' => array('registry_id' => $registry->getEntityId()))) ?>">
<?php echo $this->__('Delete Registry') ?>
</a>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
布局XML
<?xml version="1.0"?>
<layout version="0.1.0">
<mdg_giftregistry_index_index>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
<reference name="content">
<block name="giftregistry.list" type="mdg_giftregistry/list" template="mdg/list.phtml" as="giftregistry_list"/>
</reference>
</mdg_giftregistry_index_index>
<mdg_giftregistry_index_new>
<reference name="content">
<block name="giftregistry.new" type="core/template" template="mdg/new.phtml" as="giftregistry_new"/>
</reference>
</mdg_giftregistry_index_new>
<mdg_giftregistry_index_edit>
<reference name="content">
<block name="giftregistry.edit" type="core/template" template="mdg/edit.phtml" as="giftregistry_edit"/>
</reference>
</mdg_giftregistry_index_edit>
<mdg_giftregistry_view_view>
<reference name="content">
<block name="giftregistry.view" type="core/template" template="mdg/view.phtml" as="giftregistry_view"/>
</reference>
</mdg_giftregistry_view_view>
<mdg_giftregistry_search_index>
<reference name="content">
<block name="giftregistry.search" type="core/template" template="mdg/search.phtml" as="giftregistry_search"/>
</reference>
</mdg_giftregistry_search_index>
<mdg_giftregistry_search_results>
<reference name="content">
<block name="giftregistry.results" type="mdg_giftregistry/list" template="mdg/list.phtml"/>
</reference>
</mdg_giftregistry_search_results>
<catalog_product_view translate="label">
<reference name="content">
<reference name="product.info">
<block type="mdg_giftregistry/add" name="registry.add" as="registry_add" template="mdg/add_to_registry.phtml" />
</reference>
</reference>
</catalog_product_view>
</layout>
试试这个解决方案。更改此行
$this->getLayout()->getBlock('mdg_giftregistry.search.results')->setCustomerRegistries($results);
至
$this->getLayout()->getBlock('giftregistry.results')->setCustomerRegistries($results);
您好,我在将变量从控制器传递到 Block 时遇到错误。我正在尝试执行搜索功能。
错误信息:
Fatal error: Call to a member function setCustomerRegistries() on a non-object in E:\xampp\htdocs\magento2\app\code\local\Mdg\Giftregistry\controllers\SearchController.php on line 27
控制器
<?php
class Mdg_Giftregistry_SearchController extends Mage_Core_Controller_Front_Action{
public function indexAction(){
$this->loadLayout();
$this->renderLayout();
return $this;
}
public function resultsAction(){
$this->loadLayout();
if ($searchParams = $this->getRequest()->getParam('search_params')) {
$results = Mage::getModel('mdg_giftregistry/entity')->getCollection();
if($searchParams['type']){
$results->addFieldToFilter('type_id', $searchParams['type']);
}
if($searchParams['date']){
$results->addFieldToFilter('event_date', $searchParams['date']);
}
if($searchParams['location']){
$results->addFieldToFilter('event_location', $searchParams['location']);
}
$this->getLayout()->getBlock('mdg_giftregistry.search.results')->setCustomerRegistries($results);
}
$this->renderLayout();
return $this;
}
}
阻止
<?php
class Mdg_Giftregistry_Block_List extends Mage_Core_Block_Template
{
public function getCustomerRegistries()
{
$collection = null;
$currentCustomer = Mage::getSingleton('customer/session')->getCustomer();
if($currentCustomer)
{
$collection = Mage::getModel('mdg_giftregistry/entity')->getCollection()
->addFieldToFilter('customer_id', $currentCustomer->getId());
}
return $collection;
}
}
模板
<?php
$_collection = $this->getCustomerRegistries();
$helper = Mage::helper('mdg_giftregistry')
?>
<div class="customer-list">
<?php if(!$_collection->count()): ?>
<h2><?php echo $this->__('You have no registries.') ?></h2>
<a href="<?php echo $this->getUrl('giftregistry/index/new') ?>">
<?php echo $this->__('Click Here to create a new Gift Registry') ?>
</a>
<?php else: ?>
<ul>
<?php foreach($_collection as $registry): ?>
<li>
<h3><?php echo $registry->getEventName(); ?></h3>
<p><strong><?php echo $this->__('Event Name:') ?> <?php echo $registry->getEventName(); ?></strong></p>
<p><strong><?php echo $this->__('Event Location:') ?> <?php echo $registry->getEventLocation(); ?></strong></p>
<a href="<?php echo $this->getUrl('giftregistry/view/view', array('_query' => array('registry_id' => $registry->getEntityId()))) ?>">
<?php echo $this->__('View Registry') ?>
</a>
<?php if($helper->isRegistryOwner($registry->getCustomerId())): ?>
<a href="<?php echo $this->getUrl('giftregistry/index/edit', array('_query' => array('registry_id' => $registry->getEntityId()))) ?>">
<?php echo $this->__('Edit Registry') ?>
</a>
<a href="<?php echo $this->getUrl('giftregistry/index/delete', array('_query' => array('registry_id' => $registry->getEntityId()))) ?>">
<?php echo $this->__('Delete Registry') ?>
</a>
<?php endif; ?>
</li>
<?php endforeach; ?>
</ul>
<?php endif; ?>
</div>
布局XML
<?xml version="1.0"?>
<layout version="0.1.0">
<mdg_giftregistry_index_index>
<reference name="root">
<action method="setTemplate"><template>page/1column.phtml</template></action>
</reference>
<reference name="content">
<block name="giftregistry.list" type="mdg_giftregistry/list" template="mdg/list.phtml" as="giftregistry_list"/>
</reference>
</mdg_giftregistry_index_index>
<mdg_giftregistry_index_new>
<reference name="content">
<block name="giftregistry.new" type="core/template" template="mdg/new.phtml" as="giftregistry_new"/>
</reference>
</mdg_giftregistry_index_new>
<mdg_giftregistry_index_edit>
<reference name="content">
<block name="giftregistry.edit" type="core/template" template="mdg/edit.phtml" as="giftregistry_edit"/>
</reference>
</mdg_giftregistry_index_edit>
<mdg_giftregistry_view_view>
<reference name="content">
<block name="giftregistry.view" type="core/template" template="mdg/view.phtml" as="giftregistry_view"/>
</reference>
</mdg_giftregistry_view_view>
<mdg_giftregistry_search_index>
<reference name="content">
<block name="giftregistry.search" type="core/template" template="mdg/search.phtml" as="giftregistry_search"/>
</reference>
</mdg_giftregistry_search_index>
<mdg_giftregistry_search_results>
<reference name="content">
<block name="giftregistry.results" type="mdg_giftregistry/list" template="mdg/list.phtml"/>
</reference>
</mdg_giftregistry_search_results>
<catalog_product_view translate="label">
<reference name="content">
<reference name="product.info">
<block type="mdg_giftregistry/add" name="registry.add" as="registry_add" template="mdg/add_to_registry.phtml" />
</reference>
</reference>
</catalog_product_view>
</layout>
试试这个解决方案。更改此行
$this->getLayout()->getBlock('mdg_giftregistry.search.results')->setCustomerRegistries($results);
至
$this->getLayout()->getBlock('giftregistry.results')->setCustomerRegistries($results);