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 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 2 best seller product display based on current category and subcategories

Magento 2 getting best seller based on category wise displaying i have done below for that to implement this functionality it is working fine for me. step 1 create block file in our module folder <?php namespace Pawan\Bestseller\Block; use Magento\Catalog\Api\CategoryRepositoryInterface; class Bestsellercategory extends \Magento\Catalog\Block\Product\ListProduct {     /**      * Product collection model      *      * @var Magento\Catalog\Model\Resource\Product\Collection      */     protected $_collection;     /**      * Product collection model      *      * @var Magento\Catalog\Model\Resource\Product\Collection      */     protected $_productCollection;     /**      * Image helper      *      * @var Magento\Catalog\Helper\Image     ...

order cancel from front end

if you want cancel order from front end create module like this app/etc/modules/<Namespace_Modulename>.xml <config>     <modules>         <Namespace_CustomerOrderCancel>             <active>true</active>             <codePool>community</codePool>             <depends>                 <Mage_Sales />             </depends>         </ Namespace _CustomerOrderCancel>     </modules> </config> app/community/Namespace/Modulename           ------controllers           -------etc           -------Helper if you want cancel button in history page (myorder) need override block file Mage_Sales_Block_Orde...