Musings From the Throne

Random Ramblings from the Tiny Queen

Restrict Access to a Product Page in Miva Merchant

Tuesday, July 22, 2008

I have received numerous requests for some code I wrote to password protect a product page in Miva Merchant 5 (or 5.5), so I thought I'd share it here. This code was originally written for a site that wanted to implement custom product pricing using the Emporium Plus External Product Purchase module, but wanted to ensure that only staff members could access the page.

Note: This code requires the Tool Kit from Emporium Plus. If you have a Miva Merchant 5 (or 5.5) store, the Tool Kit is an immensely valuable module that allows developers and store owners enormous flexibility in customizing their stores. It is beyond worth the money (and no, I don't get anything for saying so except the satisfaction of spreading the word about an extremely useful tool).

To use the code below:
  1. Set up an availability group, and assign authorized customers to this group.
  2. Substitute your desired product code where indicated by the text YOUR_PRODUCT_CODE_HERE (2 places).
  3. Substitute your availability group name (not code!) for the AVAILABILITY_GROUP_NAME in the code below.

This code is designed to work on the main screen of the regular PROD page. If you're using a template manager, you can remove the conditional that tests for the product code.


<html>
<head>
<title>&mvt:store:name;: &mvt:product:name;</title>
<base href="&mvt:global:basehref;">
<mvt:item name="head" param="head_tag" />
</head>

<mvt:item name="body">
<mvt:item name="hdft" param="global_header" />

<tr><td align="left" valign="bottom">
<mvt:item name="hdft" param="header" />
</td></tr>
<tr><td align="left" valign="top" bgcolor="&mvt:colors:ctgy_bg;">
<table border="0" cellpadding="10" cellspacing="0">
<tr><td align="left" valign="top" nowrap>
<mvt:item name="fonts" param="ctgy_font">
<mvt:item name="customerlink" />
<mvt:item name="affiliatelink" />
<mvt:item name="category_tree" />
</mvt:item>
</td></tr>
</table>

</td><td align="left" valign="top" width="80%">
<br>
<blockquote>
<mvt:comment>Test for desired product code</mvt:comment>
<mvt:if expr="l.settings:product:code EQ 'YOUR_PRODUCT_CODE_HERE'">

<mvt:comment>Check to see if customer is logged in</mvt:comment>

<mvt:if expr="g.Basket:CUST_ID">

<mvt:comment>Check to see if customer is a member of your availability group</mvt:comment>
<mvt:item name="toolkit" param="agroup|acount" />
<mvt:foreach iterator="customer_agroup" array="customer_agroups">


<mvt:comment>Set test variable for use later in the page</mvt:comment>

<mvt:if expr="l.settings:customer_agroup:name EQ 'YOUR_AVAILABILITY_GROUP'">
<mvt:item name="toolkit" param="sassign|staffid|1" />
<mvt:item name="prod_ctgy_hdft" param="prod_header" />
<mvt:item name="prod_ctgy_hdft" param="prod_header" />
<mvt:item name="product_display" />

<mvt:if expr="l.settings:product_count NE 0">
<br><br>
<mvt:item name="fonts" param="hdr_font">
<b>Related Item(s)</b><br>
</mvt:item>

<mvt:item name="product_list" />
</mvt:if>
<mvt:item name="prod_ctgy_hdft" param="prod_footer" />
</blockquote>

</mvt:if>
</mvt:foreach>
</mvt:if>


<mvt:comment>If staffid variable not set, display login</mvt:comment>
<mvt:if expr="g.Basket:CUST_ID AND (g.staffid NE '1')">
<p>This page is for internal use only.</p><br><br><br>
<p><a href="http://domain.com"><img src="graphics/00000001/continue_shopping.jpg"
alt="Continue Shopping"></a></p>

<mvt:elseif expr="g.staffid NE '1'">


<p>This page is for internal use only. Staff members may log in below.</p>
<form method="post" action="&mvt:global:secure_sessionurl;" class="loginform">
<input type="hidden" name="Store_Code" value="&mvte:store:code;">
<input type="hidden" name="Screen" value="PROD">
<input type="hidden" name="Product_Code" value="YOUR_PRODUCT_CODE_HERE">
<label for="user">Username</label><input type="text" id="user" size="20" name="Customer_Login"
value="&mvte:global:Customer_Login;"><br><br>
<input type="radio" name="Action" value="LOGN" checked="checked" style="display: none;">
<label for="pass">Password:</label> <input type="password" id="pass" size="20"
name="Customer_Password"><br><br>
<mvt:item name="buttons" param="Login" /><br><br>
</form>

</mvt:if>

<mvt:comment>For all other products, display the regular layout</mvt:comment>

<mvt:else>

<mvt:item name="product_display" />

<mvt:if expr="l.settings:product_count NE 0">
<br><br>
<mvt:item name="fonts" param="hdr_font">
<b>Related Item(s)</b><br>
</mvt:item>

<mvt:item name="product_list" />
</mvt:if>
<mvt:item name="prod_ctgy_hdft" param="prod_footer" />
</blockquote>

</mvt:if>

</td></tr>

<tr><td align="left" valign="bottom">
<mvt:item name="hdft" param="footer" />
</td></tr>
</table>

<mvt:item name="hdft" param="global_footer" />
</mvt:item>
</html>

2 Comments:

At July 23, 2008 7:51 PM , Blogger Shari Sultana said...

You've got a really great website and very informational blog Leanne. Wow. I should visit here more often!

Shari

 
At August 10, 2008 9:15 AM , Anonymous NetBlazon said...

This is a great tip! And the toolkit is definitely invaluable.

 

Post a Comment

<< Home