2

I am absolutely new in magento. I have made new input called 'name' under email input in

app/design/frontend/NewVendor/NewTheme/Magento_Newsletter/templates/subscribe.phtml

<div class="block newsletter">
<div class="title"><strong><?= $block->escapeHtml(__('Newsletter')) ?></strong></div>
<div class="content">
 <form class="form subscribe"
 novalidate
 action="<?= $block->escapeUrl($block->getFormActionUrl()) ?>"
 method="post"
 data-mage-init='{"validation": {"errorClass": "mage-error"}}'
 id="newsletter-validate-detail">
 <div class="field newsletter">
 <label class="label" for="newsletter"><span><?= $block->escapeHtml(__('Sign Up for Our Newsletter:')) ?></span></label>
 <div class="control">
 <input name="email" type="email" id="newsletter"
 placeholder="<?= $block->escapeHtml(__('Enter your email address')) ?>"
 data-mage-init='{"mage/trim-input":{}}'
 data-validate="{required:true, 'validate-email':true}"/>
 <input name="name" placeholder="Name"/>
 </div>
 </div>
 <div class="actions">
 <button class="action subscribe primary" title="<?= $block->escapeHtmlAttr(__('Subscribe')) ?>" type="submit">
 <span><?= $block->escapeHtml(__('Subscribe')) ?></span>
 </button>
 </div>
 </form>
</div>

I have made a new column in newsletter_subscriber table in

app/code/Mag/Newsletter/Setup/UpgradeSchema.php

class UpgradeSchema implements UpgradeSchemaInterface

{

public function upgrade(SchemaSetupInterface $setup, ModuleContextInterface $context)
{
 $setup->startSetup();
 if (version_compare($context->getVersion(), '0.0.2', '<')) {
 $setup->getConnection()->addColumn(
 $setup->getTable('newsletter_subscriber'),
 'name',
 [
 'type' => \Magento\Framework\DB\Ddl\Table::TYPE_TEXT,
 'length' => 50,
 'nullable' => false,
 'default' => '',
 'comment' => 'Name'
 ]
 );
 }
 $setup->endSetup();
}

}

And this is my controller in

app/code/Mag/Newsletter/Controller/Subscriber/NewAction.php

<?php
namespace Magebit\Newsletter\Controller\Subscriber;
class NewAction extends 
\Magento\Newsletter\Controller\Subscriber\NewAction
{
 public function execute() {
 $name = $this->getRequest()->getPost();
 var_dump($name);exit;
 }
}

For now controller var_dump's input value.

What I want to achieve is to save input value into "name" column in 'newsletter_subscriber' table.

Can't get it right. What should I do next?

Muhammad Hasham
8,75211 gold badges53 silver badges105 bronze badges
asked Feb 16, 2019 at 11:28
3
  • It might be usefull to set the new field as nullable if you have old data in your table. With a nullable field the proposed first approach would work. With a not nullable field please use the second approach in my answer and implement the subscribe($email, $name) method. Please let me know if this works for you or if you need further help Commented Feb 16, 2019 at 19:08
  • Yes, thank you, it helped! I am pretty sure, that I will have a lot of questions in nearest future! Commented Feb 17, 2019 at 9:57
  • magento.stackexchange.com/questions/344840/… please see the my question and help me if u can plaese Commented Aug 20, 2021 at 4:16

1 Answer 1

0

If you want to implement the logic in your controller, you have to copy the execute() method from the original, inherited controller and load the subscriber object after it was created, add your attribute and save the object. For this you have to add the following lines right after the subscribe() method has been called:

$status = (int) $this->_subscriberFactory->create()->subscribe($email);
//your code starts here...
$newSubscriber = $this->_subscriberFactory->create()->loadByEmail($email);
$newSubscriber->setName($name);
$newSubscriber->save();

I hope that helps. Anyway there are other possibilities to do this, for example creating a new method subscribe($email, $name) in the subscriber object and call that from your controller. With that approach you don't need to load the subscriber in the controller after creation, but you have to overwrite the subscriber model.

answered Feb 16, 2019 at 12:13

Your Answer

Draft saved
Draft discarded

Sign up or log in

Sign up using Google
Sign up using Email and Password

Post as a guest

Required, but never shown

Post as a guest

Required, but never shown

By clicking "Post Your Answer", you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.