I am trying to redirect customer to a specific category based on the entered code.
Everything works fine except the redirect. Magento redirects to homepage instead of category page.
How can I redirect to category page? Any can help?
Customer Registration Form extra field to get the correct category:
<input type="text" name="login[passcode]" id="passcode" value="" title="<?php echo $this->__('Passcode') ?>" class="input-text required-entry" />
My config.xml:
<?xml version="1.0"?>
<config>
<modules>
<Team_Savepasscode>
<version>0.0.1</version>
</Team_Savepasscode>
</modules>
<global>
<models>
<team_savepasscode>
<class>Team_Savepasscode_Model</class>
</team_savepasscode>
</models>
<events>
<customer_register_success>
<observers>
<team_savepasscode>
<class>team_savepasscode/observer</class>
<method>customerRegisterSuccess</method>
<type>singleton</type>
</team_savepasscode>
</observers>
</customer_register_success>
</events>
</global>
</config>
Customer registration success event observer:
public function customerRegisterSuccess(Varien_Event_Observer $observer) {
$classcode = Mage::app()->getRequest()->getPost('login');
$session = Mage::getSingleton('customer/session');
$session->setPasscode($classcode);
$categories = Mage::getResourceModel('catalog/category_collection');
$categories->addAttributeToSelect('*');
$categories->addAttributeToFilter('is_active', 1);
$categories->addAttributeToFilter('passcode', $classcode);
$categories->addUrlRewriteToResult();
$categories->setCurPage(1)->setPageSize(1);
$categories->load();
if ($categories->getFirstItem()) {
$category = $categories->getFirstItem();
$successUrl = $session->getBeforeAuthUrl(true);
$successUrl = Mage::getUrl($category->getURL($category), array('_secure' => true));
return $successUrl;
}
else {
echo 'No category exists with the name ' . $name;
}
}
Best Answer
As you want to redirect to a category,so u can use magento FrontController redirction action from any view.
Place this code on place of
$successUrl = Mage::getUrl($category->getURL($category), array('_secure' => true));