Не сохраняется ли метка времени, когда кто-то подписывается на рассылку новостей?


В таблице newsletter_subscriber есть поле change_status_at, которое является TIMESTAMP. Однако, похоже, он не заполняется при подписке на рассылку новостей или даже при изменении статуса подписки.

Author: kalenjordan, 2015-02-18

1 answers

Похоже, что поле change_status_at предназначено для хранения последней даты подписки/отмены подписки. Однако это поле никогда не используется и не обновляется в Magento. (Возможно, ошибка в Magento).

Если вы проверите ядро, вы можете узнать, что это поле используется для отображения в разделе "Рассылка новостей для клиентов" (в разделе "Администратор" в разделе Customer > Manage Customer). Однако, поскольку это поле никогда не обновляется при обработке подписки в Magento, приведенный ниже раздел никогда не отображается в клиенте раздел.

#Mage_Adminhtml_Block_Customer_Edit_Tab_Newsletter::initForm()

if($changedDate = $this->getStatusChangedDate()) {
     $fieldset->addField('change_status_date', 'label',
         array(
                'label' => $subscriber->isSubscribed() ? Mage::helper('customer')->__('Last Date Subscribed') : Mage::helper('customer')->__('Last Date Unsubscribed'),
                'value' => $changedDate,
                'bold'  => true
         )
    );
}

И Mage_Adminhtml_Block_Customer_Edit_Tab_Newsletter::getStatusChangedDate() выглядит так.

public function getStatusChangedDate()
{
    $subscriber = Mage::registry('subscriber');
    if($subscriber->getChangeStatusAt()) {
        return $this->formatDate(
            $subscriber->getChangeStatusAt(),
            Mage_Core_Model_Locale::FORMAT_TYPE_MEDIUM, true
        );
    }

    return null;
}

Здесь $subscriber->getChangeStatusAt() всегда возвращайте null для каждого клиента. Следовательно, условие не выполняется, и метод возвращает значение null. Таким образом, поле для отображения Last Date of subscription/Unsubscription никогда не отображается.

Однако вы можете использовать преимущество этого поля, добавив простую строку кода внутри Mage_Newsletter_Model_Subscriber::subscribe(). Вы просто хотите сделать это до того, как будет выполнено действие $this->save().

#Mage_Newsletter_Model_Subscriber::subscribe(), before save() action
$this->setChangeStatusAt(date('Y-m-d'));
 4
Author: Rajeev K Tomy, 2018-05-29 12:48:32