Como adicionar um novo campo na Newsletter do Magento.

A primeira  coisa a se fazer, é adicionar um novo campo na tabela newsletter_subscriber, adicione um campo com nome de name , tipo VARCHAR 80.

Agora vamos trabalhar na pasta local (app/code/local), iremos copiar os arquivos que vamos modificar. É indicado fazer dessa forma, porque você preserva o arquivo original, e caso faça upgrade, não perca a modificação feita.

Copie esse arquivo:

/app/code/core/Mage/Adminhtml/Block/Newsletter/Subscriber/Grid.php

E adicione em:

/app/code/local/Mage/Adminhtml/Block/Newsletter/Subscriber/Grid.php

Caso as pastas não existirem dentro de local, é necessário criá-las, com mesma estrutura.

Vamos agora adicionar esse novo campo pra exibir no admin.

Nesse arquivo copiado (Grid.php), dentro do método  _prepareColumns(), adicione depois desse código:


$this->addColumn('subscriber_id', array(
'header'    => Mage::helper('newsletter')->__('ID'),
'index'     => 'subscriber_id'
));

Adicione esse código:


$this->addColumn('name', array(
'header'    => Mage::helper('newsletter')->__('Name'),
'index'     => ‘name’,
'default'   =>    '----'
));

Agora faremos o mesmo procedimento  em outro arquivo, para modificá-lo , copie :

/app/code/core/Mage/Newsletter/controllers/ SubscriberController.php

Para

/app/code/local/Mage/ Newsletter/controllers/ SubscriberController.php

Nesse arquivo, que copiamos, no método newAction(), procure por esse código:


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

Após desse código, adicione:

  if ($this->getRequest()->getPost('name'))
  {
      $subscriber = Mage::getModel('newsletter/subscriber')->loadByEmail($email);
      $name     = (string) $this->getRequest()->getPost('name');
      $subscriber->setName($name);
      $subscriber->save();
 }

Agora vamos modificar o template pra adicionar o novo campo.

Verifique se existe esse arquivo no seu tema:

/app/design/frontend/default/_SEU_TEMA_/template/newsletter/subscribe.phtml

Se não existir, copie da pasta base:

/app/design/frontend/base/default/template/newsletter/subscribe.phtml

Para

/app/design/frontend/default/_SEU_TEMA_/template/newsletter/ subscribe.phtml

Antes desse código:


<div class="input-box">
 <input type="text" name="email" id="newsletter" title="<?php echo $this->__('Sign up for our newsletter') ?>" class="input-text required-entry validate-email" />
 </div>

Você irá adicionar:

<div class="input-box">

<input type="text" name="name" id="name" title="<?php echo $this->__('Name') ?>" class="input-text required-entry " />

</div>

Você modificar, de outra forma, adicionando label, ficando assim:


<div class="block block-subscribe">
 <div class="block-title">
 <strong><span><?php echo $this->__('Newsletter') ?></span></strong>
 </div>
 <form action="<?php echo $this->getFormActionUrl() ?>" method="post" id="newsletter-validate-detail">
 <div class="block-content">
 <div class="form-subscribe-header">
 <label for="newsletter"><?php echo $this->__('Sign Up for Our Newsletter:') ?></label>
 </div>
 <div class="input-box">
 <label for="name"><?php echo $this->__('Name') ?></label>
 <input type="text" name="name" id="name" title="<?php echo $this->__('name') ?>" class="input-text required-entry" />
 </div>
 <div class="input-box">
 <label for="newsletter"><?php echo $this->__('Email') ?></label>
 <input type="text" name="email" id="newsletter" title="<?php echo $this->__('Sign up for our newsletter') ?>" class="input-text required-entry validate-email" />
 </div>
 <div class="actions">
 <button type="submit" title="<?php echo $this->__('Subscribe') ?>" class="button"><span><span><?php echo $this->__('Subscribe') ?></span></span></button>
 </div>
 </div>
 </form>
 <script type="text/javascript">
 //<![CDATA[
 var newsletterSubscriberFormDetail = new VarienForm('newsletter-validate-detail');
 //]]>
 </script>
</div>

Agora, acesse o admin do magento, e limpe o cache.




Se o conteúdo foi relevante para você, e desejar, você pode incentivar fazendo uma doação.

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *