2012-10-09 46 views
3

我遇到了一些麻煩。我想要做的是在每次有人訂閱我們的通訊時,自動在Magento中生成一個隨機優惠券代碼。優惠券是10美元的任何東西,並將有一個exp。訂閱後兩週的日期。創建一個隨機Magento優惠券

因此,我試圖編寫一個簡單的腳本,當提交「訂閱我們的通訊」表單時,它將與Magento交談,詢問Magento單個隨機優惠券代碼,設置一些基本的價格規則10美元的折扣,每個顧客一次使用,每次使用一次,每隔兩週到期),然後返回一個隨機優惠券代碼(例如:WELCOME5​​798),該代碼可以存儲在一個變量中,並沿w/first +姓氏和通過MailChimp API發送給MailChimp的電子郵件。除了如何讓Mage通過PHP腳本生成這樣的代碼,然後返回所述代碼(即,我有我的表單並且我知道如何將值傳遞給MailChimp)之外,我想到了所有這些。

我是Magento的新手,所以我的經歷很艱難。我已經看到了Mage/SalesRule/Model/Coupon中的代碼,並且我看到了一些解決類似問題的人的例子,例如這裏:Magento - Create Unique Coupon Codes through code and mail it to the customer

但是我真的不知道從哪裏開始製作這項工作是爲了我自己的目的。可以直接使用一些幫助/設置。 :(謝謝鄉親。

回答

3

那麼,什麼是你的問題?如何爲您的要求生成優惠券?或者如何將它的模塊安排?

您可以使用事件newsletter_subscriber_save_after注入您的自定義操作的認購過程。

這裏是優惠券創作的一個例子根據您的需要

<?php 
/** 
* Create coupon for fixed price discount 
* 
* @param int $customer_id 
* @param float $discount 
*/ 
public function createCoupon($customer_id, $discount) 
{ 
    $customer = Mage::getModel('customer/customer')->load($customer_id); 

    $customerGroupIds = Mage::getModel('customer/group')->getCollection()->getAllIds(); 
    $websitesId = Mage::getModel('core/website')->getCollection()->getAllIds(); 

    $customer_name = $customer->getName(); 
    $couponCode = Mage::helper('core')->getRandomString(9); 

    $model = Mage::getModel('salesrule/rule'); 
    $model->setName('Discount for ' . $customer_name); 
    $model->setDescription('Discount for ' . $customer_name); 
    $model->setFromDate(date('Y-m-d')); 
    $model->setToDate(date('Y-m-d', strtotime('+2 days'))); 
    $model->setCouponType(2); 
    $model->setCouponCode($couponCode); 
    $model->setUsesPerCoupon(1); 
    $model->setUsesPerCustomer(1); 
    $model->setCustomerGroupIds($customerGroupIds); 
    $model->setIsActive(1); 
    $model->setConditionsSerialized('a:6:{s:4:\"type\";s:32:\"salesrule/rule_condition_combine\";s:9:\"attribute\";N;s:8:\"operator\";N;s:5:\"value\";s:1:\"1\";s:18:\"is_value_processed\";N;s:10:\"aggregator\";s:3:\"all\";}'); 
    $model->setActionsSerialized('a:6:{s:4:\"type\";s:40:\"salesrule/rule_condition_product_combine\";s:9:\"attribute\";N;s:8:\"operator\";N;s:5:\"value\";s:1:\"1\";s:18:\"is_value_processed\";N;s:10:\"aggregator\";s:3:\"all\";}'); 
    $model->setStopRulesProcessing(0); 
    $model->setIsAdvanced(1); 
    $model->setProductIds(''); 
    $model->setSortOrder(1); 
    $model->setSimpleAction('by_fixed'); 
    $model->setDiscountAmount($discount); 
    $model->setDiscountStep(0); 
    $model->setSimpleFreeShipping(0); 
    $model->setTimesUsed(0); 
    $model->setIsRss(0); 
    $model->setWebsiteIds($websitesId); 

    try { 
     $model->save(); 
    } catch (Exception $e) { 
     Mage::log($e->getMessage()); 
    } 
} 
+0

很抱歉。我想在那裏我開始有點卡住的困惑是,我並不需要收集來自任何客戶信息我們的Magento數據庫,因爲所有我們需要的客戶信息通過我們的表單直接發送到MailChimp。所有新訂戶都將收到優惠券,因此不需要指定客戶羣。感覺我對Magento仍然很不舒服,我正計劃嘗試快速和骯髒的路線,並且實際上使用永遠有用的'require_once('../ app/Mage.php')編寫腳本在法師之外運行;'' 。我可能過於複雜的事情。 – Kale

+0

我實際上只是試圖讓法師創建一個隨機優惠券(w /指定的價格規則),並將其發回給MailChimp API。也許我不能只是繞過將它添加到法師模塊(再次,這裏沒有經驗)。但感謝您的幫助/耐心Pavel,我會玩你提供的代碼!在我的示例中, – Kale

+0

$ customer_id僅用於生成優惠券說明。您可以將其刪除並將您自己的描述添加到setName()和setDescription()方法。再次返回到我的代碼中,您將優惠券代碼存儲在$ couponCode變量中,以便您可以將它傳遞給電子郵件模板 –