<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Data-Diggers.com &#187; UTI</title>
	<atom:link href="http://www.data-diggers.com/index.php/category/utils/uti-utils/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.data-diggers.com</link>
	<description>Zen Cart Optimization, Performance and A/B Split Testing Modules for Zen Cart</description>
	<lastBuildDate>Mon, 24 May 2010 18:56:27 +0000</lastBuildDate>
	<generator>http://wordpress.org/?v=2.9.2</generator>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
			<item>
		<title>How to create custom impression detection function for Randomized Tests</title>
		<link>http://www.data-diggers.com/index.php/2010/05/how-to-create-custom-impression-detection-function-for-randomized-tests/</link>
		<comments>http://www.data-diggers.com/index.php/2010/05/how-to-create-custom-impression-detection-function-for-randomized-tests/#comments</comments>
		<pubDate>Tue, 18 May 2010 12:36:16 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[A/B Split Tests]]></category>
		<category><![CDATA[UTI]]></category>
		<category><![CDATA[Uncategorized]]></category>

		<guid isPermaLink="false">http://www.data-diggers.eu/?p=140</guid>
		<description><![CDATA[
			
				
			
		
Randomized Tests version 1.3 introduces new feature &#8211; custom impression functions. It allows You to decide who and under what conditions participates in A/B split test. In this post I would like to show You how to create custom impression detection function and how to use it to speed up experiments.
The need for custom impression [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.data-diggers.com%2Findex.php%2F2010%2F05%2Fhow-to-create-custom-impression-detection-function-for-randomized-tests%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.data-diggers.com%2Findex.php%2F2010%2F05%2Fhow-to-create-custom-impression-detection-function-for-randomized-tests%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;"><a href="http://www.data-diggers.com/index.php/2009/11/randomized-tests-version-1-3/">Randomized Tests version 1.3</a> introduces new feature &#8211; custom impression functions. It allows You to decide who and under what conditions participates in A/B split test. In this post I would like to show You how to create custom impression detection function and how to use it to speed up experiments.</p>
<h2 style="text-align: justify;">The need for custom impression detection functions</h2>
<p style="text-align: justify;">Let&#8217;s assume that You want to change Your registration page. You hope that new version will ease process of registration and more customers will register/order. You want to include in experiment only those visitors that actually viewed &#8216;Register&#8217; page and remove from experiment those visitors that never intended to register / make purchase and never visited &#8216;Register&#8217; page. Why? Because You can get more accurate results more quickly. Let me show it to You on example.</p>
<h2 style="text-align: justify;">Example</h2>
<p style="text-align: justify;">Let&#8217;s assume that Your site gets 1000 visits daily (excluding bots). Of those 1000 visitors only 100 intend to buy anything ( other visitors are just surfing, comparing prices or doing anything else &#8211; they are not customers). Those 100 visitors get to &#8216;Register&#8217; page where You  already set up A/B split test with two versions of the page.  You know &#8211; from Google Analytics or anywhere else &#8211; that old version of the page (version A or control group) has  20% conversion rate. You expect new version of the page to have 40% conversion rate. How quickly will You know that the new page is better? Here&#8217;s comparison of default IDF vs custom IDF:</p>
<ul>
<li>Default impression detection function (all visitors are included in the experiment)</li>
</ul>
<p style="text-align: justify;"><!--   		BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Arial"; font-size:x-small } --></p>
<table border="1" cellspacing="0" cellpadding="2">
<colgroup>
<col width="80"></col>
<col width="88"></col>
<col width="108"></col>
<col width="130"></col>
<col width="145"></col>
<col width="129"></col>
</colgroup>
<tbody>
<tr>
<td width="90" height="20" align="CENTER"><strong>Group</strong></td>
<td width="88" align="CENTER"><strong>Visitors</strong></td>
<td width="108" align="CENTER"><strong>Impressions</strong></td>
<td width="130" align="CENTER"><strong>Conversions</strong></td>
<td width="145" align="CENTER"><strong>Conv. Rate</strong></td>
<td width="129" align="CENTER"><strong>Duration</strong></td>
</tr>
<tr>
<td height="17" align="CENTER">Group #A</td>
<td align="CENTER">500</td>
<td align="CENTER">500</td>
<td style="text-align: center;">10</td>
<td align="CENTER">2%</td>
<td rowspan="2" align="CENTER" valign="MIDDLE"><strong><span style="color: #ff0000; font-size: large;">6.41 days</span></strong></td>
</tr>
<tr>
<td height="20" align="CENTER">Group #B</td>
<td align="CENTER">500</td>
<td align="CENTER">500</td>
<td align="CENTER">20</td>
<td align="CENTER">4%</td>
</tr>
</tbody>
</table>
<ul>
<li>Custom impression detection function (impression occurs only when visitor views &#8216;Register&#8217; page<span style="text-decoration: underline;"> for the first time</span>)</li>
</ul>
<p><!--   		BODY,DIV,TABLE,THEAD,TBODY,TFOOT,TR,TH,TD,P { font-family:"Arial"; font-size:x-small } --></p>
<table border="1" cellspacing="0" cellpadding="2">
<colgroup>
<col width="80"></col>
<col width="88"></col>
<col width="108"></col>
<col width="130"></col>
<col width="145"></col>
<col width="129"></col>
</colgroup>
<tbody>
<tr>
<td width="90" height="17" align="CENTER"><strong>Group</strong></td>
<td width="88" align="CENTER"><strong>Visitors</strong></td>
<td width="108" align="CENTER"><strong>Impressions</strong></td>
<td width="130" align="CENTER"><strong>Conversions</strong></td>
<td width="145" align="CENTER"><strong>Conv. Rate</strong></td>
<td width="129" align="CENTER"><strong>Duration</strong></td>
</tr>
<tr>
<td height="20" align="CENTER">Group #A</td>
<td align="CENTER">500</td>
<td align="CENTER">50</td>
<td align="CENTER">10</td>
<td align="CENTER">20%</td>
<td rowspan="2" align="CENTER" valign="MIDDLE"><strong><span style="color: #00ff00; font-size: large;">5.66 days</span></strong></td>
</tr>
<tr>
<td height="20" align="CENTER">Group #B</td>
<td align="CENTER">500</td>
<td align="CENTER">50</td>
<td align="CENTER">20</td>
<td align="CENTER">40%</td>
</tr>
</tbody>
</table>
<p style="text-align: justify;">As You can see from this simple example there&#8217;s 15% decrease in duration of experiment. In other scenarios improvement may be even better.</p>
<h2 style="text-align: justify;">How to create IDF (Impression Detection Function)</h2>
<p style="text-align: justify;">Randomized Tests can make use of any function that:</p>
<ul style="text-align: justify;">
<li>is located in &#8216;includes/functions/extra_functions&#8217; directory</li>
<li>ends with &#8216;_rt_idf&#8217; string (e.g. my_custom_rt_idf())</li>
<li>takes five arguments in following order:
<ul>
<li><strong>$experimentRowID</strong> &#8211; ID of row in rt_experiments table representing current experiment</li>
<li><strong>$experimentID</strong> &#8211; ID of current experiment You created (e.g. &#8216;login_test&#8217;)</li>
<li><strong>$groupRowID</strong> &#8211; ID of row in rt_experiments_groups table representing group to which customer has been assigned</li>
<li> <strong>$groupID</strong> &#8211; ID above group (e.g. &#8216;control_group&#8217;, &#8216;test_group&#8217;)</li>
<li><strong>$newlyAssigned</strong> &#8211; TRUE if visitor has just been assigned to group (e.g. it&#8217;s his first visit to Your store)</li>
</ul>
</li>
<li>returns:
<ul>
<li>TRUE &#8211; if impression occured</li>
<li>FALSE &#8211; otherwise</li>
</ul>
</li>
</ul>
<p style="text-align: justify;">Ok, so let&#8217;s create such function and upload it to /includes/functions/extra_functions:</p>
<p style="text-align: justify;">
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw2">function</span> visited_register_page_rt_idf<span class="br0">&#40;</span><span class="re0">$e_row_id</span><span class="sy0">,</span> <span class="re0">$eid</span><span class="sy0">,</span> <span class="re0">$g_row_id</span><span class="sy0">,</span> <span class="re0">$gid</span><span class="sy0">,</span> <span class="re0">$new</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">global</span> <span class="re0">$uti</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw2">global</span> <span class="re0">$current_page_base</span><span class="sy0">;&lt;/</span>p<span class="sy0">&gt;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$current_page_base</span> <span class="sy0">==</span> <span class="st_h">&#8216;create_account&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$flag</span> <span class="sy0">=</span> <span class="re0">$uti</span><span class="sy0">-&gt;</span><span class="me1">get</span><span class="br0">&#40;</span><span class="st_h">&#8216;visited_create_account_page&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">if</span><span class="br0">&#40;</span><span class="re0">$flag</span> <span class="sy0">===</span> <span class="kw4">FALSE</span> <span class="sy0">||</span> <span class="re0">$flag</span> <span class="sy0">==</span> <span class="st_h">&#8216;FALSE&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="re0">$uti</span><span class="sy0">-&gt;</span><span class="me1">set</span><span class="br0">&#40;</span><span class="st_h">&#8216;visited_create_account_page&#8217;</span><span class="sy0">,</span> <span class="st_h">&#8216;TRUE&#8217;</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><span class="br0">&#40;</span><span class="kw4">TRUE</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="br0">&#125;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="kw1">return</span><span class="br0">&#40;</span><span class="kw4">FALSE</span><span class="br0">&#41;</span><span class="sy0">;</span><br />
<span class="br0">&#125;</span></div>
</div>
<p style="text-align: justify;">First, function checks if currently visited page is &#8216;create_account&#8217; page &#8211; We want impression to occur only on registration form page (which in Zen Cart is &#8216;create_account&#8217; page). Impression should occur only once per visitor so function checks using UTI if visitor already viewed &#8216;create_account&#8217; page. If he didn&#8217;t function does two things:</p>
<ul style="text-align: justify;">
<li>saves information that visitor viewed &#8216;create_account&#8217; page in UTI</li>
<li>return TRUE &#8211; impression occured</li>
</ul>
<p style="text-align: justify;">If visitor already visited &#8216;create_account&#8217; page impression does not occur and function returns FALSE.</p>
<p style="text-align: justify;">Now upload the function to includes/functions/extra_functions and create experiment that uses it to detect impression.</p>
<h2 style="text-align: justify;">Modify &#8216;Create Account&#8217; page</h2>
<p style="text-align: justify;">Let&#8217;s modify &#8216;Create Account&#8217; page. We just want to test two versions of &#8216;Create Account&#8217; page so I used &#8216;Standard Groupset&#8217; (Admin-&gt;Tools-&gt;[RT] Groupsets) as groupset. Standard Groupset has two groups: control group (id &#8216;cg&#8217;) and test group (id &#8216;tg&#8217;).</p>
<div class="codesnip-container" >
<div class="php codesnip" style="font-family:monospace;"><span class="kw1">if</span><span class="br0">&#40;</span><span class="sy0">!</span><a href="http://www.php.net/isset"><span class="kw3">isset</span></a><span class="br0">&#40;</span><span class="re0">$exp</span><span class="br0">&#41;</span> <span class="sy0">||</span> <span class="re0">$exp</span><span class="sy0">-&gt;</span><span class="me1">groupID</span> <span class="sy0">==</span> <span class="st_h">&#8216;cg&#8217;</span><span class="br0">&#41;</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// control group</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// display old &#8216;Create Account&#8217; page</span><br />
<span class="br0">&#125;</span> <span class="kw1">else</span> <span class="br0">&#123;</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// test group</span><br />
&nbsp; &nbsp; &nbsp; &nbsp; <span class="co1">// display new version of &#8216;Create Account&#8217; page</span><br />
<span class="br0">&#125;</span></div>
</div>
<p style="text-align: justify;">If visitor has been assigned to control group (&#8216;cg&#8217;) old version of page is displayed. In other case new &#8216;Create Account&#8217; page is used.</p>
<h2 style="text-align: justify;">How to use IDF in experiment</h2>
<p style="text-align: justify;">Go to Admin-&gt;Tools-&gt; [RT] Experiments page. Create new experiment as usually. In &#8216;<strong>Impression Detection Function</strong>&#8216; box paste name of Your impression detection function: &#8216;visited_create_account_page_rt_idf&#8217;  (without braces). Click on &#8216;Create&#8217;. That&#8217;s it!</p>
<h2 style="text-align: justify;">Test that Your IDF works</h2>
<p>Visit Your site and check that impression only occurs on first visit to &#8216;Create Account&#8217; page.</p>
<p style="text-align: justify;">That&#8217;s it. If anything isn&#8217;t clear please post comment.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.data-diggers.com/index.php/2010/05/how-to-create-custom-impression-detection-function-for-randomized-tests/feed/</wfw:commentRss>
		<slash:comments>2</slash:comments>
		</item>
		<item>
		<title>User Tracking Interface v1.1</title>
		<link>http://www.data-diggers.com/index.php/2010/03/user-tracking-interface-v1-1/</link>
		<comments>http://www.data-diggers.com/index.php/2010/03/user-tracking-interface-v1-1/#comments</comments>
		<pubDate>Sun, 07 Mar 2010 22:43:50 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[UTI]]></category>
		<category><![CDATA[Uncategorized]]></category>
		<category><![CDATA[Utils]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[User Tracking Interface]]></category>

		<guid isPermaLink="false">http://www.data-diggers.com/?p=216</guid>
		<description><![CDATA[
			
				
			
		
It&#8217;s mainly bug fix release. Update is STRONGLY recommended.
Changelog:

Changed file name of includes/auto_loaders/config.utis.php.php to includes/auto_loaders/config.utis.php
uti_install.sql missed some inserts
Fix to: [DELETE FROM uti_attributes WHERE uti_row_id = ? AND name IN () ]
UTI tables now use DB_PREFIX

You can download it from: Current version of UTI.
]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.data-diggers.com%2Findex.php%2F2010%2F03%2Fuser-tracking-interface-v1-1%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.data-diggers.com%2Findex.php%2F2010%2F03%2Fuser-tracking-interface-v1-1%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;">It&#8217;s mainly bug fix release. Update is <strong>STRONGLY </strong>recommended.</p>
<p style="text-align: justify;">Changelog:</p>
<ul style="text-align: justify;">
<li>Changed file name of <em>includes/auto_loaders/config.utis.php.php to includes/auto_loaders/config.utis.php</em></li>
<li>uti_install.sql missed some inserts</li>
<li>Fix to: [DELETE FROM uti_attributes WHERE uti_row_id = ? AND name IN () ]</li>
<li>UTI tables now use DB_PREFIX</li>
</ul>
<p style="text-align: justify;">You can download it from: <a title="Current version of UTI" href="http://www.data-diggers.com/contribs/uti/downloads/uti-current.zip">Current version of UTI</a>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.data-diggers.com/index.php/2010/03/user-tracking-interface-v1-1/feed/</wfw:commentRss>
		<slash:comments>5</slash:comments>
		</item>
		<item>
		<title>Bug in User Tracking Interface 1.0</title>
		<link>http://www.data-diggers.com/index.php/2010/03/bug-in-user-tracking-interface-1-0/</link>
		<comments>http://www.data-diggers.com/index.php/2010/03/bug-in-user-tracking-interface-1-0/#comments</comments>
		<pubDate>Thu, 04 Mar 2010 19:28:54 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[UTI]]></category>
		<category><![CDATA[Utils]]></category>
		<category><![CDATA[Bug]]></category>
		<category><![CDATA[User Tracking Interface]]></category>

		<guid isPermaLink="false">http://www.data-diggers.com/?p=209</guid>
		<description><![CDATA[
			
				
			
		
It seems that I&#8217;ve forgotten to add installation commands to the sql installation file and there are no options under &#8216;UTI Variables&#8217; in Configuration Menu. To Go to Admin-&#62;Tools-&#62;Install SQL patches and execute following commands:

SELECT &#40;@group_id:=configuration_group_id&#41; FROM configuration_group WHERE configuration_group_title LIKE &#8216;UTI Variables&#8217;;
INSERT INTO configuration &#40;configuration_title, configuration_key, configuration_value, configuration_description, configuration_group_id, sort_order&#41; VALUES&#40;&#8216;[Recent Products] Max recent [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.data-diggers.com%2Findex.php%2F2010%2F03%2Fbug-in-user-tracking-interface-1-0%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.data-diggers.com%2Findex.php%2F2010%2F03%2Fbug-in-user-tracking-interface-1-0%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;">It seems that I&#8217;ve forgotten to add installation commands to the sql installation file and there are no options under &#8216;UTI Variables&#8217; in Configuration Menu. To Go to Admin-&gt;Tools-&gt;Install SQL patches and execute following commands:</p>
<div class="codesnip-container" >
<div class="sql codesnip" style="font-family:monospace;"><span class="kw1">SELECT</span> <span class="br0">&#40;</span>@group_id:<span class="sy0">=</span>configuration_group_id<span class="br0">&#41;</span> <span class="kw1">FROM</span> configuration_group <span class="kw1">WHERE</span> configuration_group_title <span class="kw1">LIKE</span> <span class="st0">&#8216;UTI Variables&#8217;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> configuration <span class="br0">&#40;</span>configuration_title<span class="sy0">,</span> configuration_key<span class="sy0">,</span> configuration_value<span class="sy0">,</span> configuration_description<span class="sy0">,</span> configuration_group_id<span class="sy0">,</span> sort_order<span class="br0">&#41;</span> <span class="kw1">VALUES</span><span class="br0">&#40;</span><span class="st0">&#8216;[Recent Products] Max recent products to show&#8217;</span><span class="sy0">,</span> <span class="st0">&#8216;UTI_RECENT_PRODUCTS_MAX&#8217;</span><span class="sy0">,</span> <span class="st0">&#8216;5&#8242;</span><span class="sy0">,</span> <span class="st0">&#8216;How many recent products should be displayed in sidebox?&#8217;</span><span class="sy0">,</span> @group_id<span class="sy0">,</span> 1<span class="br0">&#41;</span>;<br />
<span class="kw1">INSERT</span> <span class="kw1">INTO</span> configuration <span class="br0">&#40;</span>configuration_title<span class="sy0">,</span> configuration_key<span class="sy0">,</span> configuration_value<span class="sy0">,</span> configuration_description<span class="sy0">,</span> configuration_group_id<span class="sy0">,</span> sort_order<span class="br0">&#41;</span> <span class="kw1">VALUES</span><span class="br0">&#40;</span><span class="st0">&#8216;[Recent Searches] Max recent searches to show&#8217;</span><span class="sy0">,</span> <span class="st0">&#8216;UTI_RECENT_SEARCHES_MAX&#8217;</span><span class="sy0">,</span> <span class="st0">&#8216;5&#8242;</span><span class="sy0">,</span> <span class="st0">&#8216;How many recent search results should be displayed in sidebox?&#8217;</span><span class="sy0">,</span>@group_id<span class="sy0">,</span> 2<span class="br0">&#41;</span>;</div>
</div>
]]></content:encoded>
			<wfw:commentRss>http://www.data-diggers.com/index.php/2010/03/bug-in-user-tracking-interface-1-0/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>User Tracking Interface v1.0 Released</title>
		<link>http://www.data-diggers.com/index.php/2009/07/user-tracking-interface-v1-0-released/</link>
		<comments>http://www.data-diggers.com/index.php/2009/07/user-tracking-interface-v1-0-released/#comments</comments>
		<pubDate>Fri, 10 Jul 2009 21:07:59 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[UTI]]></category>
		<category><![CDATA[Utils]]></category>
		<category><![CDATA[User Tracking Interface]]></category>
		<category><![CDATA[Zen Cart]]></category>

		<guid isPermaLink="false">http://www.data-diggers.eu/?p=68</guid>
		<description><![CDATA[
			
				
			
		
UTI is tiny module that tracks visitors to Zen Cart site even if they aren&#8217;t logged in or even never created any account. It allows developers to keep in UTI memory small amounts of information about each visitor. For example, UTI can be used to store list of recently viewed products by any particular user. [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.data-diggers.com%2Findex.php%2F2009%2F07%2Fuser-tracking-interface-v1-0-released%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.data-diggers.com%2Findex.php%2F2009%2F07%2Fuser-tracking-interface-v1-0-released%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;"><strong>UTI </strong>is tiny module that tracks visitors to Zen Cart site even if they aren&#8217;t logged in or even never created any account. It allows developers to keep in UTI memory small amounts of information about each visitor. For example, <strong>UTI </strong>can be used to store list of recently viewed products by any particular user. <strong>UTI </strong>will remember this information and when the visitor will come back to Zen Cart store week later <strong>UTI </strong>will recognize him and present list of previously viewed products.</p>
<p style="text-align: justify;"><strong>UTI </strong>takes care of:</p>
<ul style="text-align: justify;">
<li>recognizing visitors &#8211; even if they never created any account</li>
<li>storing and retrieving information about them in database</li>
</ul>
<p style="text-align: justify;"><strong>UTI </strong>does not store any personal information in visitors browser.</p>
<h2 style="text-align: justify;">How to use UTI</h2>
<p style="text-align: justify;"><strong>UTI</strong> is very simple class. It creates global <em><strong>$uti </strong></em>object that contains all information about current visitor. From developer point of view <strong>UTI </strong>class has four methods:</p>
<ul style="text-align: justify;">
<li><em>$uti-&gt;set($name, $value) </em>- stores in database <em>$value</em> as value for attribute <em>$name</em></li>
<li><em>$uti-&gt;get($name)</em> &#8211; retrieves from database value for attribute<em> $name</em>. If there&#8217;s no such attribute<em> </em>method returns <em>FALSE</em>.</li>
<li><em>$uti-&gt;has($name)</em> &#8211; checks if current <strong>$uti</strong> object has attribute <em>$name</em> set</li>
<li><em>$uti-&gt;delete($name)</em> &#8211; deletes attribute.</li>
</ul>
<p style="text-align: justify;"><em><strong>$uti</strong></em> is automatically instantiated through <em>auto_loaders/ </em>mechanism. Developer can use it in any function/class since it&#8217;s global variable.</p>
<p style="text-align: justify;">To show how easy it is to use <strong>UTI </strong>and what it can be used for I&#8217;ve created simple contributions that:</p>
<ul style="text-align: justify;">
<li>records and displays in sidebox list of products visitor viewed recently.</li>
<li>records and displays in sidebox list of searches visitor performed recently.</li>
<li>records when visitor changes currency and saves it as his/hers default. When visitor comes back to Zen Cart contribution automatically switches currency to most recent one.</li>
</ul>
<p style="text-align: justify;">Example contributions are included in UTI package. You can download it here: <a href="http://www.data-diggers.com/contribs/uti/downloads/uti-current.zip">current version of UTI</a>.</p>
<p style="text-align: justify;">In next blog post I&#8217;ll describe how I&#8217;ve created one of those contributions using <strong>UTI</strong>.</p>
]]></content:encoded>
			<wfw:commentRss>http://www.data-diggers.com/index.php/2009/07/user-tracking-interface-v1-0-released/feed/</wfw:commentRss>
		<slash:comments>3</slash:comments>
		</item>
		<item>
		<title>Need Testers For User Tracking Interface Module</title>
		<link>http://www.data-diggers.com/index.php/2009/07/need-testers-for-user-tracking-interface-module/</link>
		<comments>http://www.data-diggers.com/index.php/2009/07/need-testers-for-user-tracking-interface-module/#comments</comments>
		<pubDate>Sat, 04 Jul 2009 13:13:46 +0000</pubDate>
		<dc:creator>admin</dc:creator>
				<category><![CDATA[UTI]]></category>
		<category><![CDATA[Utils]]></category>
		<category><![CDATA[User Tracking Interface]]></category>
		<category><![CDATA[Zen Cart]]></category>

		<guid isPermaLink="false">http://www.data-diggers.eu/?p=65</guid>
		<description><![CDATA[
			
				
			
		
I&#8217;ve created User Tracking Interface (UTI) module for Zen Cart v1.3.8 which recognizes visitors (even if they are not logged in or don&#8217;t have account) and stores simple bits of information about them in database. You can use UTI to store such information as favorite currency of each visitor, recently viewed products by particular visitor [...]]]></description>
			<content:encoded><![CDATA[<div class="tweetmeme_button" style="float: right; margin-left: 10px;">
			<a href="http://api.tweetmeme.com/share?url=http%3A%2F%2Fwww.data-diggers.com%2Findex.php%2F2009%2F07%2Fneed-testers-for-user-tracking-interface-module%2F"><br />
				<img src="http://api.tweetmeme.com/imagebutton.gif?url=http%3A%2F%2Fwww.data-diggers.com%2Findex.php%2F2009%2F07%2Fneed-testers-for-user-tracking-interface-module%2F&amp;style=normal" height="61" width="50" /><br />
			</a>
		</div>
<p style="text-align: justify;">I&#8217;ve created<strong> User Tracking Interface</strong> (<strong>UTI</strong>) module for Zen Cart v1.3.8 which recognizes visitors (even if they are not logged in or don&#8217;t have account) and stores simple bits of information about them in database. You can use <strong>UTI </strong>to store such information as favorite currency of each visitor, recently viewed products by particular visitor or recently searched products. The best thing is that even if the visitor will leave Your site and will come back later <strong>UTI </strong>will recognize him/her and will set site to his/hers preferences.</p>
<p style="text-align: justify;">You can test it Yourself on demo store here:</p>
<p style="text-align: justify;"><a href="http://www.data-diggers.com/contribs/uti/demo-stores/with-uti/">www.data-diggers.com/contribs/uti/demo-stores/with-uti/</a></p>
<h2 style="text-align: justify;">How to test it</h2>
<ol style="text-align: justify;">
<li>View some products (4-6). The module will remember which items You viewed and will present them in sidebox.</li>
<li>Search for some stuff like &#8220;mouse&#8221;, &#8220;unreal&#8221;, &#8220;mary&#8221;. The module will remember what You searched for and will present links to previous searches in sidebox.</li>
<li>Change currency. The module will remember Your last currency and when You&#8217;ll be back next day/week/month the site will display with Your currency set.</li>
<li>Close down Your browser and switch to different one. Visit above site again. The system will recognize You and adjust site to Your preferences.</li>
</ol>
<h2 style="text-align: justify;">What UTI is really for</h2>
<p style="text-align: justify;">Recently viewed products, recent search terms and user default currency are nice features, but they are just examples of use of <strong>UTI</strong>. <strong>UTI </strong>is simple class which developers can use to make user aware contributions. <strong>UTI </strong>takes care of recognizing users and storing/retrieving information about them in/from database. <strong>UTI </strong>attaches itself to Zen Cart on each request and creates $uti variable which developers can use to store simple information about visitors in database.</p>
<h2 style="text-align: justify;">How to use UTI</h2>
<p style="text-align: justify;"><strong>UTI </strong>has very simple interface. Developer should use only two methods:</p>
<ul style="text-align: justify;">
<li><em>$uti-&gt;get($attribute) </em>- retrieves visitors value for $attribute from database</li>
<li><em>$uti-&gt;set($attribute, $value)</em> &#8211; store visitors value for $attribute in database</li>
</ul>
<p style="text-align: justify;">Developer does not have to worry about creating $uti object. $uti object will automatically recognize user and will retrieve all information about him from database.</p>
<h2 style="text-align: justify;">What UTI can be used for</h2>
<p style="text-align: justify;"><strong>UTI </strong>is tool which can be used to create very simple contributions, for example:</p>
<ul style="text-align: justify;">
<li>remembering language of given visitor. On his next visit site can be automatically switched to preferred language.</li>
<li>presenting recommendations to visitor based on his previous purchases (even if visitor isn&#8217;t logged in).</li>
<li>many more.</li>
</ul>
<h2 style="text-align: justify;">What I need from You</h2>
<p style="text-align: justify;">Please test above site and report any bugs. You can also install current version of <strong>UTI </strong>on Your site and report any bugs. You can download current version of <strong>UTI </strong>here:</p>
<p style="text-align: justify;"><a href="http://www.data-diggers.com/contribs/uti/downloads/uti-current.zip">www.data-diggers.com/contribs/uti/downloads/uti-current.zip</a></p>
<p style="text-align: justify;">Installation instructions are in uti-current.zip</p>
]]></content:encoded>
			<wfw:commentRss>http://www.data-diggers.com/index.php/2009/07/need-testers-for-user-tracking-interface-module/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
