标签 Magento 下的文章

网上这篇文章很多了,当是转载一下,留个备份。
通过这个实例可以学到很多有关Magento的知识。

<?php 
require_once 'app/Mage.php'; 
Mage::app('default'); //初始化程序,设置当前店铺 
$store = Mage::app()->getStore('default');

//通过电子邮件获取用户,当然也可以不获取,创建guest订单
$customer = Mage::getModel('customer/customer');
$customer->setStore($store);
$customer->loadByEmail('[email protected]');

//初始化Quote,Magento的订单是通过Quote来转化过去的
$quote = Mage::getModel('sales/quote');
$quote->setStore($store);
$quote->assignCustomer($customer); //如果有用户则执行这个

$product1 = Mage::getModel('catalog/product')->load(166); /* HTC Touch Diamond */
$buyInfo1 = array('qty' => 1);

$product2 = Mage::getModel('catalog/product')->load(18); /* Sony Ericsson W810i */
$buyInfo2 = array('qty' => 3);

//添加商品到Quote
$quote->addProduct($product1, new Varien_Object($buyInfo1));
$quote->addProduct($product2, new Varien_Object($buyInfo2));

//设置账单和收货品地址
$billingAddress = $quote->getBillingAddress()->addData($customer->getPrimaryBillingAddress());
$shippingAddress = $quote->getShippingAddress()->addData($customer->getPrimaryShippingAddress());

//设置配送和支付方式
$shippingAddress->setCollectShippingRates(true)->collectShippingRates()->setShippingMethod('flatrate_flatrate')->setPaymentMethod('checkmo');
$quote->getPayment()->importData(array('method' => 'checkmo'));

//Quote计算运费
$quote->collectTotals()->save();

//将Quote转化为订单
$service = Mage::getModel('sales/service_quote', $quote);
$service->submitAll();
$order = $service->getOrder();

/***至此订单已经成功生成,下面是注册付款信息***/
$invoice = Mage::getModel('sales/service_order', $order)->prepareInvoice();
$invoice->setRequestedCaptureCase(Mage_Sales_Model_Order_Invoice::CAPTURE_ONLINE);
$invoice->register();
$transaction = Mage::getModel('core/resource_transaction')->addObject($invoice)->addObject($invoice->getOrder());

public function deleteallAction()
{
    $cartHelper = Mage::helper('checkout/cart');
    $items = $cartHelper->getCart()->getItems();        
    foreach ($items as $item) 
    {
        $itemId = $item->getItemId();
        $cartHelper->getCart()->removeItem($itemId)->save();
    } 
    $this->_redirectReferer(Mage::getUrl('*/*'));
}
$cartHelper = Mage::helper('checkout/cart');
$items = $cartHelper->getCart()->getItems();
foreach ($items as $item) {
    if ($item->getProduct()->getId() == $productId) {
        $itemId = $item->getItemId();
        $cartHelper->getCart()->removeItem($itemId)->save();
        break;
    }
}

今天安装一个模版,装上之后更新索引,出现“Invalid backend model specified: catalog/product_attribute_backend_startdate_specialprice”的错误,看字面意思是引用了无效的后端模块,查找这个模块,确实没有。网上搜了一圈,找到篇文章,说的大体是这意思,附上文章:

当你开始用Magento1.5,你就不能指望Magento能让你不头疼的去工作,今天就出事了。

我们开始处理一个网站从来没有遇到过的可能会毁掉整个网站的问题。这是给所谓的错误“Invalid backend model specified: catalog/attribute_backend_customlayoutupdate
这是问题的解决办法,
1.转到你的phpmyadmin,比如你的数据库名是XXX。
2.运行下面的语句
SELECT *
FROM `qubesys`.`eav_attribute`
WHERE (
`attribute_id` LIKE '%stomlayoutupdate%'
OR `entity_type_id` LIKE '%stomlayoutupdate%'
OR `attribute_code` LIKE '%stomlayoutupdate%'
OR `attribute_model` LIKE '%stomlayoutupdate%'
OR `backend_model` LIKE '%stomlayoutupdate%'
OR `backend_type` LIKE '%stomlayoutupdate%'
OR `backend_table` LIKE '%stomlayoutupdate%'
OR `frontend_model` LIKE '%stomlayoutupdate%'
OR `frontend_input` LIKE '%stomlayoutupdate%'
OR `frontend_label` LIKE '%stomlayoutupdate%'
OR `frontend_class` LIKE '%stomlayoutupdate%'
OR `source_model` LIKE '%stomlayoutupdate%'
OR `is_required` LIKE '%stomlayoutupdate%'
OR `is_user_defined` LIKE '%stomlayoutupdate%'
OR `default_value` LIKE '%stomlayoutupdate%'
OR `is_unique` LIKE '%stomlayoutupdate%'
OR `note` LIKE '%stomlayoutupdate%'
)

3.当你运行后,数据库会显示一些记录,选中,并删除

4.删除后,刷新一下网站前端,你的网站又回来了。

(上面是文章的原文,=_=!当年不好好学习,英语还是初中水平,大家凑合着看看吧。)

最关键的还是下面的一些回复,下面很多人问跟我的一样的问题,有个回复帮我解决了问题:大体意思是用上面的方法把记录找出来,select关键字是“special_price”,在记录里把“catalog/product_attribute_backend_startdate_specialprice”里的specialprice删掉(实际代码中确实也没有这个模块),之后刷新页面,问题解决了。

附上原来的地址,我描述不清楚的,请移步原文:http://www.learnmagento.org/magento-bug-fixes/invalid-backend-model-specified/

主要用处就是在Magento中获取指定分类下的产品。

$products = Mage::getModel('catalog/category')->load($category_id)
->getProductCollection()
->addAttributeToSelect('*')
->addAttributeToFilter('status', 1)
->addAttributeToFilter('visibility', 4);

loadByIncrementId(100000001);  // 100000001为订单编号

// 获取订单状态

$status = $order->getStatus();

$state  = $order->getState();

echo $status;

echo "\r\n";

echo $state;

// 设置订单状态 $order->setStatus(Mage_Sales_Model_Order::STATE_PROCESSING);

$order->save();

Magento订单 有两个状态变量:state和status,这让人困惑,只有测试下了,于是下了个单,然后在Magneto后台处理订单,得出下面的Magento订单状态值。

1. 新订单
state  : new
status : pending

2. 配送后
state  : processing
status : processing

3. 收款后
state  : processing
status : processing

4. 订单完成
state  : complete
status : complete

5. 订单取消
state  : canceled
status : canceled

6. 订单关闭
state  : closed
status : closed

7. 订单挂起
state  : holded
status : holded
Magento订单状态 是定义在Magento代码文件app\code\core\Mage\Sales\Model\Order.php中定义了订单的状态常量:

/**
 * Order model
 *
 * Supported events:
 *  sales_order_load_after
 *  sales_order_save_before
 *  sales_order_save_after
 *  sales_order_delete_before
 *  sales_order_delete_after
 *
 * @author Magento Core Team <[email protected]>
 */
 class Mage_Sales_Model_Order extends Mage_Sales_Model_Abstract
 {
/**
 * Order states
 */
 const STATE_NEW             = 'new';
 const STATE_PENDING_PAYMENT = 'pending_payment';
 const STATE_PROCESSING      = 'processing';
 const STATE_COMPLETE        = 'complete';
 const STATE_CLOSED          = 'closed';
 const STATE_CANCELED        = 'canceled';
 const STATE_HOLDED          = 'holded';
 const STATE_PAYMENT_REVIEW  = 'payment_review'; // added magento 1.4
/**
 * Order flags
 */
 const ACTION_FLAG_CANCEL    = 'cancel';
 const ACTION_FLAG_HOLD      = 'hold';
 const ACTION_FLAG_UNHOLD    = 'unhold';
 const ACTION_FLAG_EDIT      = 'edit';
 const ACTION_FLAG_CREDITMEMO= 'creditmemo';
 const ACTION_FLAG_INVOICE   = 'invoice';
 const ACTION_FLAG_REORDER   = 'reorder';
 const ACTION_FLAG_SHIP      = 'ship';
 const ACTION_FLAG_COMMENT   = 'comment';
// ...
 }
 </[email protected]>

 

其中,pending_payment, payment_review 是支付(Paypal, Amazon Pay)过程中引入的订单状态。