เพิ่มช่องทำเครื่องหมายจดหมายข่าวในแบบฟอร์มการเรียกเก็บเงิน


11

ฉันต้องการที่จะเพิ่มจดหมายข่าวช่องทำเครื่องหมายในแบบฟอร์มการเรียกเก็บเงินเมื่อผู้ใช้เลือกที่จะลงทะเบียนโดยตรงในกระบวนการเช็คเอาต์ .. ฉันจะทำอย่างไร


2
คุณมีแผนที่จะใช้ MailChimp ตามความต้องการในการส่งจดหมายข่าวหรือไม่? ส่วนขยาย MageMonkey โดย ezbizmarts มีตัวเลือกการกำหนดค่าเพื่อเพิ่มการลงทะเบียนจดหมายข่าวในกระบวนการชำระเงิน
Darren Felton

คำตอบ:


15

สวัสดีคุณสามารถเพิ่มได้โดยเพิ่มรหัสด้านล่างที่ billing.phtml

 <input type="checkbox" name="is_subscribed" 
  title="<?php echo $this->__('Sign Up for Newsletter') ?>" value="1"  checked="checked" class="checkbox" />

ใช้เหตุการณ์checkout_submit_all_afterสมัครสมาชิกลูกค้าเพื่อรับจดหมายข่าว

  <global>
 <events>
    <checkout_submit_all_after> <!-- identifier of the event we want to catch -->
        <observers>
          <checkout_submit_all_after_handler> <!-- identifier of the event handler -->
            <type>singleton</type> <!-- class method call type; valid are model, object and singleton -->
            <class>magento52274/observer</class> <!-- observers class alias -->
            <method>AssignNewletter</method>  <!-- observer's method to be called -->
            <args></args> <!-- additional arguments passed to observer -->
          </checkout_submit_all_after_handler>
        </observers>
      </checkout_submit_all_after>
    </events>
  </global>

และรหัสผู้สังเกตคือ:

   public function AssignNewletter($observer) {
            $event = $observer->getEvent();
            $order = $event->getOrder();
        $Quote =$event->getQuote();
        if (in_array($Quote()->getCheckoutMethod(), array('register','customer'))):

        if (Mage::app()->getFrontController()->getRequest()->getParam('is_subscribed')){
        $status = Mage::getModel('newsletter/subscriber')->subscribe($Quote->getBillingAddress()->getCustomerEmail());
        }
        endif;
   }

โมดูลเต็ม:

ขั้นที่ 1:สร้าง config.xml ที่app/code/local/Stackexchange/Magento52274/etc/และรหัสคือ

<?xml version="1.0"?>
<config>
  <modules>
    <Stackexchange_Magento52274>
      <version>1.0.0</version>
    </Stackexchange_Magento52274>
  </modules>
  <global>
    <models>
      <magento52274>
        <class>Stackexchange_Magento52274_Model</class>
      </magento52274>
    </models>
    <events>
      <checkout_submit_all_after> <!-- identifier of the event we want to catch -->
        <observers>
          <checkout_submit_all_after_handler> <!-- identifier of the event handler -->
            <type>singleton</type> <!-- class method call type; valid are model, object and singleton -->
            <class>magento52274/observer</class> <!-- observers class alias -->
            <method>AssignNewletter</method>  <!-- observer's method to be called -->
          </checkout_submit_all_after_handler>
        </observers>
      </checkout_submit_all_after>
    </events>
  </global>
</config> 

ขั้นตอนที่ 2:สร้างObserver.phpที่app/code/local/Stackexchange/Magento52274/Model/และรหัสคือ

<?php
class Stackexchange_Magento52274_Model_Observer
{

    public function AssignNewletter(Varien_Event_Observer $observer)
    {
    $event = $observer->getEvent();
            $order = $event->getOrder();
        $Quote =$event->getQuote();
        if (in_array($Quote()->getCheckoutMethod(), array('register','customer'))):

            if Mage::app()->getFrontController()->getParam('is_subscribed', false)){
        $status = Mage::getModel('newsletter/subscriber')->subscribe($Quote->getBillingAddress()->getEmail());
         }
        endif;
    }

}

ขั้นตอนที่ 3:สร้างโมดูล app/etc/modules/Stackexchange_Magento52274.xmlและรหัสคือ

<?xml version="1.0"?>
<config>
  <modules>
    <Stackexchange_Magento52274>
      <active>true</active>
      <codePool>local</codePool>
      <version>1.0.0</version>
    </Stackexchange_Magento52274>
  </modules>
</config>

ขั้นที่ 4:และยังจำเป็นต้องเพิ่มเขตข้อมูลจดหมายข่าวที่billing.phtml

<input type="checkbox" name="is_subscribed" 
  title="<?php echo $this->__('Sign Up for Newsletter') ?>" value="1"  checked="checked" class="checkbox" />

2
นี่อาจใช้การทำความสะอาดเพียงเล็กน้อย - อย่างน้อยที่สุดโค้ดบางส่วนใน "Full Module" ไม่ตรงกับรหัสก่อนหน้าในคำตอบ
Mike

2
ดีแค่นั้น -> getBillingAddress () -> getEmail () ไม่ได้รับอีเมลเสมอไปโดยเฉพาะเมื่อมีอีเมล paypal ที่เกี่ยวข้อง getCustomerEmail ปลอดภัยยิ่งขึ้น
Claudiu Creanga

โปรดไม่สนใจคำตอบนี้ ฉันไม่รู้ว่านี่จะทำให้ upvotes มากมายได้อย่างไร มันจะไม่ทำงาน! คุณไม่สามารถเข้าถึงเขตข้อมูลฟอร์มการเรียกเก็บเงินในcheckout_submit_all_afterผู้สังเกตการณ์ได้ โปรดดูการใช้งานนี้: magento.stackexchange.com/questions/219460/…
Michael Thessel
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.