我正在尝试添加一个非常基本的(字面意思只是一个带有一些文本和一个继续按钮的div)步骤到onepage checkout但是很短,因为它们不起作用(我怀疑它是因为它们是在遵循示例here (Fontis),here (inchoo)和here (Magento Forums)后,在1.7.0.2之前创建。
我也试过结合来自不同的例子和论坛帖子的比特,但我已经没有在我试图这样做的那一周。
我已经推荐了“Php Architect的Magento电子商务编程指南”这本书,我已经购买并将开始阅读,但我想知道是否有人可以指出我正确的方向,增加一个新的步骤1.7.0.2的onepage checkout?
非常感谢任何帮助!
答案 0 :(得分:10)
我已按照本指南在1.7.0.2中成功完成此操作:
http://www.excellencemagentoblog.com/magento-onestep-checkout-add-step
总之,您需要扩展/覆盖Mage_Checkout_Block_Onepage :: getSteps()以在序列中添加新步骤。
创建新步骤的块/模板(在上一步完成时使用Ajax请求加载)您的块类需要扩展:Mage_Checkout_Block_Onepage_Abstract
你还需要扩展onepagecheckout javascript,因为这会带来很多繁重的工作。 Prototype库有一个很好的方法。
最后,您需要扩展控制器类(Mage_Checkout_OnepageController)以覆盖任何现有步骤的响应,返回新步骤的内容(使用ajax加载),并处理任何数据的保存操作(表单字段等)进入你的新步骤。
答案 1 :(得分:2)
默认情况下,magento会提供一些结帐步骤。但有时您需要从客户那里添加额外信息以供将来参考。常见的请求自定义是在默认结帐过程中添加自定义表单。 这不是触摸核心文件的好习惯。您可以通过覆盖模块来完成此操作。 在此示例中,Comapnyname是 Ipragmatech ,模块名称是 Checkoutstep 。
步骤1:在结帐流程中添加自定义步骤
打开Ipragmatech> Checkoutstep>块> Onepage> Checkoutstep.php文件并编写以下代码
class Ipragmatech_Checkoutstep_Block_Onepage_Checkoutstep extends Mage_Checkout_Block_Onepage_Abstract
{
protected function _construct()
{
$this->getCheckout()->setStepData('checkoutstep', array(
'label' => Mage::helper('checkout')->__('Invitation to participation'),
'is_show' => true
));
parent::_construct();
}
}
第二步:在结帐流程中添加您想要的步骤
打开Ipragmatech> Checkoutstep>块> Onepage> Checkoutstep.php文件并编写以下代码
class Ipragmatech_Checkoutstep_Block_Onepage extends Mage_Checkout_Block_Onepage
{
public function getSteps()
{
$steps = array();
if (!$this->isCustomerLoggedIn()) {
$steps['login'] = $this->getCheckout()->getStepData('login');
}
$stepCodes = array('billing', 'shipping', 'shipping_method', 'payment', 'checkoutstep', 'review');
foreach ($stepCodes as $step) {
$steps[$step] = $this->getCheckout()->getStepData($step);
}
return $steps;
}
}
步骤3:获取自定义表单的提交值并设置自定义表单的值
打开ipragmatech> Checkoutstep>控制器> OnepageController.php并编写以下函数
public function saveCheckoutstepAction()
{
$this->_expireAjax();
if ($this->getRequest()->isPost()) {
//Grab the submited value
$_entrant_name = $this->getRequest()->getPost('entrant_name',"");
$_entrant_phone = $this->getRequest()->getPost('entrant_phone',"");
$_entrant_email = $this->getRequest()->getPost('entrant_email',"");
$_permanent_address = $this->getRequest() ->getPost('permanent_address',"");
$_address = $this->getRequest()->getPost('local_address',"");
Mage::getSingleton('core/session') ->setIpragmatechCheckoutstep(serialize(array(
'entrant_name' =>$_entrant_name,
'entrant_phone' =>$_entrant_phone,
'entrant_email' =>$_entrant_email,
'permanent_address' =>$_permanent_address,
'address' =>$_address
)));
$result = array();
$redirectUrl = $this->getOnePage()->getQuote()->getPayment() ->getCheckoutRedirectUrl();
if (!$redirectUrl) {
$this->loadLayout('checkout_onepage_review');
$result['goto_section'] = 'review';
$result['update_section'] = array(
'name' => 'review',
'html' => $this->_getReviewHtml()
);
}
if ($redirectUrl) {
$result['redirect'] = $redirectUrl;
}
$this->getResponse()->setBody(Zend_Json::encode($result));
}
}
步骤4:保存自定义表单信息
checkout_onepage_controller_success_action 调用事件挂钩。打开Ipragmatech> Checkoutstep>模型> Observer.php并编写以下内容
class Ipragmatech_Checkoutstep_Model_Observer {
const ORDER_ATTRIBUTE_FHC_ID = 'checkoutstep';
public function hookToOrderSaveEvent() {
if (Mage::helper('checkoutstep')->isEnabled()) {
$order = new Mage_Sales_Model_Order ();
$incrementId = Mage::getSingleton ( 'checkout/session' )->getLastRealOrderId ();
$order->loadByIncrementId ( $incrementId );
// Fetch the data
$_checkoutstep_data = null;
$_checkoutstep_data = Mage::getSingleton ( 'core/session' )->getIpragmatechCheckoutstep ();
$model = Mage::getModel ( 'checkoutstep/customerdata' )->setData ( unserialize ( $_checkoutstep_data ) );
$model->setData ( "order_id",$order["entity_id"] );
try {
$insertId = $model->save ()->getId ();
Mage::log ( "Data successfully inserted. Insert ID: " . $insertId, null, 'mylog.log');
} catch ( Exception $e ) {
Mage::log ( "EXCEPTION " . $e->getMessage (), null, 'mylog.log' );
}
}
}
}
Magento - 在Checkout Extension中添加自定义表单是一个完整的解决方案,可以为您的电子商务网站添加Checkout流程中的额外步骤。它允许管理员以CSV格式从自定义表中导出数据。 点击此链接即可获得此免费续订http://www.magentocommerce.com/magento-connect/custom-form-in-checkout.html