Magento-将一个变量从控制器传递到签出temaplte

Magento-将一个变量从控制器传递到签出temaplte,magento,variables,controller,Magento,Variables,Controller,我已经阅读了关于这个主题的其他帖子,尝试了很多东西,但是无法从我的控制器文件中获取一个变量。我很少有创建模块的经验,所以按照指南创建以下内容 应用程序▸ 密码▸ 地方的▸ 克雷尔▸ 限制▸ 等▸ config.xml <?xml version="1.0"?> <config> <modules> <Creare_AgeRestricted> <version>0.1.0</vers

我已经阅读了关于这个主题的其他帖子,尝试了很多东西,但是无法从我的控制器文件中获取一个变量。我很少有创建模块的经验,所以按照指南创建以下内容

应用程序▸ 密码▸ 地方的▸ 克雷尔▸ 限制▸ 等▸ config.xml

<?xml version="1.0"?>
<config>
    <modules>
        <Creare_AgeRestricted>
            <version>0.1.0</version>
        </Creare_AgeRestricted>
    </modules>
    <global>
        <events>
            <payment_method_is_active>
                <observers>
                    <age_restricted>
                        <type>singleton</type>
                        <class>AgeRestricted/observer</class>
                        <method>AgeRestricted</method>
                    </age_restricted>
                </observers>
            </payment_method_is_active>
        </events> 
        <models>
            <AgeRestricted>
                <class>Creare_AgeRestricted_Model</class>
                <resourceModel>agerestricted_mysql4</resourceModel>
            </AgeRestricted>
        </models>
        <sales>
            <quote>
                <item>
                    <product_attributes>
                        <age_restricted/>
                    </product_attributes>
                </item>
            </quote>
        </sales>
    </global>
</config>
然后我试着用以下方式来称呼:

echo Mage::registry('feedback');
存档: app/design/frontend/dexam/default/template/checkout/onepage/payment.phtml

但它什么也没显示。我已经在payment.phtml中测试了位置。。我的测试文本出现,但“反馈”并没有调用$AGERSTRICTED

我试着克制自己;在我的控制器中,它在我的屏幕顶部回显了许多“1”,以便我可以看到变量包含真实值

如何调用$AgeRestricted in payment.phtml

非常感谢!! 达兹


您可以使用magento签出会话设置从观察者到付款文件的值

<?php

class Creare_AgeRestricted_Model_Observer
{
    public function AgeRestricted(Varien_Event_Observer $observer)
    {

       $event           = $observer->getEvent();
           $method          = $event->getMethodInstance();
           $result          = $event->getResult();
       $AgeRestricted        = false;

        foreach (Mage::getSingleton('checkout/cart')->getQuote()->getAllVisibleItems() as     $item)
        {
            if($item->getProduct()->getAgeRestricted()){
               $AgeRestricted = true;
             }

        }

    if($AgeRestricted){
        Mage::getSingleton('checkout/session')->setRestictedAge($AgeRestricted);
    }

    }

}
在您的payment.phtml中

<?php $session = Mage::getSingleton('checkout/session');?>
<?php echo $session->getRestrictedAge();?>

你必须把Mage::register'feedback',$AgeRestricted;初始化变量$AgeRestricted=false后;谢谢,我尝试了这个,但是我得到了错误-Mage注册表项反馈已经存在。我确信这是因为相同的代码在反复运行。我也尝试了下面的if语句,但这也给出了键已存在错误。这在加载签出时给出了此错误:-Mage注册表键反馈已存在您是否检查此Mage::register'feedback',$AgeRestricted;在Observer.php中只有一次,您还需要设置if条件来检查变量寄存器是否存在这是它在Observer.php中调用的唯一一次。其代码与上面提供的代码相同。我知道,当我回显$AGERSTRICTED时,它会给出很多“1”,因此它显然会运行多次。如何注册变量,然后在每次后续尝试时更新其值?我已经添加了您在上面添加的if语句,但仍然给出错误-Mage注册表项反馈已经存在。您确定在Mage::register'feedback'、$Agerstricted或在代码编辑后清除缓存和日志文件的其他位置不存在此代码吗
<?php

class Creare_AgeRestricted_Model_Observer
{
    public function AgeRestricted(Varien_Event_Observer $observer)
    {

       $event           = $observer->getEvent();
           $method          = $event->getMethodInstance();
           $result          = $event->getResult();
       $AgeRestricted        = false;

        foreach (Mage::getSingleton('checkout/cart')->getQuote()->getAllVisibleItems() as     $item)
        {
            if($item->getProduct()->getAgeRestricted()){
               $AgeRestricted = true;
             }

        }

    if($AgeRestricted){
        Mage::getSingleton('checkout/session')->setRestictedAge($AgeRestricted);
    }

    }

}
<?php $session = Mage::getSingleton('checkout/session');?>
<?php echo $session->getRestrictedAge();?>