I want to add a new page like the success or failure pages.
In /app/design/frontend/default/[theme]/layout/checkout.xml I saw this:
<checkout_onepage_failure translate="label">
<label>One Page Checkout Failure</label>
<reference name="root">
<action method="setTemplate"><template>page/2columns-right.phtml</template></action>
</reference>
<reference name="content">
<block type="checkout/onepage_failure" name="checkout.failure" template="checkout/onepage/failure.phtml"/>
</reference>
</checkout_onepage_failure>
So I added this:
<checkout_onepage_pay translate="label">
<label>One Page Checkout Payment</label>
<reference name="root">
<action method="setTemplate"><template>page/2columns-right.phtml</template></action>
</reference>
<reference name="content">
<block type="checkout/onepage_pay" name="checkout.pay" template="checkout/onepage/pay.phtml"/>
</reference>
</checkout_onepage_pay>
And did the same in /app/design/frontend/base/default/layout/checkout.xml
And added my page to /app/design/frontend/base/default/template/checkout/onepage/
But I'm getting an 404 error, and dunno where else have to make reference to my page.
Thank you.
Edit: don't know if is important but this page it will show after the "Place Order" button is clicked.
Keep looking and I found this in Checkout/controllers/OnepageController.php
public function failureAction()
{
$lastQuoteId = $this->getOnepage()->getCheckout()->getLastQuoteId();
$lastOrderId = $this->getOnepage()->getCheckout()->getLastOrderId();
if (!$lastQuoteId || !$lastOrderId) {
$this->_redirect('checkout/cart');
return;
}
**$this->loadLayout();
$this->renderLayout();**
}
So here is where load and render the failure template, right? Where is called this method? D:
Best Answer
You are trying to define an invalid
handler
andblock
incheckout.xml
.You are using a handler that magento do not understand. i e.
What you have done here is you are used an invalid handler instead of actual handler
<checkout_onepage_failure />
. Magento looks for this handler when onepage checkout fails. When magento enquires handler, its not present in your layout file. Hence it throws an error.Also your block is also invalid (Most probly). i e
This block tells magento that, whenever a onepage checkout failure occurs (Assumes your handler is
<checkout_onepage_failure />
), you have to look for a blockMage_Checkout/Block/Onepage/Pay.php
. Hence Magento fails to load this block type, since it is not defined. In default case the block that magento looking for will beMage/Checkout/Block/Onepage/Failure.php
and it DOES exist.From your question, its difficult to understand what you are looking for. There may be two cases
If that is the case you have to do this handler.
You just need to alter the
template
part of default block.If that is the case, then you need to use this handler
This code snippet is from
app/design/frontend/base/default/layout/checkout.xml
. Make changes to content of this handler.Note: Whatever be the reason, it is not a good practice to change the the files that resides in the location
app/design/frontend/base/default
. Set a new package and theme and make changes to the directoryapp/design/frontend/<your_package>/<your_theme>/