我是magento的新手,所以如果我有任何问题,请原谅我。我已经为instagram登录创建了一个自定义模块,我只想将该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>
我也得到我的自定义表单..但控制器没有被调用,功能主义者没有工作,只有我收到表单。
任何人都可以帮助我吗?
答案 0 :(得分:0)
这是我对stackoverflow的第一个回答,我会尽力解释。
首先,让我向您简要介绍一下Magento的拦截电话;任何特定类型的块(块文件夹中的.php文件)都有相应的内容/模板(模板文件夹中的.phtml)文件,用于呈现从模型中获取的数据(模型文件夹中的.php)。
在您的布局(布局文件夹中的模块的.xml)中,您添加了一个类型(核心/模板)的块,因此它将调用文件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>
在Block文件夹中创建一个名为Blazedream_Instagram_Block_Instagram.php的文件,然后您就可以调用块模板的自定义方法了。 实施例.-
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-&gt; customMethod()
谢谢!如果我不能正确解释它,请原谅我。