Monday, 12 January 2015

Set/Enable developer mode in Magento 2

Magento 2 is already out for developers for testing and contributing improvements. After installing magento 2, you need to enable the Developer mode to show the errors on browser. Else, the errors will be logged into a separate file under var/report.

There are multiple ways to enable a developer mode
Via Console
Run the following command "php bin\magento deploy:mode:developer"

Edit env.php
'MAGE_MODE' => 'developer'  add this line on your env.php file below 'x-frame-options'

OR
Just add this below line on your index.php file
$_SERVER['MAGE_MODE'] = 'developer';

Place the code above on line 1. Above all the codes which was there already.

Wednesday, 7 January 2015

Magento 2 Installation Guide.

Magento 2 is under development phase and there are beta release on Github which are free to explore. You can download Magento 2 here.

INSTALLATION

* Once you have downloaded magento2 zip file from Github, you can extract it to your htdocs folder(in xampp).

* Next thing is to Install the Composer. Without installing composer we cannot run Magento 2.

* Steps for Installing Composer on Windows machine can be found here. Follow steps from 1 to 5 if  latest xampp version is installed.

* Step for Installing Composer on Linux machine can be found here.

* Once Composer is installed properly, Now you can install magento 2. Find the composer.JSON file inside your extracted magento 2 folder and Right click on it and select composer Install.

* Now the composer will install the necessary library files and you are good to go.

* Run the file via your Browser like the usual magento Installation.


NOTE: Magento 2 requires PHP version 5.4 or higher.

Complete installation instructions with Screenshots is available on Magestore website.

You can get the Usefull links to study and get to know more about Magento 2 from my next post. Click here.

Magento 2 study guide & useful websites to get to know about it


The new version of Magento has a significant changes in the architecture when comparing to its 1.* versions. I have started learning Magento 2 and found some of the websites that explains the changes and improvements very clearly. These are from the Masters of Magento.

Am not going to explain the changes that are in Magento 2, instead I will give you all the Links that are useful for you to explore and learn it by yourself.

OFFICIAL WIKI
It's good to have the Magento have their own well formatted Wiki for Magento 2. The Wiki explains all the technology changes in Magento 2. You can go to the Official WIKI page here.

THE MASTERS

I have also found other websites that are extremely useful to study magento 2. They are,
* The Alan Kent's Blog. (Magento's chief architect)
* The Inchooers website.
* Magestore's website.
* An Awesome explanation for Dependency Injection(DI) can be found here. The website explains the DI for Symphony, Yet the concept for the DI is the Same for all. More explanation for DI can be found from the Jeff More Presentation.

START EXPLORING WITH THESE INITIATIVES

Magestore have developed a banner module for Magento 2. You can visit their website here to View the Demo and download the banner module.

You can get the THEME for Magento 2 here. Uber theme offers this free Magento 2 theme and the Live Demo of the theme can be found on the link provided.

SAMPLE DATA FOR MAGENTO 2

Uber theme also provides the Sample data for magento 2. You can visit their website here. This website clearly explains the installation steps and configuring magento 2 with Screenshots.

Go crazy on New Magento 2.

Friday, 19 December 2014

Magento remove selected items from shopping cart

When you have too many products in you shopping cart and you want to remove particular products out of it, you only need to do it one-by-one. And its really frustrating especially for testers. Magento does not provide the feature to remove selected products by default.

I have developed a code that could allow users to select the products which they want to remove by simply checking the products and click the remove button. And they all will be removed at a time.


Please download the extension here. Extract it and move it inside appropriate folders.
Tested on Version 1.7.2 and 1.8.1 community edition.

Monday, 8 December 2014

Magento update backorder programatically

To update a products backorder status i wrote a custom script. My script reads the SKU's from the csv file and checks if the product exists and updates its backorder status.

Below is the code.

$products = Mage::getModel('catalog/product')->loadByAttribute('sku', $sku);
if($products)
{     
   // get product's stock data such quantity, in_stock etc
   $stockData = Mage::getModel('cataloginventory/stock_item')->loadByProduct($products);
           
   //to update backorder
   $stockData->setData('use_config_backorders', '0'); //not to use config settings           
   /*0 = No Backorders
   1 = Allow Qty Below 0
   2 = Allow Qty Below 0 and Notify Customer*/
   $stockData->setData('backorders', '1');
                       
   // then set product's stock data to update
   $stockData->save();
           
   // call save() method to save your product with updated data
   $products->save();                
}


You can download the complete code here.  It reads the csv file and checks for the products, If it is found the data are updated. Upon running this file. It will output all the products status (Found, Not found, How many not found) in the webpage. It also Writes the missing sku's in a new CSV file.

Tuesday, 25 November 2014

Magento CSV import error show which row value is skipped

During the Batch CSV import, some of the rows will be skipped due to missing required values or any such errors. On the import process page magento will throw error message like below by default.

BEFORE
From this error message we won't be able to identify exactly which row is skipped. So I have made a modification to the magento files and after that

AFTER

Now we will know which row is skipped and can check for errors in it. Let me explain the few modification which i did to achieve this.

Step 1:

copy the file Customer.php which is under the path "app/code/core/Mage/Customer/Model/Convert/Adaptor/" to this path "app/code/local/Mage/Customer/Model/Convert/Adaptor/"

DO NOT EDIT THE CORE FILE. ALWAYS OVERRIDE IT USING LOCAL FOLDER

Step 2:

open the Customer.php in your editor and look for the function name "saveRow". It will be around line 418.
Inside this function you will see the error messages text. For Example:

 $message = Mage::helper('customer')->__('Skipping import row, required field "%s" is not defined. ', 'website');

Replace above line with this.

 $message = Mage::helper('customer')->__('Skipping import row, required field "%s" is not defined. Unique value to identify in CSV <strong>%s</strong> ', 'website', $importData['email']);

There will be similar error messages thrown for various reasons like customer group not found. website id does not exist and so on.. You can use the above customization to all those errors thrown.

The $importData['email'] is the one which contains the row value which is unique in case on Customer import. you can also use $importData['firstname'] or $importData['lastname'] according to your needs. The values inside the quotes are the column names from the CSV.

Similarly For Product batch import you can modify the file which is under. app/code/core/Mage/Ccatalog/Model/Convert/Adaptor/Product.php 

NOTE: When you import the CSV. look for any Special characters. This may cause errors during import. To import CSV with special characters edit your .htaccess file and add this line to it AddDefaultCharset UTF-8

Magento Customer Import - Convert plain text password to magento format.

One of my recent task is to import about 10k customers into Magento database.

First thing came into my mind is to export the existing customer from magento and use the csv file to fill in the new customer values and import them back.
But after exporting the few existing customers, i came to know that the CSV header fields which Magento exported is not suitable for the import and missing fields for password, customer address etc.

After few searches, i found this SAMPLE CSV file. click to download

Filled in the CSV file and for the password_hash field, I had to develop a customer script to convert plain text password to Magento format password.

My custom script is below. It reads the CSV file which contains plain text password, Encrypts it and writes to a new CSV file. After you CSV file is ready go to the admin panel. In the menu select System -> Import/Export -> Dataflow- Profiles. You will see "import customer". Click on it and upload your CSV file and click "save & continue edit" button. Then Choose the imported file from the dropdown and click Run.

All the customers will be imported with their previous password and addresses.

<?php
$row = 1;
$fp = fopen('var/log/ss1-pass.csv', 'w');
$csvHeader = array('Text','Encrypted');
fputcsv( $fp, $csvHeader,",");

//generate random string for salt
function generateRandomString($length = 2) {
    $characters = '123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ';
    $randomString = '';
    for ($i = 0; $i < $length; $i++) {
        $randomString .= $characters[rand(0, strlen($characters) - 1)];
    }
    return $randomString;
}

if (($handle = fopen("ss1.csv", "r")) !== FALSE) {

    while (($data = fgetcsv($handle, 1000, ",")) !== FALSE) {
      $row++;
      $plainText =  trim($data[0]);
      $salt = generateRandomString(2);
      $encrypted = md5($salt.$plainText).":".$salt;
      fputcsv($fp, array($plainText,$encrypted), ",");
      //if($row==20){break;}
    }
   
 fclose($handle);
 fclose($fp);
}
?>