:::: MENU ::::

Magento 2 get product collection

Today we talk about Magento 2 get product collection. First we need to familiar with model collection structure of magento 2. Magento 2 use the collection class for get all record from database table. SO let start with coding. We are using the Factory method here.

protected $_productCollectionFactory;

public function __construct(
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productFactory
    ) {
        $this->_productCollectionFactory = $productFactory;
    }
    public function getProductCollection()
    {
      return   $this->_productCollectionFactory->create()->addAttributeToSelect('*');
     
     }

To Fetch Data in phtml file

$productCollection = $block->getProductCollection();

foreach ($productCollection as $product) {

   
        echo $product->getName().'<br />';

}
Author: Qaisar Satti
Category: Magento 2
Last Modified: April 2, 2018


Magento 2 get product categories

In our daily coding routine you have to work with product and category. So today we learn how to get Magento 2 product categories from product object.You can always get the assigned categories of a product using following code.
In Constructor:

protected $_productFactory;
public function __construct(
        \Magento\Catalog\Model\ProductFactory $productFactory
    ) {
        $this->_productFactory = $productFactory;
    }
    public function getProductCategories()
    {
      $product = $this->_productFactory->create()->load($pid); // $pid = Product_ID

      return  $product->getCategoryIds();
     }

Now we get all categories from product collection.

protected $_productCollectionFactory;
protected $_productloader;
public function __construct(
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productFactory,
         \Magento\Catalog\Model\ProductFactory $productloader
    ) {
        $this->_productCollectionFactory = $productFactory;
        $this->_productloader = $productloader;
    }
    public function getProductCollectionCategories()
    {
      $prodIds= $this->_productCollectionFactory->create(); // $pid = Product_ID
      foreach($prodIds as $pid){          
         $product = $this->_productloader->create()->load($pid);  
         $proCats = $product->getCategoryIds();    
         $catIds= array_merge($catIds, $pproCats);  
       }
      $finalCat = array_unique($catIds);
      return  $finalCat;
     }
Author: Qaisar Satti
Category: Magento 2
Last Modified: December 15, 2017


Magento 2 custom image resize

Today we talk about how to resize image in custom module. So let start talk about it with some background classes that are use to resize the image. In framework we use classes of Filesystem and Image\AdapterFactory. So here we go First we create the method resize in your block or you can create method in helper. In my example i am creating in my block.

   protected $_filesystem ;
   protected $_imageFactory;
   public function __construct(            
        \Magento\Framework\Filesystem $filesystem,        
        \Magento\Framework\Image\AdapterFactory $imageFactory        
        ) {        
        $this->_filesystem = $filesystem;              
        $this->_imageFactory = $imageFactory;        
        }

    // pass image Name, width and height
    public function resize($image, $width = null, $height = null)
    {
        $absolutePath = $this->_filesystem->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA)->getAbsolutePath('helloworld/images/').$image; //complete path of image

        $imageResized = $this->_filesystem->getDirectoryRead(\Magento\Framework\App\Filesystem\DirectoryList::MEDIA)->getAbsolutePath('resized/'.$width.'/').$image;        
        //create image factory...
        $imageResize = $this->_imageFactory->create();        
        $imageResize->open($absolutePath);
        $imageResize->constrainOnly(TRUE);        
        $imageResize->keepTransparency(TRUE);        
        $imageResize->keepFrame(FALSE);        
        $imageResize->keepAspectRatio(TRUE);        
        $imageResize->resize($width,$height);  
        //destination folder                
        $destination = $imageResized ;    
        //save image      
        $imageResize->save($destination);        

        $resizedURL = $this->_storeManager->getStore()->getBaseUrl(\Magento\Framework\UrlInterface::URL_TYPE_MEDIA).'resized/'.$width.'/'.$image;
        return $resizedURL;
     }

Now we call our block method in our phtml.

$block->resize('test.jpg',500,400);
Author: Qaisar Satti
Category: Magento 2
Last Modified: December 15, 2017


Magento 2 available commands

Available commands:

help         Displays help for a command
list         Lists commands

admin

admin:user:create         Creates an administrator
admin:user:unlock         Unlock Admin Account

cache

cache:clean         Cleans cache type(s)
cache:disable         Disables cache type(s)
cache:enable         Enables cache type(s)
cache:flush         Flushes cache storage used by cache type(s)
cache:status         Checks cache status

catalog

catalog:images:resize         Creates resized product images
catalog:product:attributes:cleanup         Removes unused product attributes.

cron

cron:run         Runs jobs by schedule

customer

customer:hash:upgrade         Upgrade customer’s hash according to the latest algorithm

deploy

deploy:mode:set         Set application mode.
deploy:mode:show         Displays current application mode.

dev

dev:source-theme:deploy         Collects and publishes source files for theme.
dev:tests:run         Runs tests
dev:urn-catalog:generate         Generates the catalog of URNs to *.xsd mappings for the IDE to highlight xml.
dev:xml:convert         Converts XML file using XSL style sheets

i18n

i18n:collect-phrases         Discovers phrases in the codebase
i18n:pack         Saves language package
i18n:uninstall         Uninstalls language packages

indexer

indexer:info         Shows allowed Indexers
indexer:reindex         Reindexes Data
indexer:reset         Resets indexer status to invalid
indexer:set-mode         Sets index mode type
indexer:show-mode         Shows Index Mode
indexer:status         Shows status of Indexer

info

info:adminuri         Displays the Magento Admin URI
info:backups:list         Prints list of available backup files
info:currency:list         Displays the list of available currencies
info:dependencies:show-framework         Shows number of dependencies on Magento framework
info:dependencies:show-modules         Shows number of dependencies between modules
info:dependencies:show-modules-circular         Shows number of circular dependencies between modules
info:language:list         Displays the list of available language locales
info:timezone:list         Displays the list of available timezones

maintenance

maintenance:allow-ips         Sets maintenance mode exempt IPs
maintenance:disable         Disables maintenance mode
maintenance:enable         Enables maintenance mode
maintenance:status         Displays maintenance mode status

module

module:disable         Disables specified modules
module:enable         Enables specified modules
module:status         Displays status of modules
module:uninstall         Uninstalls modules installed by composer

sampledata

sampledata:deploy         Deploy sample data modules
sampledata:remove         Remove all sample data packages from composer.json
sampledata:reset         Reset all sample data modules for re-installation

setup

setup:backup         Takes backup of Magento Application code base, media and database
setup:config:set         Creates or modifies the deployment configuration
setup:cron:run         Runs cron job scheduled for setup application
setup:db-data:upgrade         Installs and upgrades data in the DB
setup:db-schema:upgrade         Installs and upgrades the DB schema
setup:db:status         Checks if DB schema or data requires upgrade
setup:di:compile         Generates DI configuration and all missing classes that can be auto-generated
setup:install         Installs the Magento application
setup:performance:generate-fixtures         Generates fixtures
setup:rollback         Rolls back Magento Application codebase, media and database
setup:static-content:deploy         Deploys static view files
setup:store-config:set         Installs the store configuration
setup:uninstall         Uninstalls the Magento application
setup:upgrade         Upgrades the Magento application, DB data, and schema

theme

theme:uninstall         Uninstalls theme

Author: Qaisar Satti
Category: Magento 2
Last Modified: December 15, 2017


Magento 2 call a static block

Today we learn about how to call a static block from phtm fiile,cms page and layout (xml) file. First you have to create a static block from admin panel, go to menu Content , choose Blocks and Click Add New Block button from top right. Every static block have identifier that are unique. You can call static block by identifier. For example our identifier is QaisarSattiTest.Now we use this identifier in phtml file, layout file and cam page.

Phtml:

echo $this->getLayout()->createBlock('Magento\Cms\Block\Block')->setBlockId(QaisarSattiTest)->toHtml();

Layout (xml):

<block class="Magento\Cms\Block\Block" name="footersocial" before="-">                     
      <arguments>
            <argument name="block_id" xsi:type="string">QaisarSattiTest</arguments>
      </arguments>
 </block>

CMS Page:

{{block  id="QaisarSattiTest"}}
Author: Qaisar Satti
Category: Magento 2
Last Modified: December 15, 2017


Magento 2 Call phtml file in other phtml file or on cms page

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

Phtml:

First we call in phtml file. It is simple just use below code put it in phtml file and add your block class name and phtml file according your module directory.

<?php
echo $this->getLayout()->createBlock("QaisarSatti\HelloWorld\Block\HelloWorld")->setTemplate("QaisarSatti_HelloWorld::helloworld.phtml")->toHtml();
?>

CMS Page:

Calling a phtml file on cms page. Just add class and phtml file path like below example.

{{block class="QaisarSatti\HelloWorld\Block\HelloWorld" template="QaisarSatti_HelloWorld::helloworld.phtml"}}
Author: Qaisar Satti
Category: Magento 2
Last Modified: December 20, 2017


Magento 2 Move remove block layout

Today we talk about how in Magento 2 move remove block layout. This tutorial includes how to remove block, how to move container and how to remove container.You can move block from one container to another but using the move handle. Same as you can remove any block with remove handle. First we will show the example how we remove the breadcrumbs block. Use the handle of referenceBlock and add the name reference you want to remove. You can check the layout files where the breadcrumbs block is define.

Remove Block

Now we add example code in our default.xml or you want to remove for any specific page block then add his layout file. Now you can remove breadcrumbs by simply adding this code.

<?xml version="1.0"?>
<!--/**
    * Simple Hello World Module
    *
    * @category    QaisarSatti
    * @package     QaisarSatti_HelloWorld
    * @author      Muhammad Qaisar Satti
    * @Email       [email protected]
    *
    */ -->
    <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
        <body>
            <referenceBlock name="breadcrumbs" remove="true"/>
        </body>
    </page>

You can use this example to remove any block.

Remove Container

Now we add example code in our default.xml or you want to remove for any specific page container then add his layout file. Now you can remove page.top by simply adding this code.

<?xml version="1.0"?>
<!--/**
    * Simple Hello World Module
    *
    * @category    QaisarSatti
    * @package     QaisarSatti_HelloWorld
    * @author      Muhammad Qaisar Satti
    * @Email       [email protected]
    *
    */ -->
    <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
        <body>
            <referenceContainer name="page.top" remove="true"/>
        </body>
    </page>

You can use this example to remove any block.

Move Block

For moving the block from one container to another. Just add element Name in my example i am moving the page.top block to store.menu.container. Now below is example code.

<?xml version="1.0"?>
<!--/**
    * Simple Hello World Module
    *
    * @category    QaisarSatti
    * @package     QaisarSatti_HelloWorld
    * @author      Muhammad Qaisar Satti
    * @Email       [email protected]
    *
    */ -->
    <page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" layout="1column" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
        <body>
            <move element="page.top" destination="store.menu.container" before="-" />
        </body>
    </page>

You can use this example to move any block

Author: Qaisar Satti
Category: Magento 2
Last Modified: March 6, 2018