Magento 2 Real-World Projects

🚀 Magento 2 Real-World Projects – Building Practical Magento Solutions

It’s time to take your Magento 2 skills to the next level! In this tutorial, we’ll build practical projects that showcase how to implement real-world Magento solutions. Whether you’re creating custom modules, integrating third-party APIs, or optimizing the checkout process, these projects will prepare you for the real challenges of Magento development.

🛠️ Project 1: Custom Product Import Module

Let’s build a custom product import module to handle bulk product uploads. This is a common scenario in Magento for large stores that need to import products in bulk from external sources like CSV or XML files.

// app/code/[Vendor]/ProductImport/Controller/Index/Import.php

namespace [Vendor]\ProductImport\Controller\Index;

use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Catalog\Model\ProductFactory;
use Magento\Framework\File\Csv;

class Import extends Action
{
    protected $productFactory;
    protected $csv;

    public function __construct(Context $context, ProductFactory $productFactory, Csv $csv)
    {
        parent::__construct($context);
        $this->productFactory = $productFactory;
        $this->csv = $csv;
    }

    public function execute()
    {
        $data = $this->csv->getData('path_to_file.csv');
        foreach ($data as $row) {
            $product = $this->productFactory->create();
            $product->setSku($row[0])
                    ->setName($row[1])
                    ->setPrice($row[2])
                    ->setTypeId('simple')
                    ->save();
        }
        echo "Products Imported!";
    }
}

Try It Now

🛠️ Project 2: Custom Payment Gateway Integration

Next, we’ll integrate a custom payment gateway into Magento 2. This involves creating a payment method, setting up configuration options, and processing transactions securely.

// app/code/[Vendor]/CustomPayment/Model/Method/CustomPayment.php

namespace [Vendor]\CustomPayment\Model\Method;

use Magento\Payment\Model\Method\AbstractMethod;
use Magento\Payment\Model\Method\Transaction;

class CustomPayment extends AbstractMethod
{
    protected $_code = 'custompayment';

    public function authorize(InfoInterface $payment, $amount)
    {
        // Custom payment gateway authorization logic here
        return $this;
    }

    public function capture(InfoInterface $payment, $amount)
    {
        // Custom payment gateway capture logic here
        return $this;
    }
}

Try It Now

🛠️ Project 3: Integrating Third-Party Shipping Provider

In this project, we’ll integrate a third-party shipping provider’s API to get real-time shipping rates. This is often required to provide accurate shipping options during checkout.

// app/code/[Vendor]/ShippingProvider/Model/Carrier/Shipping.php

namespace [Vendor]\ShippingProvider\Model\Carrier;

use Magento\Shipping\Model\Carrier\AbstractCarrier;
use Magento\Shipping\Model\Carrier\CarrierInterface;
use Magento\Framework\DataObject;

class Shipping extends AbstractCarrier implements CarrierInterface
{
    protected $_code = 'shippingprovider';

    public function collectRates(DataObject $request)
    {
        // Call third-party shipping provider API for rates
        $shippingRate = $this->getShippingRateFromProvider($request);

        $result = $this->_rateResultFactory->create();
        $method = $this->_rateMethodFactory->create();
        $method->setCarrier('shippingprovider')
               ->setMethod('standard')
               ->setPrice($shippingRate)
               ->setMethodTitle('Standard Shipping');
        $result->append($method);

        return $result;
    }

    private function getShippingRateFromProvider(DataObject $request)
    {
        // Logic to call API and get rate
        return 10.00; // Placeholder rate
    }
}

Try It Now

🛠️ Project 4: Custom Product Review Feature

We’ll create a custom product review feature that allows customers to leave reviews with image uploads. This feature is great for stores selling products where visuals are important, such as clothing or electronics.

// app/code/[Vendor]/CustomReviews/Controller/Index/Submit.php

namespace [Vendor]\CustomReviews\Controller\Index;

use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Catalog\Model\ProductFactory;
use Magento\Framework\Filesystem;

class Submit extends Action
{
    protected $productFactory;
    protected $fileSystem;

    public function __construct(Context $context, ProductFactory $productFactory, Filesystem $fileSystem)
    {
        parent::__construct($context);
        $this->productFactory = $productFactory;
        $this->fileSystem = $fileSystem;
    }

    public function execute()
    {
        $product = $this->productFactory->create()->load(1); // Product ID 1
        $review = $this->getRequest()->getParam('review');
        $image = $this->getRequest()->getParam('image');
        
        // Logic to save review and handle image upload

        echo "Review Submitted!";
    }
}

Try It Now

🛠️ Project 5: Building a Custom Admin Dashboard

In this project, we’ll build a custom admin dashboard that provides store owners with a summary of sales, customer activity, and product performance.

// app/code/[Vendor]/AdminDashboard/Controller/Index/Index.php

namespace [Vendor]\AdminDashboard\Controller\Index;

use Magento\Framework\App\Action\Action;
use Magento\Framework\App\Action\Context;
use Magento\Sales\Model\OrderFactory;

class Index extends Action
{
    protected $orderFactory;

    public function __construct(Context $context, OrderFactory $orderFactory)
    {
        parent::__construct($context);
        $this->orderFactory = $orderFactory;
    }

    public function execute()
    {
        $orders = $this->orderFactory->create()->getCollection();
        $totalSales = 0;

        foreach ($orders as $order) {
            $totalSales += $order->getGrandTotal();
        }

        echo "Total Sales: $" . $totalSales;
    }
}

Try It Now

✅ Conclusion

By completing these real-world projects, you’ve gained practical experience with Magento 2. These projects cover everything from building custom modules, integrating APIs, to implementing advanced features like product reviews and admin dashboards. You’re now ready to tackle any Magento 2 challenge with confidence!