Magento – Redirect customer to a specific category page after successful registration

customerredirect

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.

 Mage::app()->getResponse()->setRedirect($category->getUrl($category));
 Mage::app()->getResponse()->sendResponse();
exit();

Place this code on place of

$successUrl = Mage::getUrl($category->getURL($category), array('_secure' => true));

Related Topic