Skip to main content

Magento 2 Useful snippets for frontend developers

1 - Infos About Store
Get Current store Id :
inject \Magento\Store\Model\StoreManagerInterface $storeManage
 
$this->storeManager = $storeManager;
 
and get the id with :
 
$id = $this->storeManager->getStore()->getId();
 
get base Url :
 
$baseUrl = $this->storeManager->getStore()->getBaseUrl();
 
 you can inject \Magento\Framework\UrlInterface and use use constants of class as parameters (UrlInterface::URL_TYPE_LINK) :
 
    const URL_TYPE_LINK = 'link';
    const URL_TYPE_DIRECT_LINK = 'direct_link';
    const URL_TYPE_WEB = 'web';
    const URL_TYPE_MEDIA = 'media';
    const URL_TYPE_STATIC = 'static';
    const URL_TYPE_JS = 'js';
 
get base currency code  or (getBaseCurrency() , getDefaultCurrencyCode(), getDefaultCurrency()):
 
$baseCurrency = $this->storeManager->getStore()->getBaseCurrencyCode();
 
get current currency code or (getCurrentCurrency(), getAvailableCurrencyCodes(),getAllowedCurrencies()) :
 
$currentCurrency = $this->storeManager->getStore()->getCurrentCurrencyCode();
 
Retrieve base media directory path :
 
$baseMediaDir  = $this->storeManager->getStore()->getBaseMediaDir();
 
Retrieve base static directory path :
 
$baseStaticDir  = $this->storeManager->getStore()->getBaseStaticDir();
 
For other function like website_id , group_id, code name or secure test got to class Magento\Store\Model\Store and explore …

2 – Cart Data
inject Magento\Checkout\Model\Cart $cart
$this->cart = $cart;
 
get total number items:
 
$cartCount = $this->cart->getItemsCount();

 get quote data :
 
$cartQuote= $this->cart->getQuote()->getData();
print_r($cartQuote);
 
 

you cant get  [base_currency_code]  [store_currency_code]  [quote_currency_code]  [grand_total] or [base_grand_total] and many others see all details inside print_r
 
echo $cartQuote['base_grand_total'];
 
 
- iterate items of cart from session :
inject Magento\Checkout\Model\Session $session
$this->session  =  $session;
 
foreach ($this->session->getQuote()->getAllItems() as $item) {
    echo $item->getName();
}
 -clear quote
 
$this->session ->clearQuote();
 
 

 
3 - Catalog:
inject \Magento\Framework\Registry $registry
$this->registry = $registry;
get current category :
 
$category = $this->registry->registry('current_category');
 
get cuurent category id:
 
$cid = $this->registry->registry('current_category')->getId();
 
 

get current category level:
 
$level = $this->registry->registry('current_category')->getLevel();
 
-get current product :
 
$pid  =$this->registry->registry('current_product');
 
retrieve crosssell products from current product:
 
        $products = [];
        foreach ($this->registry->registry('current_product')->getCrossSellProducts() as $product) {
            $products[$product->getId()] = ['position' => $product->getPosition()];
        }
        print_r($products);
 
retrieve related products from current product:
 
        $products = [];
        foreach ($this->registry->registry('current_product')->getRelatedProducts() as $product) {
            $products[$product->getId()] = ['position' => $product->getPosition()];
        }
        print_r($products);
 
retrieve upsell products from current product:
 
        $products = [];
        foreach ($this->registry->registry('current_product')->getUpSellProducts() as $product) {
            $products[$product->getId()] = ['position' => $product->getPosition()];
        }
        print_r($products);
 
test if current product is registered:
 
            if ($this->registry->registry('current_product')) {
                $product = $this->registry->registry('current_product');
            } else {
                throw new \LogicException('Product is not defined');
            }
 
 
4 - CMS
inject \Magento\Framework\Registry $registry
$this->registry = $registry;
-get current cms page :
 
$page = $this->registry->registry('cms_page');
 

get id of current cms page:
 
$cmsId = $this->registry->registry('cms_page')->getId();
 
test if cms page exist in table :
 
        if ($this->registry->registry('cms_page')->getId()) {
            return $this->registry>registry('cms_page')->getTitle();
        } else {
            return __('New Page');
        }
 
5 - View
inside any block that extend \Magento\Framework\View\Element\Template you can use :
 
//getting assets elements url from your extension in current theme
$loader = $this->getViewFileUrl("ibnab_lazy::images/loader.svg");
//or getting from assets of current theme :
$js = $this->getViewFileUrl("js/my.js");
 

Comments

Popular posts from this blog

magento 1 extension converted in to magento 2 process

Simple Install =================================== Download as a zip below link. unzip and upload it to your public_html or other rootdoc directory. https://github.com/magento/code-migration. login to your server via shell switch to the code-migration-develop directory by running following command   cd code-migration-develop Run command following command in root directory of this toolkit composer instal Before running the migration, the following directories need to be prepared: ===================================== * `<src>` - Directory that contains custom Magento 1.x code that is intended to be migrated. The code must follow the Magento 1.x directory structure.   Magento1.x core files must not be included. * `<dst>` - Empty directory for the toolkit to put the generated Magento 2 code to * `<m1>` - Directory that contains: * Vanilla Magento 1.x codebase, and * Custom Magento 1.x code same as...

Magento 2 product collection Filtering multi-select attribute values

  If you have multi-select attribute of product like below If you want filter value for this option Use below syntax to get product data: ->addAttributeToFilter('store_model', array('finset' => $params['store_model'])) finset key is used for multiselect attribute filter. $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); $products = $objectManager->get('Magento\Catalog\Model\Product')         ->getCollection()         ->addAttributeToSelect('*')         ->addAttributeToSelect('store_brand')         ->addAttributeToSelect('store_model')         ->addAttributeToSelect('store_year')         ->addAttributeToFilter('store_brand', array('finset' => $params['store_brand']))         ->addAttributeToFilter('store_model', array('finset' => $params['store_model']))         ->ad...

Magento Debug HEADERS ALREADY SENT error

When you  receiving the following error in  system.log file: app\code\core\Mage\Core\Controller\Response\Http.php:44  [1] \www.pawan.com\lib\Zend\Controller\Response\Abstract.php:727  [2]  \www.pawan.com\app\code\core\Mage\Core\Controller\Response\Http.php:75  [3]  \www.pawan.com\app\code\core\Mage\Core\Controller\Varien\Front.php:188  [4]  \www.pawan.com\app\code\core\Mage\Core\Model\App.php:304  [5]  \www.pawan.com\app\Mage.php:596  [6]  \www.pawan.com\index.php:81 if you have no idea what file is causing this. Here is the steps to debug. That error is thrown from Mage_Core_Controller_Response_Http -> sendHeaders(). This function calls the super class function that actually does the check to see whether or not headers have already been sent, Zend_Controller_Response_Abstract -> canSendHeaders(). The Zend_Controller_Response_Abstract class handles, among other things, sending response header...