Magento在另一个自定义块内调用自定义块

我对magento很陌生,所以请原谅我,如果我有任何问题。 我为Instagram登录创建了一个自定义模块,我只是想从该模块中调用特定的模块到另一个布局文件。 我使用了在我的视图页面中打印的那个块

   <?php echo $this->getChildHtml('media_new'); ?>

我的街区被叫,但功能正在工作,表单不提交。

我的自定义模块布局文件。 Instagram.xml

<?xml version="1.0"?>
<layout version="0.1.0">
<default>
      <reference name="content">
      </reference>
</default>
     <instagram_index_instagram_signup>  
        <reference name="head">
            <action method="addJs"><script>magenthemes/jquery/plugins/jquery.cookie.js</script></action>
        </reference>
        <reference name="content">
             <block type="core/template" name="instagram.signup" template="instagramlogin/Instagram_signup.phtml"></block>
        </reference>
    </instagram_index_instagram_signup>  
</layout>

我想将上述块调用到另一个模块布局文件:我的另一个模块布局页面:

             <marketplace_vendor_login>
    <reference name="head">
            <action method="addJs"><script>magenthemes/jquery/plugins/jquery.cookie.js</script></action>
    </reference>
     <remove name="right"/>
    <remove name="left"/>
     <reference name="before_body_end">
        <block type="facebookfree/init" name="belvg_facebookfree_block">
            <action method="setTemplate" ifconfig="facebookfree/settings/enabled" ifvalue="1">
                <template>belvg/facebookfree/block.phtml</template>
            </action>
        </block>
    </reference>
    <reference name="root">
        <action method="setTemplate"><template>page/1column.phtml</template></action>
    </reference>
    <reference name="content">
    <block type="marketplace/vendor_login" name="customer_form_login" template="nbmpmarketplace/login.phtml" >
        <block type="facebookfree/links_button" name="belvg_facebookfree_button" template="belvg/facebookfree/form/button.phtml" />
          <block type="core/template" name="instagram.signup" as="media_new" template="instagramlogin/Instagram_signup.phtml"></block>
    </block>
    </reference>
</marketplace_vendor_login>

在这里我调用了我的自定义块,然后在我的视图页中打印为:

            <?php echo $this->getChildHtml('media_new'); ?>

我的instagram的控制器代码:

class Blazedream_Instagram_IndexController extends Mage_Core_Controller_Front_Action
        {
public function instagram_signupAction()
{
    if ($this->getRequest()->isPost()){  
        if($this->getRequest()->getPost('instagram-email')){
            $instagram_email  = $this->getRequest()->getPost('instagram-email');
            $customer_model = Mage::getModel('instagram/instagram');
            $site_customer = $customer_model->checkCustomer($instagram_email);
            if($site_customer){
                $instagram_customer = Mage::getModel('instagram/instagram')->getCollection()
                                                  ->addFieldToFilter('customer_id', array('eq' => $site_customer));
                if(count($instagram_customer)==1){
                    Mage::getSingleton('core/session')->setInstagramEmail($instagram_email);
                    $this->_redirect('instagram/index');    
                }else{
                    Mage::getSingleton('customer/session')->addError('Email Id Already Registered.');
                    $this->_redirect('sellerlogin');    
                }
            }else{
                Mage::getSingleton('core/session')->setInstagramEmail($instagram_email);
                $this->_redirect('instagram/index');
            }
        }
    }
    $this->loadLayout();
    $this->getLayout()->getBlock('instagram.signup');
    $this->renderLayout();
}
 }

它没有进入这个控制器功能,我用于instagram模块。

我的观点页面:instagramlogin.phtml

      <div style="display: none">
    <style type="text/css">
        #cboxContent.newsletterbox {
        <?php if($backgroundImage){?> background-image: url(<?php echo Mage::getBaseUrl('media').'/wysiwyg/magenthemes/newsletter/'.$backgroundImage;?>);
        <?php }?> background-position: left top;
            background-repeat: no-repeat;
            background-color: <?php echo $backgroundColor;?>;
        }
    </style>
    <div id="mt_instagram" class="block block-subscribe">
        <div class="row">
            <div class="left-newletters col-lg-8 col-md-8 col-sm-8 col-xs-8">
                <div class="block-title">
                    <strong><span><?php echo $this->__('Join our Mail List Through Instagram!') ?></span></strong>
                </div>
                <div class="row-none">
                    <div class="popup_message">
                        <div class="intro">
                            <?php echo $desc; ?>
                        </div>
                        <form action="<?php echo Mage::getBaseUrl().'instagram/index/instagram_signup'; ?>" method="post" id="instagram-validate-detail">
                            <div class="block-content">
                                <div class="input-box">
                                    <input name="instagram-email" type="text" id="mt-newsletter" placeholder="Enter your email id"
                                           value="" class="input-text required-entry validate-email"/>


                                    <div class="actions">
                                        <button type="submit" title="<?php echo $this->__('Subscribe') ?>"
                                                class="button">
                                            <span><span><?php echo $this->__('Subscribe') ?></span></span></button>
                                    </div>
                                </div>
                            </div>
                        </form>
                    </div>
                </div>

我也得到我的自定义形式..但控制器没有被调用,功能主义者不工作,只有我得到的形式。

谁能帮我?


这是我第一次在stackoverflow上回答,我会尽我所能解释。

首先,让我介绍一下Magento中的块调用; 任何特定类型的Block(Block文件夹中的.php文件)都有一个对应的内容/模板(模板文件夹中的.phtml)文件,用于渲染从Model(模型文件夹中的.php)中获取的数据。

在您的布局中(布局文件夹中模块的.xml文件),您添加了一个类型为(core / template)的块,以便调用文件Mage_Core_Block_Template.php并可以访问其所有方法。 但是,如果你想创建一个自定义块,你可以像这样更新布局(instagram模块)文件。

    <layout version="0.1.0">
    <default>
          <reference name="content">
          </reference>
    </default>
         <instagram_index_instagram_signup>  
            <reference name="head">
                <action method="addJs"><script>magenthemes/jquery/plugins/jquery.cookie.js</script></action>
            </reference>
            <reference name="content">
                 <block type="instagram/instagram" name="instagram.signup" template="instagramlogin/Instagram_signup.phtml"></block>
            </reference>
        </instagram_index_instagram_signup>  
    </layout>

然后在名为Blazedream_Instagram_Block_Instagram.php的Block文件夹中创建一个文件,然后您将能够调用块模板的自定义方法。 Ex.-

    class Blazedream_Instagram_Block_Instagram extends Mage_Core_Block_Template
    {
      public function customMethod()
      {
        $response = array('a', 'b', 'c');

        $this->getResponse()->setHeader('Content-type','application/json', true);
        $this->getResponse()->setBody(Mage::helper('core')->jsonEncode($response));
        return;
      }
    }

更新你的控制器动作调用

    $this->loadLayout();
    $this->renderLayout();

现在,要将此块添加到另一个自定义模块中,请更新其布局

    <fname_controller_action>
         //path controller path on which you want to add/update the block
        <update handle="my_custom_handle" />
    </fname_controller_action>

    <my_custom_handle>
        <reference name="content">
            <reference name="where_you_want_to_add">
                <block type="instagram/instagram" name="my.custom.block" as="instagram.signup" template="template_path/instagram.phtml"/>
            </reference>
        </reference>
    </my_custom_handle>

或者在块文件Blazedream_Instagram_Block_Instagram.php中添加一个构造函数 -

    public function __construct()
    {
        parent::__construct();
        $this->setTemplate('template/instagram.phtml');
    }

并用以下代码在任何模板文件中调用该块

    echo $this->getLayout()->createBlock('instagram/instagram')->toHtml();

You might need to update your layout file in this case.

如果你正确地做了一切,你应该能够在模板文件instagram.phtml中调用$ this-> customMethod()

谢谢! 如果我不能正确解释,请原谅我。

链接地址: http://www.djcxy.com/p/59491.html

上一篇: Magento Call custom block inside another custom block

下一篇: Magento structural blocks, content blocks and phtml templates