Why We Need Responsive Images?

The topic of responsive images has been one of the most hotly debated topics amongst web developers for what feels like forever. I think Jason Grigsby was perhaps the first to publicly point out that simply setting a percentage width on images was not enough, you needed to resize these images as well. He showed that if you served appropriately sized images on the original responsive demo site, you could shave 78% off the weight of those images (about 162kB) on small screens. Find out more...

Magento Enterprise Edition Expose an Influencing Experience of E-Commerce

Magento enterprise edition provide a total solution for e-commerce. It is very essential to promote the services and products in a proper way to get maximum benefit and this can be done effectively through enterprise edition. It fulfills the entire requirement and provides all possible tools that a business requires for an effectively e-commerce. 

Through a simple subscription the features of Magento Enterprise Edition can be enjoyed that also grants SLA (Service Level Agreement) with the backup of dedicated Magento team. It contains the contribution of not only the Magento team but also the contribution of customers, partners and of third parties.

It contains various features that can successfully lead the industry and provides a secure platform for the success of online stores. Several features are discussed below:


  • It allows for private sale due to the ability for to control the record, gives the opportunity to both customer as well as administrator to develop invitations. It also allows generating an event of sale for a limited time period to promote the e-business.
  • A reward point allows all the customers to take an active part in online transactions. This also acts as an attraction cause to online viewers due to unique programs that enhance the experience of online business.
  • It allows purchasing goods in tangible and intangible formats. They can send card to the recipient in physical form or send them on email that may also include the personal message if desired by the customer.
  • The functionality and management of these stores is really very unfussy that allows the customer or viewers to easily fetch the preferred product. They are designed in a manner so the customer do not face any difficulty and easily get their required product.
  • For more convenience Authorized.Net introduces 3 innovative features. First is balance response second is authorization reversal and the third is partial authorization. All these latest features allow the customer for using multiple debits, gift cards on online acquisition.
  • It also provides all the information regarding the purchase of the product including information of card balance during the confirmation of order and releasing the troubled fund.


SEO (Search Engine Optimization), constant shopping benefits, searching capabilities, customer segment, coupons for customers, consumer assist checkout, registry of gifts, store credits, commodities collection, certificate of PA-DSS, product proposition tools are several other features of Magento Enterprise Edition that provides an excellent experience of eCommerce.


Thanks for reading,
Darshit Parmar
M-Connect Media [www.mconnectmedia.com]
Award Winning Magento Design Agency
Continue Reading

Smart Role of Mobile Apps With Your Business

Smart business owners are aware of the significance of mobile marketing as well as power to their bottom line. The businessmen utilize the mobile apps for connecting with the customers offer great deals, boost their revenues, share relevant news, take reservations, and increase the foot traffic.

Whether they are on a go of delivering a service, selling products in the store, or running any successful restaurant, they are known to the fact that possessing and being acquainted with a mobile app happens to be one of the most efficient ways of reaching out the customers.

The customers are no different. They make use of the mobile devices in order to find all the information they want, whenever they want, as soon as they wish to reach it. But they unable to do that with those web browsers present on their phones as it takes a lot of time, particularly on the go. Rather they are dependent on the instantaneous accessibility of the mobile apps in order to quickly find all that they wish to know. Therefore they can easily get on with whatever they are doing.

Being a smart marketer, one knows that one would require a mobile app in order to compete. One certainly doesn't think or wants to spend thousands of dollars especially for the development, hosting as well as programming costs that are associated with it.

Creating a beautiful mobile application involves:
  • Boosting customer loyalty
  • Building big buzz
  • Growing one’s subscriber list
  • Increasing the web along with foot traffic
  • Faster closing of the sales
  • Generation of a greater repeat revenue in lesser time
The expert developer of mobile apps take most of the advantages of connectivity feature of the mobile phones and go on to make an addition of social experience along with their applications. Mobile applications can certainly be greatly helpful in expanding one’s business and pushing its boundaries way beyond what the normal marketing campaigns have to allow.

Potential customers who are fond of one’s mobile apps are quite likely to have high expectations from one’s future products as well as services. One can also make use of the mobile apps for advertising one’s products in way that is non-intrusive.

It is very much evident that mobile apps have to constitute an essential part of an industry that flaunts the feature of continuous growth. Possessing one’s own mobile app is certainly advantageous in several ways. The process of development as well as designing of one’s mobile apps happens to be a part of the numerous IT solutions that are offered by the IT companies.

These companies are well equipped with a team comprising of experienced and talented mobile application developers as well as designers, who have all the capability of creating apps which are suitable for one’s business needs and requirements.

The availability of these apps ranges from light weight and effortless affiliated with concise functionality to complete commercial mobile software collection. The apps that are developed are qualitatively high, well performing as well as useful in order to be appropriate for the needs of the client as well as its users.

What's your thought on Mobile supported website?

Thanks for reading,
Darshit Parmar
M-Connect Solutions
Continue Reading

How to Create Vtiger Module?

Create Vtiger Module Overview

We will be creating a new module called ‘Projects’ and all the examples referred will be based on this module name.

New Module: Projects

Let us say the new ‘Projects’ module basically contains two blocks of information. The blocks in Project module are:
  • Project Information
  • Description
The Project Information block contain the following fields:</p>
  • Project Name (Text)
  • Project Type (Text)
  • Project Lead (Text)
  • Assigned To (Combo Values)
  • Start Date (Date)
  • End Date (Date)
Assumptions
  • Similarly the Description Block will contain Description field of type Textarea.
  • If the module has some related information we will be specifying the same in Related Lists.
For the Projects module, we assume the related information as ‘Contacts’ and ‘Activities’.

After creating the basic block of the new module, integrate it into vtiger CRM by updating the following files.

Part 1: Vtiger Back-end Modifications

Files to be updated while creating a new module (Projects) are:
  • schema/DatabaseSchema.xml
  • modules/Users/DefaultDataPopulator.php
  • modules/CustomView/PopulateCustomView.php
  • modules/CustomView/CustomView.php
  • include/utils/ListViewUtils.php
  • data/CRMEntity.php
  • include/utils/UserInfoUtil.php
  • index.php
  • Popup.php
  • modules/Settings/CustomFieldList.php
  • modules/Settings/AddCustomFieldToDB.php
  • data/Tracker.php
  • include/utils/CommonUtils.php
  • include/utils/utils.php
  • modules/Home/UnifiedSearch.php
  • include/ComboStrings.php

Step 1: Update DatabaseSchema.xml File

Design new tables that are to be created for the new module in the DatabaseSchema.xml file present under <vtiger Home>/schema folder along with its attributes. The new tables created in schema should also take care of the relations that will exist among the tables.

Example:
For Projects module, create four tables in the DatabaseSchema.xml file present under <vtiger Home>/schema/ folder, say – ‘vtiger_projects’, ‘vtiger_projectcontrel’, ‘vtiger_projectscf’ & ‘vtiger_projectgrouprelation’

Step 2: Update modules/Users/DefaultDataPopulator.php File

(Note: according to the Creating New Fields in Existing Modules page adding the lines to the file is only necessary if the module is going to be included w/ a new release. other wise you can just create the SQL script.”)

Insert values for the new module Projects in 3 tables namely, ‘vtiger_tab’, ‘vtiger_blocks’ and ‘vtiger_fields’

A) Insert values into vtiger_tab table

IMPORTANT NOTE:
For inserting values into vtiger_tab table use value for tabid greater than 29 as values from 1 to 29 are already occupied by other modules of vtiger CRM.

NOTE: For compatibility with other extensions you should obtain your tabid values using the SQL max() function this way if others have already used any numbers you can get unused ones: select max(tabid) from vtiger_tab

Syntax:
$this->db->query("INSERT INTO vtiger_tab VALUES (<tabid>, '<name>', <presence>, <tabsequence>, '<tablabel>', <modifiedby>, <modifiedtime>, <customized>)");

Example:

$this->db->query("INSERT INTO vtiger_tab VALUES (30,'Projects',0,4,'Projects',null,null,0,1)");

B) Insert values into vtiger_blocks table

IMPORTANT NOTE: For blockid use values greater than 83 as values from 1 to 83 are already occupied by other modules blocks.

NOTE: For compatibility with other extensions you should obtain your blockid values using the SQL max() function this way if others have already used any numbers you can get unused ones: select max(blockid) from vtiger_blocks

Syntax:
$this->db->query("INSERT INTO vtiger_blocks VALUES (<blockid>, <tabid>, '<blocklabel>', <sequence>, <show_title >, <visible>, <create_view>, <edit_view>, <detail_view>)");

Example:

$this->db->query("insert into vtiger_blocks values (84,30,'LBL_PROJECT_INFORMATION',1,0,0,0,0,0)");
$this->db->query("insert into vtiger_blocks values (85,30,'LBL_CUSTOM_INFORMATION',2,0,0,0,0,0)");
$this->db->query("insert into vtiger_blocks values (86,30,'LBL_DESCRIPTION_INFORMATION',3,0,0,0,0,0)");

C)Insert values into vtiger_field table

The ‘fieldid’ column values in vtiger_field table will be generated dynamically using ‘getUniqueID’ method of PearDataBase class.

Syntax:
$this->db->query("insert into vtiger_field values (<tabid>, <fieldid>, <columnname>, <tablename>, <generatedtype>, <uitype>, <fieldname>, <fieldlabel>, <readonly>, <presence>, <selected>, <maximumlength>, <sequence>, <block>, <displaytype>, <typeofdata >, <quickcreate>, <quickcreatesequence>, <info_type>)");

For ui types see: Ui types
For data type see: INV…~ON

Example:
$this->db->query("insert into vtiger_field values (30,".$this->db->getUniqueID("vtiger_field").",'projectname','vtiger_projects',1,'2','projectname','Project Name',1,0,0,100,1,84,1,'V~M',0,1,'BAS')");
$this->db->query("insert into vtiger_field values (30,".$this->db->getUniqueID("vtiger_field").",'projecttype','vtiger_projects',1,'1','projecttype','Project Type',1,0,0,100,2,84,1,'V~O',0,1,'BAS')");
$this->db->query("insert into vtiger_field values (30,".$this->db->getUniqueID("vtiger_field").",'projectlead','vtiger_projects',1,'1','projectlead','Project Lead',1,0,0,100,3,84,1,'V~O',0,1,'BAS')");
$this->db->query("insert into vtiger_field values (30,".$this->db->getUniqueID("vtiger_field").",'smownerid','vtiger_crmentity',1,'53','assigned_user_id','Assigned To',1,0,0,100,4,84,1,'V~M',1,null,'BAS')");
$this->db->query("insert into vtiger_field values (30,".$this->db->getUniqueID("vtiger_field").",'start_date','vtiger_projects',1,'5','start_date','Start Date',1,0,0,100,5,84,1,'D~O',1,null,'BAS')");
$this->db->query("insert into vtiger_field values (30,".$this->db->getUniqueID("vtiger_field").",'due_date','vtiger_projects',1,'5','due_date','End Date',1,0,0,100,6,84,1,'D~O~OTH~GE~start_date~Start Date',1,null,'BAS')");
$this->db->query("insert into vtiger_field values (30,".$this->db->getUniqueID("vtiger_field").",'createdtime','vtiger_crmentity',1,'70','createdtime','Created Time',1,0,0,100,7,84,2,'T~O',1,null,'BAS')");
$this->db->query("insert into vtiger_field values (30,".$this->db->getUniqueID("vtiger_field").",'modifiedtime','vtiger_crmentity',1,'70','modifiedtime','Modified Time',1,0,0,100,8,84,2,'T~O',1,null,'BAS')");

$this->db->query("insert into vtiger_field values (30,".$this->db->getUniqueID("vtiger_field").",'description','vtiger_crmentity',1,'19','description','Description',1,0,0,100,1,86,1,'V~O',1,null,'BAS')");

For more information see: Creating New Fields in Existing Modules





Step 3: Update modules/CustomView/PopulateCustomView.php File

To get the Custom View by default for new Projects Module we need to have entry in ‘populateCustomView.php’ file

Example:

A) Insert the following array values in$customview array

Array('viewname'=>'All',
'setdefault'=>'1',
'setmetrics'=>'0',
'cvmodule'=>'Projects',
'stdfilterid'=>'',
'advfilterid'=>''),

B) Insert the following array values in$cvcolumns array

Array('vtiger_projects:projectname:projectname:Projects_Project_Name:V',
'vtiger_projects:projecttype:projecttype:Projects_Project_Type:V',
'vtiger_projects:projectlead:projectlead:Projects_Project_Lead:V',
'vtiger_projects:date_start:date_start:Projects_Start_Date:D',
'vtiger_projects:due_date:due_date:Projects_End_Date:D',
'vtiger_crmentity:smownerid:assigned_user_id:Projects_Assigned_To:V'),

Step 4: Update modules/CustomView/CustomView.php File

In CustomView.php file, put an entry for new module in $module_list array in the following format.

Format:
"<MODULE_NAME>"=>Array("<BLOCK_NAME>"=><BLOCK_ID>)

Example:

"Projects"=>Array("Information"=>84,"Description"=>86,"Custom Information"=>85);

Step 4 Notes

Didn’t find the $module_list array in the specified file (vTiger 5.0.3), after a search I found it in \modules\Reports\reports.php and upadted the array there.
I found it here in 5.0.4 as well, on line 109. Please confirm if it is the place to add the entry.
You may need to change vtiger_field, It seems like it might be stored there also. I’m not sure tho. Jonb 09:34, 11 June 2007 (PDT)

Step 5: Update include/utils/ListViewUtils.php File

Seems we need an entry in getListViewHeader() To get records in module ListView, put the listview query for new module in getListQuery() method of include/utils/ListViewUtils.php file.

Example: 
For Projects module, put the following query in getListQuery() method of include/utils/ListViewUtils.php file.

if($module == "Projects")
 {
//Query modified to sort by assigned to
     $query = "SELECT vtiger_crmentity.*,
     vtiger_projects.*
     FROM vtiger_projects
     INNER JOIN vtiger_crmentity
     ON vtiger_crmentity.crmid = vtiger_projects.projectid
     LEFT JOIN vtiger_projectsgrouprelation
     ON vtiger_projects.projectid = vtiger_projectsgrouprelation.projectid
     LEFT JOIN vtiger_groups
     ON vtiger_groups.groupname = vtiger_projectsgrouprelation.groupname
     LEFT JOIN vtiger_users
     ON vtiger_users.id = vtiger_crmentity.smownerid
     WHERE vtiger_crmentity.deleted = 0 ".$where;
if($is_admin==false && $profileGlobalPermission[1] == 1 && $profileGlobalPermission[2] == 1 && $defaultOrgSharingPermission[$tab_id] == 3)
      {
   $sec_parameter=getListViewSecurityParameter($module);
     $query .= $sec_parameter;
      }
}

what if statement? there are lots, i am in vtiger 5.0.3 ** Search for a Case statement in vTiger 5.0.3, It worked for me. In vtiger 5.0.4, I added this data after the switch started on line 1819 you could search for “switch($module)” and add a case with the above data in it. I added the above block on line 2560.

Ver 504rc Seems we need an entry in getListViewHeader() as well

 //Added for Action - edit and delete link header in listview getListViewHeader()
 //Different solutions - A

if ($module =="Projects" AND $viewnamedesc['viewname']=="All" AND (isProjectLeader() OR isProjectAdmin() ))
  {
    $list_header[] = $mod_strings["LBL_ADD_WORKERS"];
  }

 if(isPermitted($module,"EditView","") == 'yes' || isPermitted($module,"Delete","") == 'yes')
 {
    if ($module =="Projects" AND isProjectLeader() AND !isProjectAdmin() )
    {

    } else {
    $list_header[] = $app_strings["LBL_ACTION"];
    }
  }
  //Different solutions - E

This snippit should be inserted just before:

$log->debug("Exiting getListViewHeader method ...");
 return $list_header;

Step 6: Update data/CRMEntity.php File

This file needs to updated for two reasons. one is to insert the module-group relation and another one is to update the module-group relation

Example:

In insertIntoEntityTable() method, insert the following lines of code.

Inside the if loop - if($_REQUEST['ajxaction'] != ‘DETAILVIEW’ || ($_REQUEST['ajxaction'] == ‘DETAILVIEW’ && $_REQUEST['fldName'] == ‘assigned_user_id’)) – put the following entry.

   elseif($module == 'Projects' && $table_name == 'vtiger_projects')
   {
   updateProjectGroupRelation($this->id,$groupname);
   }
   //and in the else part put the following lines
   elseif($module == 'Projects' && $table_name == 'vtiger_projects')
   {
   updateProjectGroupRelation($this->id,); 
  }

In else part,

if($insertion_mode == ‘edit’) // loop put the following lines

   elseif($_REQUEST['assigntype'] == 'T' && $table_name == 'vtiger_projects')
   {
   insert2ProjectGroupRelation($this->id,$groupname);
   }

NOTE : For vtiger5.0.3 the file name in the step title is incorrect, there’s no method with this name. I found two files (/data/CRMEntity.php and /module/Users/Users.php) with this method with similar lines. Please some other detailed information to identify the correct file. Media:Example.ogg SAME PROBLEM in 5.0.4





Step 8: Update index.php File

For Detail View action we need to put an entry in index.php.

Example: Add the following entry:
case 'Projects':
  require_once("modules/$currentModule/Projects.php");
  $focus = new Projects();
  break;

Step 9: Update Popup.php File

Put an entry in Popup.php to get Module popup.

Example:
case 'Projects' :
      require_once("modules/$currentModule/Project.php");
      $focus = new Project();
      $smarty->assign("SINGLE_MOD",'Projects');
      if(isset($_REQUEST['return_module']) && $_REQUEST['return_module'] !='')
      $smarty->assign("RETURN_MODULE",$_REQUEST['return_module']);
      $alphabetical = AlphabeticalSearch($currentModule,'Popup','projectname','true','basic',$popuptype,"","","");
      if (isset($_REQUEST['select'])) $smarty->assign("SELECT",'enable');
break;

Step 10: Update modules/Settings/CustomFieldList.php File

To get custom field for new module, put an entry in $module_array of CustomFieldList.php

Example:
'Projects'=>'Projects',

NOTE: It feels like this part is not needed anymore (vTiger 5.0.3), please confirm. The block was not even in 5.0.4.

Ver. 504rc Not needed as it has been taken care of with function getCustomFieldSupportedModules()

In this function a query is executed (might be useful for checking your tables) which dynamically builds the array.
                select distinct vtiger_field.tabid, name
  from vtiger_field
  inner join vtiger_tab on vtiger_field.tabid=vtiger_tab.tabid
  where vtiger_field.tabid not in(9,10,16,15,8,29)

Step 11: Update modules/Settings/AddCustomFieldToDB.php File

Specify the table name to store custom field value of new module

Example:
elseif($fldmodule == 'Projects')
  {
    $tableName='vtiger_projectscf';
  }

Ver. 504rc Not sure if this is needed. If you stick to the normal ‘cf’ convention then (module name + ‘cf’) the the final elseif will take care of it. i.e. If there is a module name and its not empty then concatenate the module name to cf to build the table name


elseif($fldmodule != '')
 {
  $tableName= 'vtiger_'.strtolower($fldmodule).'cf';
 }

Needs verifying





Step 12: Update data/Tracker.php File

For tracking the modules’ record in LastViewed list we need to put an entry in Tracker.php

Example:
elseif($current_module =='Projects')
     {
     $query = 'select projectname from vtiger_projects where projectid=' .$item_id;
     $result = $this->db->query($query);
     $pb = $adb->query_result($result,0,'projectname');
     $item_summary = $pb;
      }

It feels like this part is not needed anymore (vTiger 5.0.3), please confirm. Did not see it in 5.0.4 either.

Ver. 504rc This entry is not needed as it is taken care of, dynamically in function track_view() The query looks like this, replace the question mark with the module name for testing.

       select fieldname,tablename,entityidfield
       from vtiger_entityname
       where modulename = ?";

Step 13: Update include/utils/CommonUtils.php File

For the new module you need to put an entry in the following methods
getQuickCreateModules()
getEntityName()
getGroupName()

Example:
a) Include the following in $new_label array in getQuickCreateModules()’Projects’=>’LNK_NEW_PROJECT’,

It feels like this part is not needed anymore (vTiger 5.0.3), please confirm

b) Include the following case as one of the cases in getEntityName() method
 It feels like this part is not needed anymore (vTiger 5.0.3), please confirm

case "Projects":$query = "select projectname from vtiger_projects where projectid in (".$list.")";
     $result = $adb->query($query);
     $numrows = $adb->num_rows($result);
     $project_name = array();
     for($i=0; $i < $numrows; $i++)
     {
        $project_id = $ids_list[$i];
        $project_name[$project_id] = $adb->query_result($result,$i,'projectname');
     }
     return $project_name;
break;

c)Include the following elseif part in getGroupName() method:

elseif($module == 'Projects')
     {
     $sql = "select vtiger_projectgrouprelation.groupname,vtiger_groups.groupid from vtiger_projectgrouprelation inner join vtiger_groups on                        vtiger_groups.groupname=vtiger_projectgrouprelation.groupname where vtiger_projectgrouprelation.projectid=".$id;
     }

note: in 5.0.4 the pattern for the last bit of the $sql line seems to have changed form “projectid=”.$id;” to “projectid=?’;” Please confirm. Correct, all the 504rc >> queries are parameterized and are used not with the ‘query’ method but the pquery method. eg.

$result = $adb->pquery($query, array());

The array carries all the parameters that are passed to the query, one for each question mark.

Ver. 504rc Function getQuickCreateModules() No addition needed as it is being created dynamically with the following query

        select distinct vtiger_tab.tablabel,
        vtiger_tab.name
 from vtiger_field
  inner join vtiger_tab on vtiger_tab.tabid = vtiger_field.tabid
        where quickcreate=0
  order by vtiger_tab.tablabel

Ver. 504rc Function getEntityName() Seems that this function has also been upgraded and believe that no additions are required. Needs confirmation
Ver. 504rc Function getGroupName() This function needs to be amended as described above but with this version you need the question mark paramater ie


     $sql = "SELECT vtiger_projectgrouprelation.groupname,
             vtiger_groups.groupid
             FROM vtiger_projectgrouprelation
                INNER JOIN vtiger_groups
                ON  vtiger_groups.groupname = vtiger_projectgrouprelation.groupname
             WHERE vtiger_projectgrouprelation.projectid=?";

Step 14: Update include/utils/utils.php File

For the new Projects module we need to put an entry in getRecordOwnerId() method Example:
elseif($module == 'Projects')
 {
   $query1="select vtiger_groups.groupid from vtiger_projectgrouprelation inner join vtiger_groups on vtiger_groups.groupname =    vtiger_projectgrouprelation.groupname where projectid=".$record;
 }
note: in 5.0.4 the pattern for the last bit of the $sql line seems to have changed form “projectid=”.$id;” to “projectid=?’;” Please confirm.

Ver 504rc Yes so in this version (504rc) the query will look like this:
      elseif($module == 'Projects')
 {
        $query1="SELECT vtiger_groups.groupid
                FROM vtiger_projectsgrouprelation
  INNER JOIN vtiger_groups ON vtiger_groups.groupname = vtiger_projectsgrouprelation.project_groupname
  WHERE projectid=?";
        }

Ver 504rc On looking at this function getRecordOwnerId() it looks as thought, if you don’t have a specific entry, then the fall through ‘else’ dynamically creates a query asshown below.

So, for 504 >> it seems that we don’t need to modify Hey, all you great vTiger developers, I can see where this is going. Soon we will just have to run a script and the new module will be installed.

Great work, to all involved in this stratagy!

 else
 {
 require_once("modules/$module/$module.php");
 $modObj = new $module();
 $query1="SELECT vtiger_groups.groupid
  FROM vtiger_".$module."grouprelation
  INNER JOIN vtiger_groups
  ON vtiger_groups.groupname = vtiger_".$module."grouprelation.groupname
                where ".$modObj->groupTable[1]."=?";
 }

Step 15: Update modules/Home/UnifiedSearch.php File

We need to put an entry in this file for search functionality

Example:
require_once('modules/Projects/Projects.php');
and
include 'Projects'=>'Projects', in $object_array;

NB Ver 504rc

This entry is not needed as it is dynamically retrieved with the query in function getSearchModules()
              SELECT distinct vtiger_field.tabid,name
              FROM vtiger_field
              inner join vtiger_tab on vtiger_tab.tabid=vtiger_field.tabid
              WHERE vtiger_tab.tabid not in (16,29)
Use this query to see what will actually be returned

Step 16: Update include/ComboStrings.php File

For the Projects Module we have a field called Project Type, which will display list of combo values about the type of project. In order to have default set of values in the field ‘Project Type’ we need to put an entry in the $combo_strings array.

Example: For Project Type field in Projects Module we can have the following initial values
'projecttype_dom' => Array('CRM'=>'CRM',
'Web Application'=>'Web Application',
'Database'=>'Database',
'Mainframe'=>'Mainframe',
'Verticals'=>'Verticals'),

Part 2: Vtiger Front-end Modifications (Creating Module-specific Files)

Add a new module folder called Projects inside the modules directory. Ensure that the module name is similar to the name specified in the ‘vtiger_tab’ table. For easier understanding we will be referring to the new module as ‘Projects’ The Files required under the new module are:
  • index.php
  • Module.php (here, Project.php)
  • ListView.php
  • EditView.php
  • DetailView.php
  • Save.php
  • CustomView.php
  • CallRelatedList.php
  • Delete.php
  • Popup.php
  • language/en_us.lang.php
  • Module.js (here, Projects.js)
Note: Step 11 mentions creation of language folder, which will have language file for internationalization purposes. Here the language is US English.</p>

Step 1: To create index.php

Create an index.php file under Projects folder and copy the contents of index.php from an existing module and change the module specific statements.

Example: Copy index.php file from Campaigns module to Projects and change the following:
include ('modules/Campaigns/ListView.php');
to
include ('modules/Projects/ListView.php');

Step 2: To create Module.php (Projects.php)

Create Module.php (here Project.php) file under Projects folder and copy the contents of Module.php from the existing module and change the module specific statements.

Example: Copy the contents of Campaign.php from Campaigns module and change the followings:
class Campaign
to
class Project

For modifying the class variables for Projects module refer the following table

TABLE
$this->log =LoggerManager::getLogger('campaign');
to
$this->log =LoggerManager::getLogger('project');
$this->column_fields = getColumnFields('Campaigns');
to
$this->column_fields = getColumnFields('Projects');
CAMPAIGN_SORT_ORDER
to
PROJECT_SORT_ORDER
CAMPAIGN_ORDER_BY
to
PROJECT_ORDER_BY

Remove the functions get_leads, get_contacts, get_opportunities and get_activities and define the related list functions for Projects module as specified in the vtiger_relatedlists table.





Step 3: To create ListView.php

Create a ListView.php file under Projects folder and copy the contents of ListView.php from an existing module and change the module specific statements.

Example: Copy the contents of ListView.php from Campaigns module and change the following:
require_once('modules/Campaigns/Campaign.php');
to
require_once('modules/Projects/Projects.php');
$focus = new Campaign();
to
$focus = new Project();
$_SESSION['CAMPAIGN_ORDER_BY'] = $order_by;
to
$_SESSION['PROJECT_ORDER_BY'] = $order_by;
$_SESSION['CAMPAIGN_SORT_ORDER'] = $sorder;
to
$_SESSION['PROJECT_SORT_ORDER'] = $sorder;

Similarly replace the existing string ‘Campaigns’ with ‘Projects’ for all other lines.





Step 4: To create EditView.php

Create EditView.php file under Projects folder and copy the contents of EditView.php from an existing module and change the module specific statements.

Example: Copy the contents of EditView.php from Campaigns module and change the following:
require_once('modules/Campaigns/Campaign.php');
to
require_once('modules/Projects/Projects.php');
$focus = new Campaign();
to
$focus = new Project();

Similarly replace the existing string ‘Campaigns’ with ‘Projects’ for all other lines.





Step 5: To Create DetailView.php

Create DetailView.php file under Projects folder and copy the contents of DetailView.php from an existing module and change the module specific statements.

Example: Copy the contents of DetailView.php from Campaigns module and change the following:
require_once('modules/Campaigns/Campaign.php');
to
require_once('modules/Projects/Projects.php');
$focus = new Campaign();
to
$focus = new Project();

Similarly replace the existing string ‘Campaigns’ with ‘Projects’ in all other lines.





Step 6: To Create Save.php

Create a ‘Save.php’ file under new ‘Projects’ folder and copy the contents of Save.php from an existing module and change the module specific statements.

Example: Copy the contents of Save.php from Campaigns module and change the following:
require_once('modules/Campaigns/Campaign.php');
to
require_once('modules/Projects/Projects.php');
$focus = new Campaign();
to
$focus = new Project();

Similarly replace the existing string ‘Campaigns’ with ‘Projects’ for all other lines.





Step 7: To create CustomView.php

Create CustomView.php file under new ‘Projects’ folder and copy the contents of CustomView.php from an existing module.You need not change anything in this file.

Example:Copy the contents of CustomView.php from Campaigns folder.

Step 8: How to Create CallRelatedList.php

Create a ‘CallRelatedList.php’ file under new ‘Projects’ folder and copy the contents of CallRelatedList.php from an existing module and change the module specific statements.

Example: Copy the contents of CallRelatedList.php from Campaigns module and change the following:
require_once('modules/Campaigns/Campaign.php');
to
require_once('modules/Projects/Projects.php');
$focus = new Campaign();
to
$focus = new Project();
Similarly do the requisite replacement of other Campaigns Text with Projects.

Step 9: How to Create Delete.php

Create a ‘Delete.php’ file under new ‘Projects’ folder and copy the contents of Delete.php from an existing module and change the module specific statements.

Example:Copy the contents of Delete.php from Campaigns module and change the following:
require_once('modules/ Campaigns/Campaign.php');
to
require_once('modules/Projects/Projects.php');
$focus = new Campaign();
to
$focus = new Project();

Step 10: How to Create Popup.php

Create ‘Popup.php’ file under ‘Projects’ folder and copy the contents of Popup.php from an existing module. not necessary to change anything in this file.

Example: Copy the contents of Popup.php from Campaigns module.

Step 11: How to Create language/en_us.lang.php

This file is required for i18n support. define $mod_strings array. this array should have entry for the following variables

Entry for blocks name as:
'LBL_PROJECT_INFORMATION'=>'Project Information';

Entry for field labels as:
'Project Name'=>'Project Name';

Step 12: How to Create Module.js (here Projects.js)

Create a Module.js (here ‘Projects.js’) file under new ‘Projects’ folder and put all module related javascript functions in this file.

Step 13: Modify Smarty/templates/EditViewHidden.tpl and Smarty/templates/DetailViewHidden.tpl

Add an {elseif} block for your new module or an OR condition to one of the existing blocks

Implementing Access Control

1. Administration – Fields Access Define global field-level access in module - Add fields – table: vtiger_def_org_field Ex.( for field with fieldid = 0 ):
INSERT INTO `vtiger`.`vtiger_def_org_field` (
 `tabid` ,
 `fieldid` ,
 `visible` ,
 `readonly`
 )
 VALUES (
 '14', '0', '0', '1'
 );

2. Define access rights to profiles ( ex. needed for edytion, without this fields are visible only to admin )

Ex.(for profile 1):

INSERT INTO `vtiger`.`vtiger_profile2field` (`profileid`, `tabid`, `fieldid`, `visible`, `readonly`) VALUES ('1', '14', '0', '0', NULL)

3. ?

Vtiger Implementing Field Customization

To be started

Implementing Reports

To be started for Xl in vtiger 4.4.2

Vtiger Adding PrimaryTab

Create module you want to insert into, open /parent_tabdata.php and add entry in array $parent_tab_info_array
9=>'Menu'

Menu must be the same as parenttab_label in database vtiger_parenttab table



And in array $parent_child_tab_rel_array add an other entry

9=>array(<moduleID>),

menu number must fit parent_tab_info_array one
<moduleID> Module ID list set in vtiger_tab
At the end of /modules/Users/DefaultDataPopulator.php add a line

$this->db->query("insert into vtiger_parenttab values (<tabid>,'<tab name>',<position>,0)");

<tabid> is unique identifier
<tab name> is php identifier for tabs
<position> order in wich you want to see it



In /include/language/*.lang.php add entry

'<tab name>'=>'language specific label',

Note: Only need to touch this script if this is going to be a new tab on the main menu. Otherwise the new field adds the new module to the existing tab specified.

Note: For 5.03 there is a file tabdata.php. New module must be added to the $tab_info_array.

Format: ‘ModuleName’=>##.

Vtiger Adding Module to Primary Tab

At the end of /modules/Users/DefaultDataPopulator.php add a line
$this->db->query("insert into vtiger_parenttabrel values(<tabid>,<moduleid>,<position>)");

<tabid> is the tab you want the item appear found in vtiger_parenttab table <moduleid> is your moduleid found in vtiger_tab table <position> define module position in menu.

Thanks to ZenGo! Web Services.
Continue Reading

No more fear of data loss with mobile back-up apps

Mobile is like a minicomputers or laptops that store our important information and data in pockets. So it is worthy to back up your mobile data when it gets lost, stolen or other disaster strikes. To tackle this type of unpredictable stuff Google Play store and Apple store provide an application which offers backup services for their devices.

These days two type of backup method works on your computer and on cloud computing. iCloud, Dropbox and Google Drive are first choice for cloud computing backup which gives ability to sync between devices and your PC also helpful for saving space on the smartphone. So here are the backup applications for iPhone and Android devices:

G Cloud Backup:


By set up an account in G cloud your can store up to 1GB of free data backup including messages, contacts, external SD cards, photos, app, music and other data which can be easily restored to any other android mobile device. G cloud having simple user interface which make it easy to use.

Super Backup:


Super backup app is a simple yet functional with ability to take backup of all type of files you can schedule backups of data at various intervals this facility makes it different from other same type of apps.

Titanium Media Sync:


With Titanium Media Sync app you can take customizable backups of your mobile data especially for folders with low battery consumed. It’s providing amazing facility of back up folders to Dropbox or personal FTP.

iExplorer:


iExplorer is free desktop application for ios users which allows users backup data from you iPhone without iTunes. You can backup third party apps to your computer and other ios devices which is not possible with itunes.

So, we have these backup applications which protect data for iPhone and Android mobile platforms. If you have used any backup applications of any mobile platform which are not listed here, just tell us in the comments section.

About Author:
Juned Ghanchi is an experienced app developer and associated with IndianAppDevelopers.com Company which provides mobile app development services at very low cost.  
Continue Reading

Best Magento Alternative Sales Model Extension For Better Customer Experience

Many people want to design their online eCommerce store but they don’t have enough knowledge to decide which open source platform is best for their shopping Cart. According to my point of view Magento is the best option for developing an eCommerce store.

Alternative Sales Model provides the best customer experience to their store users. Facebook store application, Light Checkout, Advanced Product Feeds, Affiliate Plus and Multi-Location Inventory Extension used for providing the best customer experience to the users and Administrator of the store.

Facebook store application
1) Facebook store application
  • Popularity Score: 8799
  • Reviews: 4.1/5
  • Compatible with: 1.4, 1.4.1.1, 1.4.2, 1.5, 1.6, 1.6.1, 1.6.2.0, 1.7, 1.8, 1.8.1
  • Price: Free

Facebook store application Magento Extension imports all the data, products of your Magento store at Facebook and shows all the Products in attractive way. So, Users increase more and more at your store via Facebook store and also revenue increase.
So, you can sell your store’s product at Facebook Business Page using this Facebook store Magento Extension. For more information, Kindly Visit Magento Commerce / Magento Connect / Customer Experience Magento Extension.

Light Checkout
2) Light Checkout
  • Popularity Score: 4844
  • Reviews: 4.1/5
  • Compatible with: 1.4, 1.4.1.1, 1.4.2, 1.5, 1.6, 1.6.1, 1.6.2.0, 1.7, 1.8, 1.8.1
  • Price: $169.00

Many users don't want to buy a product at online store just because the store’s 6 irritating checkout step. Light Checkout Magento Extension prepares one step checkout process for their eCommerce store user instead of Magento’s traditional six steps check our step.
By using this Extension at the store, user’s of store fill great customer experience because of one step checkout step. For more information, Kindly Visit Magento Commerce / Magento Connect / Customer Experience Magento Extension.

Advanced Product Feeds
3) Advanced Product Feeds
  • Popularity Score: 4340
  • Reviews: 4.8/5
  • Compatible with: 1.4, 1.4.1.1, 1.4.2, 1.5, 1.6, 1.6.1, 1.6.2.0, 1.7, 1.8
  • Price: $119.00

Advanced Product Feeds allows you to automatically generate the feed with products for all comparison shopping engines. This extension generates the feed with products for all common comparison shopping engines like Google Product Search, Shopping.com, Nextag.com, Twenga.co.uk, etc.
This Feed is very useful information for users because users get latest product’s information from various online shopping sites. For more information, Kindly Visit Magento Commerce / Magento Connect / Customer Experience Magento Extension.

Affiliate Plus
4) Affiliate Plus
  • Popularity Score: 2135
  • Reviews: 4.8/5
  • Compatible with: 1.4, 1.4.1.1, 1.4.2, 1.5, 1.6, 1.6.1, 1.6.2.0, 1.7
  • Price: $99.00

Affiliate Plus Magento Extension provides you to all six methods of affiliating like pay per sale, lead mile click, commission. By this Extension you can set commission, discount & payout requirement for deciding category or most saleable product.
This Extension is very useful for affiliate Marketing because it creates all the methods for affiliate and give proper ratio of discount. For more information, Kindly Visit Magento Commerce / Magento Connect / Customer Experience Magento Extension.

Multi-Location Inventory
5) Multi-Location Inventory
  • Popularity Score: 1104
  • Reviews: 4.1/5
  • Compatible with: 1.4, 1.4.1.1, 1.4.2, 1.5, 1.6, 1.6.1, 1.6.2.0, 1.7, 1.8
  • Price: $269.00

Multi-Location Inventory is a very useful extension for multi store because it manages all the inventory, stock data on multiple websites from one Magento store installations. So, This Magento Extension saves valuable time and sources for the store owner.
So, We can manage many stores from on the store’s end and save many working hours for men. For more information, Kindly Visit Magento Commerce / Magento Connect / Customer Experience Magento Extension.


For developing an eCommerce store and Magento Extension, please kindly visit our online store http://www.mconnectmedia.com
Continue Reading

M-Connect Media Provides Best eCommerce Development and Customization Service

Many users want to grow their online business. For that they find many options to choose best open source technology for their eCommerce website. Currently Magento is the best choice of developer and users for design open source E-commerce store.

Magento Development in India has rich experience in Development of eCommerce solutions. Magento is the most growing term in Asia specific India and Chinese online shopping industry. India adept the online shopping facility very fast and business of online shopping grows rapidly. People aren't shopping the products at crowded streets, from vendors, they just googled the online shopping, choose one branded online shop and give them order what they want.
Continue Reading

Provide Best eCommerce Support Service For Your Store

Magento eCommerce development provides best web application services that is used lots of time for creating their web stores. It is a free source or open source platform which came at the end of march ending in the year of 2008. From that Magento Deployed 150000+ eCommerce stores and now its popularity will increase more and more.
magento support

Now, they need support services for their Magento store and all this support and maintenance service is given by Magento Developers and Dedicated Magento Developer team. Magneto is basically a set of eCommerce functional modules that we used as per our needs.

When you are going to this kind of programmatically stuff then you need experts help. You can hire any agency or consultant for that. If you are running a Magento website then  you need to hire Magento support and maintenance package from reputable resources. Here, I have mentioned some services which are generally included in support and maintenance package.

Installation
The support service team will create an online database where you can keep your clients, products, the Magento system, and orders. The team look all the various installations and download of the system and also look of your hosting system work regularly or not.

Configuration of Magento eCommerce
When all installation steps are more complete than Configuration of Magento eCommerce step is continuing. In that programmer will estimate the setting of the hosting to ensure that Magento operates without any kind of disturbance activity.

Customization of templates
When any customization in the template or in the store’s design is needed than your support service developer so this job for your eCommerce store. In that any customization regarding your store’s functionality or design is completed by Support Service Team.

Data Backup
When your store has maximum users and product than support service team must have the Data backup of your system. If your Magento eCommerce store work flawlessly then you must create back of your store’s Data. For that you can take help from your local network, the cloud, or the remote servers than you more prefer for your store.

Maintenance
When your store is live, then you must remember that your store’s all page work better and none of work efficiency will go down. Your eCommerce Store’s speed is also important for your Magento Support Service. For that you can hire a Magento support service for your store that take care your store’s health at every time.

All these steps are the main benchmark for deployed the web store.

M-Connect Media an eCommerce Shopping Cart Development Company  that provides the best and 24*7 Magento support service for its customers. For more information visit our online site. 
Continue Reading