Monday, 30 May 2016

add dashes to phone number in php

Add dashes to phone number :-

<?php echo  preg_replace("/^1?(\d{3})(\d{3})(\d{4})$/", "$1-$2-$3", $phoneNumber);?>

Saturday, 21 May 2016

detect browser language and redirect using javascript

When first time user open the site and detect browser language and redirect website according to languge using javascript.

 <script>
function GetCookie(name) {
        var arg=name+"=";
        var alen=arg.length;
        var clen=document.cookie.length;
        var i=0;

        while (i<clen) {
            var j=i+alen;
                if (document.cookie.substring(i,j)==arg)
                    return "here";
                i=document.cookie.indexOf(" ",i)+1;
                if (i==0)
                    break;
        }

        return null;
    }
$(function getck() {
    var visit=GetCookie("COOKIE1");
    if (visit==null){
        var userLang = navigator.language || navigator.userLanguage;
if(userLang=="fr"){
window.location='http://french.domain.com/';
}else if(userLang=="en-US"){
window.location='http://english.domain.com/';
}else{
window.location='http://domain.com/';
}
    }
    var expire=new Date();
    expire.setTime(expire.getTime()+(1*24*60*60*1000));
    document.cookie="COOKIE1=here; expires="+expire;
});
</script>

Saturday, 7 May 2016

Detect when an HTML5 video finishes

<video id="myVideo" width="1349" height="758" preload="metadata" autoplay="1" controls>
<source src="http://id-cardz.com/wp-content/uploads/2016/05/upwork-damjikamran.mp4?_=1" type="video/mp4"></source>
</video>
<img id="myimg" onClick="playvid();" style="display:none;" src="image/path.jpg">
<a href="#" onClick="document.getElementById('myVideo').play();">Play video</a>
<script type='text/javascript'>
    document.getElementById('myVideo').addEventListener('ended',myHandler,false);
    function myHandler(e) { //on video stop ------------
        document.getElementById('myVideo').style.display = 'none';
        document.getElementById('myimg').style.display = 'block';
    }
    function playvid() { //on click video play ------------
    document.getElementById('myimg').style.display = 'none';
    document.getElementById('myVideo').style.display = 'block';
    document.getElementById('myVideo').play();
    }
</script>

Google map show a map using address on website

 <script src="http://maps.googleapis.com/maps/api/js?key=AIzaSyDY0kkJiTPVd2U7aTOAwhc9ySH6oHxOIYM&sensor=false">
</script>
<script>
 var geocoder;
  var map;

  function codeAddress() {
   geocoder = new google.maps.Geocoder();
  
    var latlng = new google.maps.LatLng(33.449204, -112.074387);
   
    var mapOptions = {
     
      center: latlng,
          zoom: 12,
    mapTypeId: google.maps.MapTypeId.TERRAIN
        }
    map = new google.maps.Map(document.getElementById("map-canvas"), mapOptions);
   
    var address = 'Indira Gandhi International Airport, New Delhi, Delhi, India';
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {

     var lat=results[0].geometry.location.lat();
   
     var lng=results[0].geometry.location.lng();
   
     map.setCenter(new google.maps.LatLng(lat, lng));
   
     var marker = new google.maps.Marker({
       
            position: results[0].geometry.location,
            map: map,
            animation: google.maps.Animation.DROP,
           
        });
       
              var infowindow = new google.maps.InfoWindow();
            infowindow.setContent('<div class="mapinfo"> Indira Gandhi International Airport, New Delhi, Delhi, India</div>');
            infowindow.open(map, marker);     
           
            }

    });
   
   
    }


           
</script>
<body onload="codeAddress();">
 <div id="form2left">
        <div id="map-canvas" style="width: 100%; height: 100%;"></div>
      </div>
      </body>

Saturday, 23 April 2016

Magento adding existing attribute to all attribute sets

<?php
require_once "app/Mage.php";
Mage::app();
$attSet = Mage::getModel('eav/entity_type')->getCollection()->addFieldToFilter('entity_type_code','catalog_product')->getFirstItem(); // This is because the you adding the attribute to catalog_products entity ( there is different entities in magento ex : catalog_category, order,invoice... etc )
    $attSetCollection = Mage::getModel('eav/entity_type')->load($attSet->getId())->getAttributeSetCollection(); // this is the attribute sets associated with this entity
    $attributeInfo = Mage::getResourceModel('eav/entity_attribute_collection')
        ->setCodeFilter('attribute_code') //insert your attribute code here
        ->getFirstItem();
    $attCode = $attributeInfo->getAttributeCode();
    $attId = $attributeInfo->getId();
    foreach ($attSetCollection as $a)
    {
        $set = Mage::getModel('eav/entity_attribute_set')->load($a->getId());
        $setId = $set->getId();
        $group = Mage::getModel('eav/entity_attribute_group')->getCollection()->addFieldToFilter('attribute_set_id',$setId)->setOrder('attribute_group_id',"ASC")->getFirstItem();
        $groupId = $group->getId();
        $newItem = Mage::getModel('eav/entity_attribute');
        $newItem->setEntityTypeId($attSet->getId()) // catalog_product eav_entity_type id ( usually 10 )
                  ->setAttributeSetId($setId) // Attribute Set ID
                  ->setAttributeGroupId($groupId) // Attribute Group ID ( usually general or whatever based on the query i automate to get the first attribute group in each attribute set )
                  ->setAttributeId($attId) // Attribute ID that need to be added manually
                  ->setSortOrder(10) // Sort Order for the attribute in the tab form edit
                  ->save()
        ;
        echo "Attribute ".$attCode." Added to Attribute Set ".$set->getAttributeSetName()." in Attribute Group ".$group->getAttributeGroupName()."<br>\n";
    }

Wednesday, 20 April 2016

How To Export and Import Categories in Magento

Step 1 of 4: Write the following code in export-category.php and place it to root directory. Run this file at browser http://www.yourdomain.com/export-category.php. It will generate a CSV file  Categories.csv (export all categories).


<?php
ini_set("memory_limit","10000M");
require_once "app/Mage.php";
umask(0);
Mage::app();
$category = Mage::getModel ( 'catalog/category' );
$tree = $category->getTreeModel ();
$tree->load();
$ids = $tree->getCollection()->getAllIds();
if ($ids) {
 $string='';
 $heading = '"store","categories","cat_id","is_active","meta_title","meta_keywords","meta_description","include_in_menu","is_anchor","description",';
 foreach ($ids as $id){
  if($id>0)
  {
   $cate_cre = Mage::getModel('catalog/category');
   $cate_cre->load($id);
   $treeurl='';
   $cate_cre1=Mage::getModel('catalog/category')->load($id);
   $treeurl=$cate_cre->getName();
   if($cate_cre1->getParentId()>0)
   {
   for($i=0; ;$i++)
   {
   if($cate_cre1->getParentId()>0)
   {
   $abc=Mage::getModel('catalog/category')->load($cate_cre1->getParentId());
   $pCat=$abc->getName();
   if($abc->getId()>1){
   $treeurl=$pCat.'/'.$treeurl;
   }
   $cate_cre1=$abc;
   }
   else{
   break;
   }
   }
   }
   $store = "default";
   $string .='"'.$store.'","'.$treeurl.'","'.$id.'","'.$cate_cre->getIsActive().'","'.$cate_cre->getMetaTitle().'","'.$cate_cre->getMetaKeywords().'","'.$cate_cre-

>getMetaDescription().'","'.$cate_cre->getIncludeInMenu().'","'.$cate_cre->getIsAnchor().'","'.$cate_cre->getDescription().'"';
   $string.="\n";
  }
 }
 $csv_output = $heading ."\n".$string;
 $filename = "Categories";
 header("Content-type: application/vnd.ms-excel");
 header("Content-disposition: csv" . date("Y-m-d") . ".csv");
 header( "Content-disposition: filename=".$filename.".csv");
 print $csv_output;
}
?>

Step 2 of 4:  Import the categories :-
create config.xml  at app\code\local\Lky\Catalog\etc\config.xml
create Category.php at app\code\local\Lky\Catalog\Model\Convert\Adapter\Category.php
create Lky_All.xml  at  app\etc\modules

Code of config.xml :-
<?xml version="1.0"?>
<config>
  <global>
    <models>
      <catalog>
        <rewrite>
        <convert_adapter_category>Lky_Catalog_Model_Convert_Adapter_Category</convert_adapter_category>
    </rewrite>
   </catalog>
  </models>
 </global>
</config>

Code of Category.php :-

<?php
class Lky_Catalog_Model_Convert_Adapter_Category extends Mage_Eav_Model_Convert_Adapter_Entity
{
 protected $_categoryCache = array();
 protected $_stores;
 /**
 * Category display modes
 */
 protected $_displayModes = array( 'PRODUCTS', 'PAGE', 'PRODUCTS_AND_PAGE');

 public function parse()
 {
 $batchModel = Mage::getSingleton('dataflow/batch');
 $batchImportModel = $batchModel->getBatchImportModel();
 $importIds = $batchImportModel->getIdCollection();
 foreach ($importIds as $importId){
  $batchImportModel->load($importId);
  $importData = $batchImportModel->getBatchData();
  $this->saveRow($importData);
 }
 }
 /**
 * Save category (import)
 * @param array $importData
 * @throws Mage_Core_Exception
 * @return bool
 */
 public function saveRow(array $importData)
 {
 if (empty($importData['store'])) {
   if (!is_null($this->getBatchParams('store'))) {
   $store = $this->getStoreById($this->getBatchParams('store'));
   } else {
   $message = Mage::helper('catalog')->__('Skip import row, required field "%s" not defined', 'store');
   Mage::throwException($message);
   }
 }else{
  $store = $this->getStoreByCode($importData['store']);
 }
 if ($store === false){
  $message = Mage::helper('catalog')->__('Skip import row, store "%s" field not exists', $importData['store']);
  Mage::throwException($message);
 }
 $rootId = $store->getRootCategoryId();
  if (!$rootId) {
  return array();
  }
 $rootPath = '1/'.$rootId;
  if (empty($this->_categoryCache[$store->getId()])) {
  $collection = Mage::getModel('catalog/category')->getCollection()
              ->setStore($store)
              ->addAttributeToSelect('name');
 $collection->getSelect()->where("path like '".$rootPath."/%'");
 foreach ($collection as $cat) {
  $pathArr = explode('/', $cat->getPath());
  $namePath = '';
  for ($i=2, $l=sizeof($pathArr); $i<$l; $i++) {
  $name = $collection->getItemById($pathArr[$i])->getName();
  $namePath .= (empty($namePath) ? '' : '/').trim($name);
  }
  $cat->setNamePath($namePath);
 }
  $cache = array();
  foreach ($collection as $cat) {
  $cache[strtolower($cat->getNamePath())] = $cat;
  $cat->unsNamePath();
  }
  $this->_categoryCache[$store->getId()] = $cache;
  }
  $cache =& $this->_categoryCache[$store->getId()];
  $importData['categories'] = preg_replace('#\s*/\s*#', '/', trim($importData['categories']));
  if (!empty($cache[$importData['categories']])) {
  return true;
  }
  $path = $rootPath;
  $namePath = '';
  $i = 1;
 $categories = explode('/', $importData['categories']);
 /*$IsActive = $importData['IsActive'];*/
 $IsActive = $importData['is_active'];
 $IsAnchor =$importData['is_anchor'];
 $Description =$importData['description'];
 $IncludeInMenu=$importData['include_in_menu'];
 $MetaTitle=$importData['meta_title'];
 $MetaKeywords=$importData['meta_keywords'];
 $MetaDescription=$importData['meta_description'];
 $Image=$importData['image'];
 $URlkey=$importData['url_key'];
  foreach ($categories as $catName) {
  $namePath .= (empty($namePath) ? '' : '/').strtolower($catName);
  if (empty($cache[$namePath])) {
  $dispMode = $this->_displayModes[2];
    $cat = Mage::getModel('catalog/category')
    ->setStoreId($store->getId())
    ->setPath($path)
    ->setName($catName)
    ->setIsActive($IsActive)
    ->setIsAnchor($IsAnchor)
    ->setDisplayMode($dispMode)->save();
   $cat = Mage::getModel('catalog/category')->load($cat->getId());
   $cat->setIncludeInMenu($IncludeInMenu);
   $cat->setDescription($Description);
   $cat->setMetaTitle($MetaTitle).
    $cat->setMetaKeywords($MetaKeywords);
    $cat->setMetaDescription($MetaDescription);
    $cat->save();
   $cat = Mage::getModel('catalog/category')->load($cat->getId());
   $data['meta_keywords']=$MetaKeywords;
   $data['meta_title']=$MetaTitle;
   $data['meta_keywords']=$MetaKeywords;
   $data['meta_description']=$MetaDescription;
   $data['url_key']= $URlkey;
   $cat->addData($data);
   $cat->save();
  $cache[$namePath] = $cat;
  }
  $catId = $cache[$namePath]->getId();
  $path .= '/'.$catId;
  $i++;
  }
  return true;
 }

 /**
 * Retrieve store object by code
 *
 * @param string $store
 * @return Mage_Core_Model_Store
 */
 public function getStoreByCode($store)
 {
  $this->_initStores();
  if (isset($this->_stores[$store])) {
  return $this->_stores[$store];
  }
  return false;
 }

 /**
 * Init stores
 *
 * @param none
 * @return void
 */
 protected function _initStores ()
 {
  if (is_null($this->_stores)) {
  $this->_stores = Mage::app()->getStores(true, true);
  foreach ($this->_stores as $code => $store) {
  $this->_storesIdCode[$store->getId()] = $code;
  }
  }
 }
}

?>

Code of Lky_All.xml

<?xml version="1.0"?>
<config>
 <modules>
  <Lky_Catalog>
   <codePool>local</codePool>
   <active>true</active>
  </Lky_Catalog>
 </modules>
</config>

Step 3 of 4 : create dataflow advanced profile at admin > system > Import/Export > Dataflow - Advanced Profile and give the Profile Name is 'category import'.

place the following code to its Actions xml box :-

<action type="dataflow/convert_adapter_io" method="load">
     <var name="type">file</var>
     <var name="path">var/import</var>
     <var name="filename"><![CDATA[Categories.csv]]></var>
     <var name="format"><![CDATA[csv]]></var>
    </action>
    <action type="dataflow/convert_parser_csv" method="parse">
     <var name="delimiter"><![CDATA[,]]></var>
     <var name="enclose"><![CDATA["]]></var>
     <var name="fieldnames">true</var>
     <var name="store"><![CDATA[0]]></var>
     <var name="number_of_records">1</var>
     <var name="decimal_separator"><![CDATA[.]]></var>
     <var name="adapter">catalog/convert_adapter_category</var>
     <var name="method">parse</var>
    </action>

Step 4:  Put Categories.csv into var/import/ and removed cat_id colums from csv.
             remove first two rows.
            remove all Default Category/ from categories colunn in Categories.csv
           Now to Run Profile admin > system > Import/Export > Dataflow-Advanced Profile
           run 'category import' profile  from Run Profile > click 'Run Profile in Popup'
           import of category now start and automatically created category.

Wednesday, 13 April 2016

drawing signature using canvas in jquery

<script src="//ajax.googleapis.com/ajax/libs/jquery/1.7.1/jquery.min.js" type="text/javascript"></script>
    <script>
    var mousePressed = false;
var lastX, lastY;
var ctx;

function InitThis() {
    ctx = document.getElementById('myCanvas').getContext("2d");

    $('#myCanvas').mousedown(function (e) {
        mousePressed = true;
        Draw(e.pageX - $(this).offset().left, e.pageY - $(this).offset().top, false);
    });

    $('#myCanvas').mousemove(function (e) {
        if (mousePressed) {
            Draw(e.pageX - $(this).offset().left, e.pageY - $(this).offset().top, true);
        }
    });

    $('#myCanvas').mouseup(function (e) {
        mousePressed = false;
    });
        $('#myCanvas').mouseleave(function (e) {
        mousePressed = false;
    });
}

function Draw(x, y, isDown) {
    if (isDown) {
        ctx.beginPath();
        ctx.strokeStyle = 'black';
        ctx.lineWidth = '3';
        ctx.lineJoin = "round";
        ctx.moveTo(lastX, lastY);
        ctx.lineTo(x, y);
        ctx.closePath();
        ctx.stroke();
    }
    lastX = x; lastY = y;
}
   
function clearArea() {
    // Use the identity matrix while clearing the canvas
    ctx.setTransform(1, 0, 0, 1, 0, 0);
    ctx.clearRect(0, 0, ctx.canvas.width, ctx.canvas.height);
}
function imgcreate() {
//to append image in body
var can = document.getElementById('myCanvas');
var ctx = can.getContext('2d');
//ctx.fillRect(50,50,50,50);
var img = new Image();
img.src = can.toDataURL();
$("#imgct").html(img);
//image upload
var Pic = document.getElementById("myCanvas").toDataURL("image/png");
     $('#sign').val(Pic);
    }
</script>

<body onLoad="InitThis();">
<form class="" action="form-submit.php" method="post">
<canvas id="myCanvas" width="500" height="200" style="border:2px solid black"></canvas>
<br /><br />
        <button onClick="javascript:clearArea();return false;">Refresh</button>
<input type="submit" value="Save" name="save" onMouseOver="return imgcreate();">
</form>
<div id="imgct"></div>
</body>
For upoad image to server create a php file with "form-submit.php" name. And use below code to save createed image :-
<?php
file_put_contents('images/test.png', base64_decode(substr($_POST['sign'], strpos($_POST['sign'], ",")+1)));
?>
After submit form image will be saved in images folder.