PHP SOLUTIONS

This is the blog for getting Idea regarding PHP, Magento, jQuery and JavaScript for Customization.

Thursday 9 November 2017

Magento 2 : Apply Custom Discount to cart

Hi All,

     Offering some special discount to customers is a good way to attract more customers & indirectly increase sales of site !

    In Magento 2,  there are so many ways available for apply some special discounts after adding product to cart, but here some special things which allowed you for add dynamic discount product wise !

  For that need to follow some steps for make it work,

  A) Create "spe_dis" field  with "Decimal" data type in "quote_item" tabel.

  B) Override Add.php from core directory form vendor\magento\module-checkout\Controller\Cart\Add.php

                                                                         OR

  B) For Testing update same file in vendor\magento\module-checkout\Controller\Cart\Add.php

      After, this line $this->cart->save();

      Add below code,

     $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
     $resource = $objectManager->get('Magento\Framework\App\ResourceConnection');
     $connection = $resource->getConnection();

     $data=$connection->fetchAll('SELECT item_id FROM quote_item WHERE quote_id='.$this->cart->getQuote()->getId());
     if(isset($_REQUEST['spe_dis']) and $_REQUEST['spe_dis'] > 1){
            $fianlsf = 0;
            foreach($data as $dats){$fianlsf = $dats['item_id'];}
            $sql = "Update quote_item  Set spe_dis='".$_REQUEST['spe_dis']."' where item_id = ".$fianlsf."";
            $connection->query($sql);
      }


     Note :- Above code save special discount value to DB.

   C) Create a hidden text field inside product page form

      <input type="hidden" id="spe_dis" value="0" />

      set special discount to this field which want to apply product wise.

  D) Finally, Unzip files in app/code 

       Note :- Download Zip

     Result would be like ->

This is working for me in Magento 2.1.8 and 2.2.0 also !

Monday 8 May 2017

Magento2 : Create a custom backend theme

Hello Friends,

     Here is the code for create a custom theme for the backend in magento 2 !
   
     Magento2 provide Backend as a admin theme !

     Magento 2.X is a quite different process as compare of Magento 1.X, there are few easy steps for it !

Step 1 : Create a theme directory at below location,

app\design\adminhtml\Magento\custom

Step 2 : Now, Create 3 files inside custom directory,

A) composer (This is JSON file)

B) registration (This is PHP file)

C) theme (This is XML file)

Now, Copy/Paste below code in side related files,

Step A : composer (This is JSON file)
             
                {
                    "name": "magento/theme-adminhtml-custom",
                    "description": "N/A",
                    "require": {
                        "php": "~5.6.0|7.0.2|~7.0.6",
                        "magento/theme-adminhtml-backend": "~100.0",
                        "magento/framework": "~100.0"
                    },
                    "type": "magento2-theme",
                    "version": "1.0.0",
                    "license": [
                        "OSL-3.0",
                        "AFL-3.0"
                    ],
                    "autoload": {
                        "files": [
                            "registration.php"
                        ]
                    }
                }

   Step B : registration (This is PHP file)

<?php
                /**
                 * Copyright © 2016 Magento. All rights reserved.
                 * See COPYING.txt for license details.
                 */
             
                \Magento\Framework\Component\ComponentRegistrar::register(
                    \Magento\Framework\Component\ComponentRegistrar::THEME,
                    'adminhtml/Magento/custom',
                    __DIR__
                );

   Step C : theme (This is XML file)

                <theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/theme.xsd">
                    <title>Magento 2 new backend</title>
                    <parent>Magento/backend</parent>
                </theme>


Step 6 : Now, just run upgrade & deploy commands

       A) php bin/magento setup:upgrade

       B) php bin/magento setup:static-content:deploy
 
       you can see you custom theme name as Magento/custom while deploying !

Magento 2 : Create a custom frontend theme

Hello Friends,

     Here is the code for how to create a custom theme for the front end in magento 2 !

     Magento 2.X is a quite different process as compare of Magento 1.X, there are few easy steps for it !

Step 1 : Create a theme directory at below location,

app\design\frontend\Magento\custom

Step 2 : Now, Create 3 files inside custom directory,

A) composer (This is JSON file)

B) registration (This is PHP file)

C) theme (This is XML file)

Now, Copy/Paste below code in side related files,

Step A : composer (This is JSON file)

{
                    "name": "magento/custom-module-theme",
                    "description": "N/A",
                    "require": {
                        "php": "~5.6.0|7.0.2|~7.0.6",
                        "magento/theme-frontend-luma": "~100.0",
                        "magento/framework": "~100.0"
                    },
                    "type": "magento2-theme",
                    "version": "1.0.0",
                    "license": [
                        "OSL-3.0",
                        "AFL-3.0"
                    ],
                    "autoload": {
                        "files": [ "registration.php" ]
                    }
       }

   Step B : registration (This is PHP file)

<?php
/**
* Copyright © 2016 Magento. All rights reserved.
* See COPYING.txt for license details.
*/
           
\Magento\Framework\Component\ComponentRegistrar::register(
\Magento\Framework\Component\ComponentRegistrar::THEME,
'frontend/Magento/custom',
                __DIR__
);

   Step C : theme (This is XML file)

<theme xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:Config/etc/theme.xsd">
<title>Magento Custom Theme</title>
<parent>Magento/luma</parent>
<media>
<preview_image>media/preview.jpg</preview_image>
</media>
</theme>


Step 3 : Create directory at below mentioned location,

app\design\frontend\Magento\custom\Magento_Theme\layout

Step 4 : Inside \Magento_Theme\layout create file called default.xml

/* COPY & PASTE this code inside default.xml */

<?xml version="1.0"?>
<page xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:noNamespaceSchemaLocation="urn:magento:framework:View/Layout/etc/page_configuration.xsd">
<body>
<referenceBlock name="logo">
<arguments>
<argument name="logo_file" xsi:type="string">images/logo.png</argument>
</arguments>
</referenceBlock>
<remove name="report.bugs"/>
</body>
</page>

Step 5 : Create a media directory inside Magento\custom & upload preview.jpg file inside it !

 

Step 6 : Now, just run upgrade & deploy commands

       A) php bin/magento setup:upgrade

       B) php bin/magento setup:static-content:deploy

Wednesday 5 October 2016

Magento 2 : Method to use SQL query

Hello Friends,

         Magento 2.X is use Resource Connection Method for fetch data from the Database, Which is little bit different from the Magento 1.X

        I have used code like below, and I hope it will helps to you also,

        Here, I show the code for SELECT query for magento2

 1)  $this->_resources= \Magento\Framework\App\ObjectManager::getInstance()
->get('Magento\Framework\App\ResourceConnection');
 2)  $connection = $this->_resources->getConnection();
 3)  $Table_Name = $this->_resources->getTableName('TABLE NAME');
4) $data = $connection->fetchAll('SELECT * FROM '.$Table_Name.' WHERE
Field_Name=Value');

       you just copy & paste this in related *.phtml or Controller files !

       If you want to use Insert or Update then just replace Select query, and it will work !

       For, Insert replace line number (4)

4) $data = $connection->fetchAll('INSERT into '.$Table_Name.'
VALUES ('value1','value2');

       For, Update replace line number (4)

4) $data = $connection->fetchAll('UPDATE '.$Table_Name.'
SET column1=value1,column2=value2 WHERE id=1;

This is working fine for me in Magento 2.0 !
       

Tuesday 24 May 2016

Automatic item updates: Missing schema.org microdata availability information - Google Data Feed

Hi,

You have set auto update setting for you Google Data Feed. You can see the setting of Automatic item updates setting over here,

1) Click on setting on left sided menu list at bottom
2) Click on Automatic item updates
3) Can see Attributes to be updated

Now, Auto item updates very helpful for increase the site performance and give accurate details of sites to the end users.

such as, If your X product data feed price is $55.00 while upload data feed to google merchant but same X product price will change by $50.00 then google automatic update X product price to $50.00 to data feed.

suppose, If you are getting this type of warning from Google it means google can not crawl the product availability information from your particular product leading page OR what micro data you set its structure is wrong !

If you set Micro data information then you can check it with google tool, https://search.google.com/structured-data/testing-tool

If you didn't set the schema information for product leading page then you follow, http://www.schema.org/docs/gs.html

Here some necessary micro-data properties are

<div itemscope itemtype="http://schema.org/Product">

    1. <img itemprop="image" src="testing.jpg" alt="Test Demo"/>
    2. <span itemprop="name">Product Name</span>
    3. /*Product Pricing should under offers property*/
    4. <div itemprop="offers" itemscope itemtype="http://schema.org/Offer">
      1. <span itemprop="priceCurrency">USD</span>
      2. <span itemprop="price">100</span>
      3. <link itemprop="availability" href="http://schema.org/InStock" />
    5. </div>
</div>



Monday 11 April 2016

Magento : Add last increment id of "sales_flat_quote_item" in another table

Magento
        $production = Mage::getSingleton('core/session')->getproValue($production); /* This is the session value which is set on Category/List page */
        $shipping = Mage::getSingleton('core/session')->getshipValue($ship);  /* This is the session value which is set on Category/List page */

/* This is code for Change Row Data of the product in cart and add Shipping charge in to that product into cart
         * Changes By Rixit
        // */
       
            $connection = Mage::getSingleton('core/resource')
            ->getConnection('core_read');
            $select = $connection->select()
            ->from('sales_flat_quote_item', array('MAX(item_id) as itn')); // select * from tablename or use array('id','name') selected values  
            $rowsArray = $connection->fetchAll($select); // return all rows
            $rowArray =$connection->fetchRow($select);   //return row
       
            $temp = $rowArray['itn'];
           
            $select1 = $connection->select()
            ->from('sales_flate_lastinsertd_id', array('MAX(last_inserted_id) as itn1')); // select * from tablename or use array('id','name') selected values  
            $rowsArray = $connection->fetchAll($select1); // return all rows
            $rowArray =$connection->fetchRow($select1);   //return row
       
            $itnew = $rowArray['itn1'];
       
            if( ($temp != $itnew) && ($temp >= $itnew) )
            {   
                $total = $production + $shipping;
       
                $connection = Mage::getSingleton('core/resource')
                ->getConnection('core_write');
       
                $connection->beginTransaction();
                $fields = array();
                $fields['last_inserted_id']= $temp;
                $fields['production_time']= $production;
                $fields['shipping_time']= $shipping;        
                $fields['total']= $total;        
                $connection->insert('sales_flate_lastinsertd_id', $fields);
                $connection->commit();
                               
            }
            else
            {
                //echo "Riisdfs";
            }
           
        /*
         * End of Changes By Rixit
        // */