:::: MENU ::::
Browsing posts in: Magento 2

Magento 2 call a phtml file in static block

Today we talk about how to in Magento 2 call a phtml file in static block. Calling a phtml file is no different as compared to Magento 1 calling. But if you are calling it in cms block you have to use a class instead of type.

Calling a phtml file on the static block. Just add class and template path.

My current file location for the module is.

app/code/QaisarSatti/HelloWorld/Block/HelloWorld/view/frontend/templates/helloworld.phtml

{{block class="QaisarSatti\HelloWorld\Block\HelloWorld" template="QaisarSatti_HelloWorld::helloworld.phtml"}}

My current phtml location for the theme is.

app/design/frontend/QaisarSatti/helloworld/Magneto_Theme/templates/helloworld.phtml

{{block class="QaisarSatti\HelloWorld\Block\HelloWorld" template="helloworld.phtml"}}

If you want to add phtml with general magento class. Use following code.

{{block class="Magento\Framework\View\Element\Template" template="helloworld.phtml"}}
Author: Qaisar Satti
Category: Magento 2
Last Modified: November 28, 2019


Magento 2 logging

Today we will be talking about how to work with Magento 2 log. There is a different type of log you can log with Magento 2. For example debug log, information log, and other logs too. so let start with our log type.

A simple example of how to inject the logger class.

protected $logger;
public function __construct(\Psr\Log\LoggerInterface $logger)
{
    $this->logger = $logger;
}

Debug Log Method

$this->_logger->addDebug($message);

log location: var/log/system.log

Info Log Method

$this->_logger->addInfo($message);

log location: var/log/exception.log

Notice Log Method

$this->_logger->addNotice($message);

log location: var/log/exception.log

Error Log Method

$this->_logger->addError($message);

log location: var/log/exception.log

Critical or Exception Log Method

$this->_logger->critical($message);

log location: var/log/exception.log

Author: Qaisar Satti
Category: Magento 2
Last Modified: July 26, 2019


Assign custom theme programmatically to store in Magento 2

Today we discuss how to assign custom theme programmatically to store in Magento 2. Sometimes you need to set the theme programmatically. For that, you need theme_id and store_id. You can get theme_id from theme table.

use Magento\Framework\App\Config\ConfigResource\ConfigInterface;

/**
* @var ConfigInterface
*/

private $configInterface;
public function __construct(
ConfigInterface $configInterface
) {
$this->configInterface = $configInterface;
}

Following belowcode you can change theme programatically.

$this->configInterface->saveConfig('design/theme/theme_id', {{theme_id}}, 'stores', {{store_id}});

NOTE: change {{theme_id}} and {{store_id}} with your theme id and store id

Author: Qaisar Satti
Category: Magento 2
Last Modified: May 8, 2019


Magento 2 get current admin user detail

Today we talk about how in Magento 2 get current admin user detail?. in this tutorial we will cover how to get current admin username and current admin email and other information included as well. So let’s start with our code example.

protected $authSession;

public function __construct(
   
    \Magento\Backend\Model\Auth\Session $authSession,
   
) {
   
    $this->authSession = $authSession;
   
}

public function getCurrentUser()
{
    return $this->authSession->getUser();
}

Now you have access to current admin information. You can get information with the following code.

$this->getCurrentUser->getUsername(); //get admin user name

$this->getCurrentUser->getEmail();   //get current admin email
Author: Qaisar Satti
Category: Magento 2
Last Modified: February 27, 2019


Magento 2 Send Email Programmatically

This tutorial is about Magento 2 Send email programmatically,functionality of Magento 2.We will discuss how we can send email programmatically in Magento 2.People often ask whether Magento 2 have any built-in integration with third-party transaction email delivery systems like Amazon SES, Mandrill, etc., or is the built-in email functionality still based around PHP’s mail function? Or the emails sent with some third party software? Also, people ask are there any third party extensions like SMTP Pro for Magento 2 that would let a developer replace the standard email system?

Here we will discuss how it actually is done. After thorough research and digging of Magento 2 codebase for strings such as ’email’, ‘message’, etc until I found something that sends out an email. I stumbled upon sendPaymentFailedEmail() in

vendor/magento/module-checkout/Helper/Data.php

This sets a lot of variables but eventually ties them to a transport object, which is created through a ‘transportBuilder’. This transportBuilder is an instance of

\Magento\Framework\Mail\Template\TransportBuilder

In that file a

$transport

variable exists, which is an instance of

\Magento\Framework\Mail\TransportInterface

Because there is an interface,there is also a regular class called

\Magento\Framework\Mail\Transport

. When we open the file

vendor/magento/framework/Mail/Transport.php

we see that this extends

Zend_Mail_Transport_Sendmail

.

It actually look like this

class Transport extends \Zend_Mail_Transport_Sendmail implements \Magento\Framework\Mail\TransportInterface

So using DI, you’ll be able to replace this transport with another email framework instead of Zend_Mail, such as Mandrill or Amazon SES.

Just be sure to include the send() method since that is the method called in sendMessage().

public function sendMessage()
{
    try {
        parent::send($this->_message);
    } catch (\Exception $e) {
        throw new \Magento\Framework\Exception\MailException(new \Magento\Framework\Phrase($e->getMessage()), $e);
    }
}

Furthermore, there are assumptions about PHPs mail() being outdated and not supporting any 3rd party services.But it is not correct, as every good 3rd party service supports an SMTP interface, and so does mail() too.Also, Amazon SES does support SMTP.

Similarly, there is another simple and easy method to send the email. Magento 2 TransportBuilder uses email templates to compose email’s body. You can send plain text simply using – Zend1 mail

$email = new \Zend_Mail();
        $email->setSubject("Feedback email");
        $email->setBodyText($body);
        $email->setFrom($from, $nameFrom);
        $email->addTo($to, $nameTo);
        $email->send();

That’s it from this tutorial. I hope it serves the purpose. Since these are learning tutorials, please feel free to drop any suggestions or queries in the comments section. That will be highly appreciated surely.

Author: Qaisar Satti
Category: Magento 2
Last Modified: February 4, 2019


Magento 2 Create Yes No Attribute Programmatically

This tutorial is about Create Yes No Attribute Programmatically in Magento 2. Obviously, there are many ways and techniques of doing a task but if you are looking for a better and dynamic way then this tutorial may satisfy your needs. Creating Yes No attributes programmatically in Magento 2 is explained below. Let’s have a look at how we can do this.

Here I am creating the upgradeData script that will add custom product attribute with yes and no options.

<?php
 namespace QaisarSatti\HelloWorld\Setup;

 use Magento\Eav\Setup\EavSetup;
 use Magento\Eav\Setup\EavSetupFactory;
 use Magento\Framework\Setup\UpgradeDataInterface;
 use Magento\Framework\Setup\ModuleContextInterface;
 use Magento\Framework\Setup\ModuleDataSetupInterface;

class upgradeData implements UpgradeDataInterface {
 private $eavSetupFactory;
 protected $logger;

public function __construct(EavSetupFactory $eavSetupFactory,\Psr\Log\LoggerInterface $logger) {
 $this->eavSetupFactory = $eavSetupFactory;
 $this->logger = $logger;
 }

public function upgrade(ModuleDataSetupInterface $setup, ModuleContextInterface $context) {
 
 
 $eavSetup = $this->eavSetupFactory->create(['setup' => $setup]);
 $eavSetup->addAttribute(
 \Magento\Catalog\Model\Product::ENTITY,
 'subscripion_product',[
 'type' => 'text',
 'backend' => '',
 'frontend' => '',
 'label' => 'Enable Subscription',
 'input' => 'select',
 'class' => '',
 'source' => 'Magento\Eav\Model\Entity\Attribute\Source\Boolean',
 'global' => \Magento\Eav\Model\Entity\Attribute\ScopedAttributeInterface::SCOPE_GLOBAL,
 'visible' => true,
 'required' => true,
 'user_defined' => false,
 'default' => '',
 'searchable' => false,
 'filterable' => false,
 'comparable' => false,
 'visible_on_front' => false,
 'used_in_product_listing' => true,
 'unique' => false,
 'apply_to' => ''
 ]
 );
 
 
 }
 
 }

That’s it from this tutorial. I strongly believe there is always room for improvement. So I am open to any suggestion and feedback. Please feel free to leave hat you are thinking in the comments section below. Cheers.

Author: Qaisar Satti
Category: Magento 2
Last Modified: February 4, 2019


Get base url current url in Magento 2

This tutorial is about Get base URL,current URL in Magento 2 .i.e how to get base URL current URL in Magento 2. you can also get media url and any custom url following this example. And in this tutorial, I will try to explain it briefly and in a simple way. I will share the code snippet below.

Get base url and current url in Magento 2

First lets note down the steps.

Step 1: Declare in (your module name)_HelloWorld
Step 2: Get current URL and base URL in the template (.phtml) file

Moving forward let us explain these steps step by step.

Declare in (your module name)_HelloWorld

You will use a block class of the module (your module name)_HelloWorld, then possibly inject the object of StoreManagerInterface and UrlInterface in the constructor of the module’s block class. You will work with two functions in the below class: getStoreManagerData() and getUrlInterfaceData().

  • In getStoreManagerData() function, you will use object of StoreManagerInterface to get the base and current url.
  • In getUrlInterfaceData() function, you will use object of UrlInterface to get the base and current url
  • .

    Open app/code/QaisarSatti/HelloWorld/Block/HelloWorld.php class and run the code:

    <?php
    namespace QaisarSatti\HelloWorld\Block;
    class HelloWorld extends \Magento\Framework\View\Element\Template
    {
            protected $_storeManager;
            protected $_urlInterface;
     
        public function __construct(
            \Magento\Store\Model\StoreManagerInterface $storeManager,
            \Magento\Framework\UrlInterface $urlInterface,    
        )
        {        
            $this->_storeManager = $storeManager;
            $this->_urlInterface = $urlInterface;
        }
       
       
       
        /**
         * Printing URLs using StoreManagerInterface
         */

        public function getStoreManagerData()
        {    
            echo $this->_storeManager->getStore()->getId() . '<br />';
           
            // by default: URL_TYPE_LINK is returned
            echo $this->_storeManager->getStore()->getBaseUrl() . '<br />';        
           
            echo $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_WEB) . '<br />';
            echo $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_DIRECT_LINK) . '<br />';
            echo $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA) . '<br />';
            echo $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_STATIC) . '<br />';
           
            echo $this->_storeManager->getStore()->getUrl('product/33') . '<br />';
           
            echo $this->_storeManager->getStore()->getCurrentUrl(false) . '<br />';
               
            echo $this->_storeManager->getStore()->getBaseMediaDir() . '<br />';
               
            echo $this->_storeManager->getStore()->getBaseStaticDir() . '<br />';    
        }
       
        /**
         * Printing URLs using URLInterface
         */

        public function getUrlInterfaceData()
        {
            echo $this->_urlInterface->getCurrentUrl() . '<br />';
           
            echo $this->_urlInterface->getUrl() . '<br />';
           
            echo $this->_urlInterface->getUrl('helloworld/general/enabled') . '<br />';
           
            echo $this->_urlInterface->getBaseUrl() . '<br />';
        }  
    }
    ?>

    Step 2:

    Get base URL and current URL in the template file

    Use the following piece of code:

    <?php echo $block->getUrl('hello/test'); ?>
    <?php echo $block->getBaseUrl(); ?>

    Furthermore, that’s it from this tutorial. I hope it serves the purpose. Since these are learning tutorials, please feel free to drop any suggestions or queries in the comments section. That will definitely be highly appreciated.

    Author: Qaisar Satti
    Category: Magento 2
    Last Modified: February 4, 2019


    Pages:1234567...20