2011-02-25 20 views
8

Estoy intentando escribir un módulo que sincronice mis suscriptores del boletín en Magento con una base de datos externa. Necesito poder actualizar el estado de la suscripción en Magento mediante programación, pero estoy teniendo dificultades para que funcione el método "setStatus" en Magento. No arroja ningún error, pero el código no parece tener ningún efecto. A continuación se muestra el código donde yo llamo el método:Establecer el estado del suscriptor en Magento programáticamente

$collection = Mage::getResourceModel('newsletter/subscriber_collection')->showStoreInfo()->showCustomerInfo(); 

foreach ($collection as $cust) { 
    $cust->setStatus(1); 
} 

En teoría, esto debería establecer el estado de todos mis suscriptores a "suscrito". Opcionalmente, podría cambiar el argumento enviado a "setStatus" a cualquiera de las siguientes instrucciones para un estado diferente.

1: Suscrito 2: El estado no activo 3: no suscribirse

Cualquier ideas sobre cómo cambiar el estado mejor suscriptor o obtener este código de trabajo?

¡Gracias de antemano!

Chuck

Respuesta

3

Gracias al enlace @Ozair compartido, pude averiguar lo que tenía que hacer.

Estaba configurando correctamente el estado del suscriptor en el objeto del suscriptor de Magento, pero no estaba guardando el objeto. Necesitaba llamar al método de guardar de Magento para llamar al ORM y escribirlo en la base de datos. Todo lo que necesito hacer es agregar

$cust->save(); 

en el bucle for. A continuación se muestra todo el fragmento de código.

$collection = Mage::getResourceModel('newsletter/subscriber_collection')->showStoreInfo()->showCustomerInfo(); 

foreach ($collection as $cust) { 
    $cust->setStatus(1); 
    $cust->save(); 
} 

Espero que esto ayude a alguien en el futuro. Lo necesitaba para un contacto constante - Magento extensión de sincronización que estaba haciendo: http://www.freelunchlabs.com/store/constant-contact-and-magento-sync.html

+0

Hola @Chuck D, esto es exactamente lo que necesito. ¿No terminaste de tener problemas con esto que afecta a cualquier otra cosa? Lo probé en mi local e hizo exactamente lo que dice que hace. – thismethod

+0

Hola @thismethod, No, no hay problemas. Si está usando extensiones de terceros como MailChimp o ConstantContact, generalmente tienen observadores para el evento de guardar suscriptor y sincronizarán el cambio con el tercero ... ¡ –

4

Parece que los suscriptores del boletín también se almacenan en otro lugar. Lo que está configurando es solo un control en la base de clientes para otro uso.

También debe hacer lo siguiente para cada cliente.

Mage::getModel('newsletter/subscriber')->subscribe($email); 

Ver en this enlace para una referencia completa.

+0

Gracias por la respuesta. El enlace que compartiste me indicó la dirección correcta. –

8

Aquí un script de importación:

<?php 
require_once("./app/Mage.php"); 
Mage::app(); 

$subscribers = array('[email protected]', '[email protected]'); 

foreach ($subscribers as $email) { 
    # create new subscriber without send an confirmation email 
    Mage::getModel('newsletter/subscriber')->setImportMode(true)->subscribe($email); 

    # get just generated subscriber 
    $subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email); 

    # change status to "subscribed" and save 
    $subscriber->setStatus(Mage_Newsletter_Model_Subscriber::STATUS_SUBSCRIBED); 
    $subscriber->save(); 
} 
?> 
+0

funciona para mí! gracias – Jaro

+0

Esto es exactamente lo que estaba buscando también. ¿Lo ejecuta a través del terminal o simplemente crea una página php y luego visita la página y se ejecutará? – thismethod

Cuestiones relacionadas