															<?xml version="1.0" ?>
<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>Scot's Miva Scripts News and Updates</title>
<link>https://www.scotsscripts.com/blog/miva-merchant-miva-script-news.html</link>
<description>Post about Miva Merchant, SEO, web development, HTML5, CSS3, javascript and jquery, and other web tidbits.</description>
<copyright>Copyright 2026 www.scotsscripts.com</copyright>
<generator>Scots Blogger Miva Merchant Module by https://www.scotsscripts.com</generator>
<atom:link href="https://www.scotsscripts.com/blog/feed" rel="self" type="application/rss+xml" />

<lastBuildDate>Sat, 28 Feb 2026 10:35:00 GMT</lastBuildDate>

<item>
<title><![CDATA[Miva Merchant Shadows Modals Made Simple]]></title>
<link>http://www.scotsscripts.com/blog/miva-merchant-shadows-modals-made-simple.html</link>
<description>There are times you want the customer to click on something and see a popup modal with information in it. Modals in Shadows are easy to make, but can be confusing at first.</description> 
<pubDate>Sat, 28 Feb 2026 10:35:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/miva-merchant-shadows-modals-made-simple.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>
	A modal (also called a modal window, popup, dialog box, or lightbox) pops up over the main content of a webpage when someone clicks a trigger. It can be small, just a box, or it can cover the entire screen.<br>
</p>
<p>
	Modals are a great way to focus your customer's attention on something they need to do or read.
</p>
<p>
	For example, the most common modal in the history of ecommerce is the modal popup on many payment screens that explains what a credit card CVV&nbsp;code is.
</p>
<p>
	<b>Modals in Miva Merchant</b>
</p>
<p>
	The current CSS&nbsp;framework in Miva Merchant is based on a proprietary blend of styles called Shadows. The modal examples here <b>only</b> work with the Shadows CSS&nbsp;framework.
</p>
<p>
	<b>Modal Example 1:&nbsp;Credit Card CVV</b>
</p>
<p>
	Notice the <code>data-dialog-trigger</code> in the link and the <code>data-dialog</code> in the modal. These must match for the modal to work.
</p>
<p>
	You also need to make sure the <code>aria-labelledby</code> matches the id for the <code>c-dialog__title</code> section, for proper accessibility as well as making sure IDs are not repeated.
</p>
<pre class="p-3 bg-light rounded">&lt;mvt:comment&gt;
#
# Modal Trigger
#
&lt;/mvt:comment&gt;
  
&lt;a data-dialog-trigger="cvv-modal"&gt;What is a CVV code?&lt;/a&gt;
  
&lt;mvt:comment&gt;
#
# Modal Box/Content
#
&lt;/mvt:comment&gt;
  
&lt;div class="c-dialog" data-dialog="cvv-modal" aria-hidden="true"&gt;
	&lt;div class="c-dialog__overlay" tabindex="-1"&gt;
		&lt;div class="c-dialog__container" aria-labelledby="cvvModal" aria-modal="true" role="dialog"&gt;
			&lt;header class="c-dialog__header"&gt;
				&lt;p id="cvvModal" class="c-dialog__title c-heading-foxtrot"&gt;
					CVV Explained
				&lt;/p&gt;
				&lt;button class="c-dialog__close" aria-label="Close Dialog" data-dialog-close&gt;&lt;/button&gt;
			&lt;/header&gt;
			&lt;div class="c-dialog__content"&gt;
				On the back of your credit card there is a small box with three numbers. This is the CVV code.
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;&lt;/code&gt;
  </pre>
<p>
	<b>Modal Example 2:&nbsp;Swatch Information</b>
</p>
<p>
	Remember to modify the <code>data-dialog-trigger</code>, <code>data-dialog</code>, <code>aria-labelledby</code> and <code>c-dialog__title</code> id to reflect what your modal is about.
</p>
<pre class="p-3 bg-light rounded">
&lt;mvt:comment&gt;
#
# Modal Trigger
#
&lt;/mvt:comment&gt;
  
&lt;a data-dialog-trigger="swatch-modal"&gt;Swatch Details&lt;/a&gt;
  
&lt;mvt:comment&gt;
#
# Modal Box/Content
#
&lt;/mvt:comment&gt;
&lt;div class="c-dialog" data-dialog="swatch-modal" aria-hidden="true"&gt;
	&lt;div class="c-dialog__overlay" tabindex="-1"&gt;
		&lt;div class="c-dialog__container" aria-labelledby="swatchModal" aria-modal="true" role="dialog"&gt;
			&lt;header class="c-dialog__header"&gt;
				&lt;p id="swatchModal" class="c-dialog__title c-heading-foxtrot"&gt;
					Swatch Details
				&lt;/p&gt;
				&lt;button class="c-dialog__close" aria-label="Close Dialog" data-dialog-close&gt;&lt;/button&gt;
			&lt;/header&gt;
			&lt;div class="c-dialog__content"&gt;
				The swatches are representations of the colors and patterns you can choose for your products. Here are more detailed version of swatches.
				&lt;img src="swatch1.png"&gt; etc etc etc
			&lt;/div&gt;
		&lt;/div&gt;
	&lt;/div&gt;
&lt;/div&gt;
</pre>
<p>
	<b>Best Practices:</b>
</p>
<p>
	Modal Triggers:&nbsp;Put the modal triggers wherever you need them.
</p>
<p>
	Modal Code:&nbsp;It's best to put the modal code itself at the bottom of the page, above the javascript/global footer. The reason is Shadows modals occasionally interfere with page layout if the modal code is embedded in the content.
</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Miva Merchant Shadows/Elements CSS Cheat Sheet]]></title>
<link>http://www.scotsscripts.com/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com/blogimages/elements_css_cheat_sheet_miva_merchant_scots_scripts_1554407494.png" />A cheat sheet for Miva Merchant Elements CSS with all CSS elements on one page and in a mostly orderly fashion.]]></description>
<pubDate>Sat, 28 Feb 2026 01:42:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>This is a quick list of Shadows (Elements) CSS classes&nbsp;I put together over a couple glasses of scotch at the end of the night. Let me know if you see any problems.&nbsp;</p><p>Shadows CSS is based off three outdated and for the most part obsolete ideas. Unfortunately so much time and effort was invested in creating Shadows CSS that it's highly doubtful we'll ever see the day when they use something modern and widely supported such as Bootstrap for a framework.</p><p>If you're interested in switching over to Bootstrap let us know, we've converted several stores to Bootstrap which makes it much easier to maintain and code in the long run.</p><p>New and updated classes added Feb 2026</p><div class="alert alert-info"><div class="row"><div class="col-md-4"><p><strong>Objects</strong><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#css-layout">CSS layout</a> <br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#lists">lists</a> <br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#table">table</a>&nbsp;(see under components for more)<br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#wrapper">wrapper</a></p><hr><p><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#extensions"><strong>Extensions</strong></a></p></div><div class="col-md-4"><p><strong>Components</strong><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#buttons">buttons</a> <br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#control-groups">control groups</a> <br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#divider">divider</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#forms">forms</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#keyline">keyline</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#menu">menu</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#navigation">navigation</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#tables">tables</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#typography">headings</a><br></p></div><div class="col-md-4"><p><strong>Utilities</strong><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#borders">borders</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#clear-fix">clear fix</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#colors">colors</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#display">display</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#grids">grids</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#icons">icons</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#typography2">typography</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#vertical-alignment">vertical alignment</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#widths">widths</a><br><a href="/blog/Miva-Merchant-Elements-CSS-Cheat-Sheet.html#z-index">z-index</a><br></p></div></div></div><p></p><h2 class="alert alert-danger"><a href="https://docs.miva.com/elements/objects.html" target="_blank">CSS Objects</a></h2><p><a name="css-layout"></a></p><p><a href="https://docs.miva.com/elements/objects.html#layout" target="_blank">CSS Layout</a></p><p>Breakpoints for grid items for the most part seems to happen automatically in the Elements CSS framework. If a class has known breakpoint modifiers, they&nbsp;(&nbsp;--s --m --l --w ) can be added to the end of the class name.</p><p>Simple layout example. The widths can be 1-12 and can be mixed and matched. Columns will wrap if the widths in a layout add up to more than 12. More information on widths at the bottom of the components section.</p><pre class="prettyprint linenums:1">### two columns<br>&lt;div class="o-layout"&gt;    &lt;div class="o-layout__item u-width-6"&gt;    &lt;/div&gt;    &lt;div class="o-layout__item u-width-6"&gt;    &lt;/div&gt;&lt;/div&gt;</pre><p>Layout classes:</p><pre class="prettyprint linenums:1">o-layouto-layout__itemo-layout o-layout--row-reverseo-layout o-layout--column --m --l --wo-layout o-layout--column-reverse --m --l --wo-layout o-layhout--fullo-layout o-layout--narrowo-layout o-layout--wideo-layout o-layout--flusho-layout o-layout--spaced<br>### vertical alignment<br>o-layout o-layout--align-topo-layout o-layout--align-centero-layout o-layout--align-bottomo-layout o-layout--align-baselineo-layout o-layout--align-stretch<br>### horizontal alignment<br>o-layout o-layout--justify-starto-layout o-layout--justify-centero-layout o-layout--justify-endo-layout o-layout--justify-aroundo-layout o-layout--justify-between<br>### flex ordering<br>o-layout o-layout__first	--s --m --l --wo-layout o-layout__last<br>### growth control<br>o-layout--growo-layout--no-growo-layout--shrinko-layout--no-shrink<br>### wrap<br>o-layout--no-wrapo-layout--wrapo-layout--wrap-reverse</pre><p><a name="lists"></a></p><p><a href="https://docs.miva.com/elements/objects.html#lists" target="_blank">Lists</a></p><pre class="prettyprint linenums:1">o-list-bareo-list-blocko-list-inlineo-list-inline o-list-inline--narrowo-list-inline o-list-inline--wide</pre><p><a name="table"></a></p><p><a href="https://docs.miva.com/elements/objects.html#tables" target="_blank">Tables</a>&nbsp;(see below in the components section for code example)</p><pre class="prettyprint linenums:1">o-tableo-table o-table--fixedo-table o-table--narrowo-table o-table--wideo-table o-table-borderless</pre><ul></ul><p><a name="wrapper"></a></p><p><a href="https://docs.miva.com/elements/objects.html#wrapper" target="_blank">Wrapper</a></p><pre class="prettyprint linenums:1">o-wrappero-site-wrappero-wrapper o-wrapper--fullo-wrapper--flush</pre><p></p><h2 class="alert alert-danger"><a href="https://docs.miva.com/elements/components.html" target="_blank">Components</a><br></h2><p><a name="buttons"></a></p><p><a href="https://docs.miva.com/elements/components.html#buttons" target="_blank">Buttons</a></p><pre class="prettyprint linenums:1">c-button c-button-primaryc-button c-button--secondaryc-button c-button-darkc-button c-button-dark--secondary<br>c-button c-button--circlec-button c-button--square<br>c-button c-button--tinyc-button c-button--smallc-button c-button--largec-button c-button--huge<br>c-button c-button--full<br>c-button c-button--hollowc-button c-button--clearc-button disabled=""c-button is-errorc-button c-button--glossy<br>c-button--as-link</pre><p><a name="control-groups"></a></p><p><a href="https://docs.miva.com/elements/components.html#buttons" target="_blank"></a><a href="https://docs.miva.com/elements/components.html#buttons" target="_blank"></a><a href="https://docs.miva.com/elements/components.html#control-groups" target="_blank">Control Groups:</a> make button groups</p><pre class="prettyprint linenums:1">&lt;div class="c-control-group"&gt;    &lt;button class="c-button c-control-group__button"&gt;Button 1&lt;/button&gt;    &lt;button class="c-button c-control-group__button"&gt;Button 2&lt;/button&gt;    &lt;button class="c-button c-control-group__button"&gt;Button 3&lt;/button&gt;&lt;/div&gt;<br>### Modifiers: &lt;div class="c-control-group c-control-group--rounded"&gt;...&lt;/div&gt;<br>c-button c-control-group--roundedc-button c-control-group--rounded-rightc-button c-control-group--rounded-leftc-button c-control-group--stacked</pre><p><a name="divider"></a></p><p><a href="https://docs.miva.com/elements/components.html#divider" target="_blank">Divider</a></p><pre class="prettyprint linenums:1">c-dividerc-divider c-divider--top</pre><p><a name="forms"></a></p><p><a href="https://docs.miva.com/elements/components.html#forms" target="_blank">Forms</a></p><pre class="prettyprint linenums:1">&lt;form&gt;    &lt;fieldset&gt;        &lt;legend&gt;Example&lt;/legend&gt;        &lt;ul class="c-form-list"&gt;            &lt;li class="c-form-list__item"&gt;                &lt;label class="c-form-label" for="example1"&gt;Example&lt;/label&gt;                &lt;input id="example1" class="c-form-input" type="text" placeholder="something"&gt;                &lt;button class="c-button c-control-group__button"&gt;Submit&lt;/button&gt;            &lt;/li&gt;        &lt;/ul&gt;    &lt;/fieldset&gt;&lt;/form&gt;<br>### select<br>&lt;select id="example2" class="c-form-select"&gt;    &lt;option value="abc"&gt;Option ABC&lt;/option&gt;    &lt;option value="def"&gt;Option DEF&lt;/option&gt;&lt;/select&gt;<br>### textarea<br>&lt;textarea id="example3" class="c-form-input c-form-input--long" placeholder="something here"&gt;&lt;/textarea&gt;<br>### checkbox<br>&lt;label class="c-form-checkbox"&gt;    &lt;input class="c-form-checkbox__input" type="checkbox"&gt;    &lt;span class="c-form-checkbox__caption"&gt;Check Me&lt;/span&gt;&lt;/label&gt;<br>### inline checkbox<br>&lt;li class="c-form-list__item"&gt;&lt;label class="c-form-checkbox c-form-checkbox--inline"&gt;    &lt;input class="c-form-checkbox__input" type="checkbox"&gt;    &lt;span class="c-form-checkbox__caption"&gt;Inline 1&lt;/span&gt;&lt;/label&gt;&lt;label&gt;...&lt;/label&gt;etc&lt;/li&gt;<br>### radio<br>&lt;label class="c-form-checkbox c-form-checkbox--radio"&gt;    &lt;input class="c-form-checkbox__input" type="radio" name="agree" value="yes"&gt;    &lt;span class="c-form-checkbox__caption"&gt;Yes&lt;/span&gt;&lt;/label&gt;<br>### inline radio<br>&lt;li class="c-form-list__item"&gt;&lt;label class="c-form-checkbox c-form-checkbox--radio c-form-checkbox--inline"&gt;    &lt;input class="c-form-checkbox__input" type="radio" name="inline-radio" value="1"&gt;    &lt;span class="c-form-checkbox__caption"&gt;Radio 1&lt;/span&gt;&lt;/label&gt;&lt;label&gt;...&lt;/label&gt;etc...&lt;/li&gt;<br>### inline/grid form<br>&lt;ul class="c-form-list o-layout"&gt;    &lt;li class="c-form-list__item o-layout__item"&gt;...&lt;/li&gt;&lt;/ul&gt;</pre><p><a name="keyline"></a></p><p><a href="https://docs.miva.com/elements/components.html#keyline" target="_blank">Keyline</a></p><pre class="prettyprint linenums:1">c-keylinec-keyline--thickc-keyline--small<br>### keylines under headingsc-heading--keyline</pre><p><a name="menu"></a></p><p><a href="https://docs.miva.com/elements/components.html#menu" target="_blank">Menu</a></p><pre class="prettyprint linenums:1">&lt;nav class="c-menu"&gt;    &lt;h5 class="c-menu__title u-text-uppercase"&gt;Quick Links&lt;/h5&gt;    &lt;ul class="c-menu__list u-text-uppercase"&gt;        &lt;li&gt;&lt;a class="c-menu__link" href=""&gt;About Us&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;&lt;a class="c-menu__link" href=""&gt;FAQs&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;&lt;a class="c-menu__link" href=""&gt;Contact Us&lt;/a&gt;&lt;/li&gt;        &lt;li&gt;&lt;a class="c-menu__link" href=""&gt;Become an Affiliate&lt;/a&gt;&lt;/li&gt;    &lt;/ul&gt;&lt;/nav&gt;</pre><p><a name="mini-modal"></a></p><p><a href="https://docs.miva.com/elements/components.html#mini-modal" target="_blank">Mini-Modal</a></p><pre class="prettyprint linenums:1">&lt;a data-mini-modal="" href="LARGE_IMAGE_URL" title="image"&gt;    &lt;img src="IMAGE_URL"&gt;&lt;/a&gt;</pre><p><a name="navigation"></a></p><p><a href="https://docs.miva.com/elements/components.html#navigation" target="_blank">Navigation</a></p><pre class="prettyprint linenums:1">&lt;nav class="u-text-uppercase c-navigation"&gt;    &lt;input id="mainNavButton" class="c-navigation__trigger" type="checkbox"&gt;    &lt;label class="c-navigation__label" for="mainNavButton"&gt;Menu&lt;/label&gt;    &lt;ul class="c-navigation__row"&gt;        &lt;li class="c-navigation__list"&gt;&lt;a class="c-navigation__link" href="#"&gt;All Products&lt;/a&gt;&lt;/li&gt;        &lt;li class="c-navigation__list"&gt;&lt;a class="c-navigation__link" href="#"&gt;Category 1&lt;/a&gt;&lt;/li&gt;        &lt;li class="c-navigation__list"&gt;&lt;a class="c-navigation__link" href="#"&gt;Category 2&lt;/a&gt;&lt;/li&gt;        &lt;li class="c-navigation__list"&gt;&lt;a class="c-navigation__link" href="#"&gt;Category 3&lt;/a&gt;&lt;/li&gt;        &lt;li class="c-navigation__list"&gt;&lt;a class="c-navigation__link" href="#"&gt;More&lt;/a&gt;&lt;/li&gt;    &lt;/ul&gt;&lt;/nav&gt;</pre><p><a name="tables"></a></p><p><a href="https://docs.miva.com/elements/components.html#tables" target="_blank">Tables</a></p><pre class="prettyprint linenums:1">## main table classesc-table-simplec-table-simple__row<br>c-table-strippedc-table-stripped__row<br>c-table-responsivec-table-responsive_theadc-table-responsive__rowc-table-responsive__cell<br>&lt;table class="c-table-simple"&gt;    &lt;thead&gt;    &lt;tr class="c-table-simple__row"&gt;        &lt;th class="c-table-simple__cell"&gt;Name&lt;/th&gt;        &lt;th class="c-table-simple__cell"&gt;Age&lt;/th&gt;        &lt;th class="c-table-simple__cell"&gt;Feet&lt;/th&gt;        &lt;/tr&gt;    &lt;/thead&gt;    &lt;tbody&gt;        &lt;tr class="c-table-simple__row"&gt;            &lt;td class="c-table-simple__cell"&gt;Tim Smith&lt;/td&gt;            &lt;td class="c-table-simple__cell"&gt;25&lt;/td&gt;            &lt;td class="c-table-simple__cell"&gt;2&lt;/td&gt;        &lt;/tr&gt;    &lt;/tbody&gt;&lt;/table&gt;<br>### striped<br>&lt;table class="c-table-stripped"&gt;...&lt;/table&gt;<br>&lt;table class="c-table-responsive"&gt;...&lt;/table&gt;<br>## width of TDsc-table-simple__cellc-table-simple__cell--standardc-table-simple__cell--wide</pre><p><a name="typography"></a></p><p><a href="https://docs.miva.com/elements/components.html#typography" target="_blank">Headings</a></p><pre class="prettyprint linenums:1">&lt;h1 class="c-heading-alpha"&gt;Heading Alpha &lt;span class="c-heading--subheading"&gt;Subheading&lt;/span&gt;&lt;/h1&gt;<br>&lt;h1 class="c-heading-alpha"&gt;...&lt;/h1&gt;&lt;h2 class="c-heading-bravo"&gt;...&lt;/h2&gt;&lt;h3 class="c-heading-charlie"&gt;...&lt;/h3&gt;&lt;h4 class="c-heading-delta"&gt;...&lt;/h4&gt;&lt;h5 class="c-heading-echo"&gt;...&lt;/h5&gt;&lt;h6 class="c-heading-foxtrot"&gt;...&lt;/h6&gt;<br>&lt;p class="c-text-body"&gt;...&lt;/p&gt;<br>&lt;h1 class="c-heading-alpha c-heading--keyline"&gt;...&lt;/h1&gt; (adds a little divider under the heading)<br>## subheadingsc-heading--subheadingc-heading--subheading--x-smallc-heading--subheading--smallc-heading--subheading--large</pre><p></p><h2 class="alert alert-danger"><a href="https://docs.miva.com/elements/utilities.html" target="_blank">Utilities</a></h2><p><a name="borders"></a></p><p><a href="https://docs.miva.com/elements/utilities.html#borders" target="_blank">Borders:</a>&nbsp;Borders can be used on any element. The example below shows border classes being used on buttons.</p><pre class="prettyprint linenums:1">u-border-noneu-border-thicku-border-roundedu-border-square<br>### border color classes: these are based on theme, so try other color names as well as those below.<br>u-border-redu-border-yellowu-border-blueu-border-greenu-border-black<br>### button examples<br>&lt;button class="c-button u-border-none"&gt;No Border&lt;/button&gt;&lt;button class="c-button u-border-thick"&gt;Thick Border&lt;/button&gt;&lt;button class="c-button u-border-rounded"&gt;Rounded Border&lt;/button&gt;&lt;button class="c-button u-border-square"&gt;Square Border&lt;/button&gt;</pre><p><a name="clear-fix"></a></p><p><a href="https://docs.miva.com/elements/utilities.html#clear-fix" target="_blank">Clear Fix</a></p><pre class="prettyprint linenums:1">u-clear-fix</pre><p><a name="colors"></a></p><p><a href="https://docs.miva.com/elements/utilities.html#colors" target="_blank">Colors</a></p><p>Background colors:</p><pre class="prettyprint linenums:1">u-bg-redu-bg-yellowu-bg-blueu-bg-greenu-bg-blacku-bg-gray-50u-bg-gray-40u-bg-gray-30-gray-10u-bg-gray-20u-bg-gray-10u-bg-whiteu-bg-primaryu-bg-secondaryu-bg-tertiaryu-bg-accentu-bg-highlight</pre><p>Text colors:</p><pre class="prettyprint linenums:1">u-color-redu-color-yellowu-color-blueu-color-greenu-color-blacku-color-gray-50u-color-gray-40u-color-gray-30u-color-gray-20u-color-gray-10u-color-whiteu-color-primaryu-color-secondaryu-color-tertiaryu-color-accentu-color-highlight</pre><p><a name="display"></a></p><p><a href="https://docs.miva.com/elements/utilities.html#display" target="_blank">Display:</a>&nbsp;These can take breakpoint modifiers. They work from small to wide.&nbsp;</p><p>If you hide on small, it will hide on everything unless you specifically tell it not to:&nbsp;--s --m --l --w<br></p><pre class="prettyprint linenums:1">u-hide-visually - hide visually but not for screen readersu-hidden - hide from everythingu-invisible - visually hidden but no layout changeu-flexu-blocku-shownu-inlineu-inline-blocku-visible<br>### Add bBreakpoint modifiers to the class, such as:<br>u-hidden--s<br>### Hide on small screen, show on all others:<br>&lt;div class="u-hidden--s u-shown--m"&gt;...&lt;/div&gt;<br>### Hide on large and wide screen, show on small and medium:<br>&lt;div class="u-hidden--l"&gt;...&lt;/div&gt;</pre><p><a name="grids"></a></p><p><a href="https://docs.miva.com/elements/utilities.html#grids" target="_blank">Grids:</a>&nbsp;Create auto columns that wrap intelligently</p><pre class="prettyprint linenums:1">o-layout u-grids2o-layout u-grids3o-layout u-grids4etc...<br>u-grids-1u-grids-2u-grids-3u-grids-4u-grids-5u-grids-6u-grids-7u-grids-8u-grids-9u-grids-10u-grids-11u-grids-12<br>### Example<br>    &lt;div class="o-layout u-grids-3"&gt;    &lt;div class="o-layout__item"&gt;    &lt;/div&gt;    &lt;div class="o-layout__item"&gt;    &lt;/div&gt;    &lt;div class="o-layout__item"&gt;    &lt;/div&gt;    &lt;div class="o-layout__item"&gt;    &lt;/div&gt;    &lt;div class="o-layout__item"&gt;    &lt;/div&gt;&lt;/div&gt;<br>### breakpoints: all grid classes can have breakpoints added, --s --m --l --w<br>### breakpoint exmaple, show one column on small, show three on medium and up:<br>o-layout u-grids-1 u-grids-3--m </pre><p>Use with breakpoints:</p><pre class="prettyprint linenums:1">o-layout u-grids-1 u-grids-3--m</pre><p><a name="icons"></a></p><p><a href="https://docs.miva.com/elements/utilities.html#iconography" target="_blank">Iconography</a></p><p>Go here for a list of available icons:&nbsp;<a href="https://docs.miva.com/elements/iconography/demo.html" target="_blank">https://docs.miva.com/elements/iconography/demo.html</a><br></p><pre class="prettyprint linenums:1">&lt;span class="u-icon-question"&gt;&lt;/span&gt;&lt;span class="u-icon-envelope"&gt;&lt;/span&gt;etc...</pre><p><a name="print"></a></p><p><a href="https://docs.miva.com/elements/utilities.html#print" target="_blank">Print</a></p><p>Print styles are handled automatically (from HTML5 Boilerplate)</p><pre class="prettyprint linenums:1">### only display on printout<br>u-printable__content</pre><p><a name="typography2"></a></p><p><a href="https://docs.miva.com/elements/utilities.html#typography" target="_blank">Typography</a><br></p><pre class="prettyprint linenums:1">### font-families<br>u-font-primaryu-font-secondary<br>### alignment --s --m --l --w<br>u-text-leftu-text-centeru-text-rightu-text-justify<br>### sizing<br>u-font-tinyu-font-smallu-font-mediumu-font-largeu-font-huge<br>### weight, transformations, decorations<br>u-text-lightu-text-regularu-text-mediumu-text-boldu-text-boldestu-text-italicu-text-lowercaseu-text-uppercaseu-text-capsu-text-strikeu-text-underlineu-text-normalu-text-revert<br>u-text-constrain (max 75chars per line)</pre><p><a name="vertical-alignment"></a></p><p><a href="https://docs.miva.com/elements/utilities.html#vertical-alignment" target="_blank">Vertical Alignment</a></p><pre class="prettyprint linenums:1">u-align-baselineu-align-bottomu-align-middleu-align-top<br>u-vertical-align-parentu-vertical-align-center</pre><p><a name="widths"></a></p><p><a href="https://docs.miva.com/elements/utilities.html#widths" target="_blank">Widths:</a>&nbsp;These give a fluid width to whichever element they are applied to and include breakpoints --s --m --l --w</p><pre class="prettyprint linenums:1">u-width-# --s --m --l --w (# is the number of columns wide, out of 12)<br>&lt;div class="o-layout"&gt;    &lt;div class="o-layout__item u-width-6"&gt;    &lt;/div&gt;    &lt;div class="o-layout__item u-width-6"&gt;    &lt;/div&gt;&lt;/div&gt;<br>### with various breakpoints, can be included in one o-layout and cols will auto wrap to fit<br>o-layout__item u-width-12 u-width-4--mo-layout__item u-width-6 u-width-4--mo-layout__item u-width-6 u-width-4--m<br>### width classes, each can take a breakpoint as well --s --m --l --w (width of 1 on small, width of 6 on medium and up: u-width-1--s u-width-6--m)<br>u-width-1u-width-2u-width-3u-width-4u-width-5u-width-6u-width-7u-width-8u-width-9u-width-10u-width-11u-width-12<br>### offset classes, also can take breakpoints --s --m --l --w<br>u-offset-1u-offset-2u-offset-3u-offset-4u-offset-5u-offset-6u-offset-7u-offset-8u-offset-9u-offset-10u-offset-11u-offset-12</pre><p><a name="z-index"></a></p><p><a href="https://docs.miva.com/elements/utilities.html#z-index" target="_blank">Z-Index</a></p><pre class="prettyprint linenums:1">u-below-contentu-over-contentu-over-controlu-over-pageu-over-screenu-over-everything</pre><p><a name="extensions"></a></p><h2><a href="https://docs.miva.com/elements/extensions.html" target="_blank">Extensions</a></h2><p>These are css/html components that can be used in different readythemes, a sort of plug-n-play system.</p><p><a href="https://docs.miva.com/elements/extensions.html#ajax-add-to-cart" target="_blank">AJAX Add-to-Cart</a></p><p>Adds a product to the basket without reloading the page.</p><p><a href="https://docs.miva.com/elements/extensions.html#breadcrumbs" target="_blank">Breadcrumbs</a></p><p><a href="https://docs.miva.com/elements/extensions.html#category-tree" target="_blank">Category Tree</a></p><p><a href="https://docs.miva.com/elements/extensions.html#hero" target="_blank">Hero</a></p><p><a href="https://docs.miva.com/elements/extensions.html#hero-slider" target="_blank">Hero Slider</a></p><p>Image carousel header/section</p><p><a href="https://docs.miva.com/elements/extensions.html#messages" target="_blank">Messages</a></p><p>Alerts, success, info, etc...</p><p><a href="https://docs.miva.com/elements/extensions.html#mini-basket" target="_blank">Mini-Basket</a></p><p>Mini basket that flies out from the right edge of the browser.</p><p><a href="https://docs.miva.com/elements/extensions.html#navigation" target="_blank">Navigation</a></p><p>Use dropdown, overlfow, and overlay style navigations.</p><p><a href="https://docs.miva.com/elements/extensions.html#product-carousel" target="_blank">Product Carousel</a></p><p><a href="https://docs.miva.com/elements/extensions.html#search-preview" target="_blank">Search Preview</a></p><p><a href="https://docs.miva.com/elements/extensions.html#spinner" target="_blank">Spinner</a></p><p>Ajax spinner icon.</p><p></p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[New Module: Index Now]]></title>
<link>http://www.scotsscripts.com/blog/new-module-index-now.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com/mm9/graphics/00000001/1/scots_scripts_index_now_2026.png" />Store owners know that the faster new products are indexed by search engines the better. This module submits your URLs to IndexNow.org which means that search engines crawl your links significantly faster than normal.]]></description>
<pubDate>Fri, 27 Feb 2026 17:10:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/new-module-index-now.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>We released Index Now in Feb of 2026 after months of testing on Scot's Scripts and other sites. Now it's ready for prime time. </p><p><a class="text-decoration-none fw-bold" href="https://www.scotsscripts.com/index-now.html">Get More Info and Purchase a License Here</a></p><p><b>What does Index Now do?</b></p><p>Index Now does one thing: It automatically submits the URLs from your store to&nbsp;<a href="https://www.indexnow.org/" class="text-decoration-none">https://www.indexnow.org/</a>&nbsp;indexing service.</p><p>Bing, Yandex, and other search engines use this indexing service to help them decide what links to crawl. What makes Index Now useful is that these search engines will crawl your links much quicker than they would otherwise. This also means search engines such as Duck Duck Go (and others) which use Bing to help get results will index your new products faster as well.</p><p>Installing the module is a breeze, there is barely anything to do except enter your license and activate it.</p><p>One of the extra features the module provides is a way to submit your existing URLs. Chances are your existing URLs are already indexed, but it doesn't hurt anything to submit them anyway.</p><p><b>What else does it do?</b></p><p>Boy am I glad you asked. There is a utility to submit all of your existing Miva Merchant store URLs. Products, categories, and pages. It also handles things like updating and deleting URLs. On a technical level it leverages the URI&nbsp;notification system so it knows when URIs are added, updated, and deleted and sends the info the the IndexNow.org index service.</p><p><b>Why did we make this module?</b></p><p>Easy answer. I was banging his head against a wall trying to figure out why Bing wouldn't index Scot's Scripts (and therefore, Duck Duck Go also wouldn't index the site.) Everything was correct on the site and the site is fully indexed by Google and other search engines. One day when&nbsp;I was deep into trying to figure this out I ran across IndexNow.org and decided to try the index service.</p><p>You know what happened?&nbsp;The next time I checked Bing and Duck Duck Go Scot's Scripts was there. I attribute this fully to the Index Now module because I'd been trying for probably close to a year to resolve the Bing issue without success.</p><p><b>Why Should&nbsp;You Use Index Now?</b></p><p>We can all use more ways to get our product and other store links out there. Simple as that. Used along side sitemaps and analytics and other SEO and SEO related services it just gets your stuff out there from another angle.</p><p class="text-decoration-none"><b>Does the <a href="https://www.scotsscripts.com/scots-blogger-miva-merchant-blogging-module.html" target="_blank" class="text-decoration-none">blog module</a> work with Index&nbsp;Now?</b></p><p class="text-decoration-none">It's on the roadmap. I'd say <a href="https://www.scotsscripts.com/scots-blogger-miva-merchant-blogging-module.html" target="_blank" class="text-decoration-none">Scot's Blogger</a> will have support for using the Index Now module when v3.6 is released sometime in the next few months. </p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Mivascript 101: The miva_splitstring(..) Function With Examples]]></title>
<link>http://www.scotsscripts.com/blog/mivascript-101-the-miva_splitstring-function-with-examples.html</link>
<description>Use miva_splitstring&#40;..&#41; to quickly take any delineated list and turn it into a Mivascript array. What used to take two or three lines of code now takes one line of code.</description> 
<pubDate>Thu, 13 Feb 2025 08:08:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/mivascript-101-the-miva_splitstring-function-with-examples.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>
	What is <a href="https://www.mivascript.com/item/mivascript-functions/miva_splitstring.html" target="_blank" class="text-decoration-none">miva_splitstring(..)</a> good for? All sorts of things.
</p>
<p>
	<b>1. Processing checkbox data that share the same input name.</b>
</p>
<p>
	Here's a simple example of giving your customer a range of checkboxes to choose from, such as favorite colors.&nbsp;
</p>
<pre class="p-3 bg-light rounded">&lt;p&gt;Select your favorite colors:&lt;/p&gt;
&lt;form&gt;
	&lt;input type="checkbox" name="colors" value="Red"&gt; Red
	&lt;input type="checkbox" name="colors"value="Green"&gt; Green
	&lt;input type="checkbox" name="colors"value="Yellow"&gt; Yellow
	&lt;input type="checkbox" name="colors"value="White"&gt; White
	&lt;input type="checkbox" name="colors"value="Black"&gt; Black
	&lt;button type="submit"&gt;Submit&lt;/button&gt;
&lt;/form&gt;</pre>
<p>
	If the customer selects the red checkbox the value&nbsp;<code>g.colors</code> will be <code>red</code>&nbsp;however if the customer selects red, green, and yellow, the <code>g.colors</code> value will be <code>red,green,yellow</code>
</p>
<p>
	Let's say we want to display these values in a Miva Merchant template after the form is submitted, and there are several ways to do this.
</p>
<p>
	<b>The most inefficient </b>way is to have a bunch of mvt:if statements such as:
</p>
<pre class="p-3 bg-light rounded">&lt;mvt:if expr="g.color EQ 'red'"&gt;
	&lt;p&gt;You selected red!&lt;/p&gt;
&lt;/mvt:if&gt;
&lt;mvt:if expr="g.color EQ 'white'"&gt;
	&lt;p&gt;You selected white!&lt;/p&gt;
&lt;/mvt:if&gt;
</pre>
<p>
	Using this method is simple to code but requires maintenance if the color options change or you want to change the general message, such as changing "You selected..." to "You chose..."
</p>
<p>
	The most efficient way of doing this is to turn the g.colors variable into an array and then loop through the selected values. To do this we use miva_splitstring(..) to turn g.colors into an array:
</p>
<pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.ok" value="miva_splitstring(g.colors,',',l.settings:colors,'trim')" /&gt;
&lt;mvt:foreach iterator="color" array="colors"&gt;
	&lt;p&gt;You selected &amp;mvte:color;&lt;/p&gt;
&lt;/mvt:foreach&gt;</pre>
<p>
	Using this method handles 1 or more selections without any issue and if you want to add colors to the your checkbox list that's all your have to do. The only time you need to change the "You selected.."&nbsp;section is if you want to change the words to something such as "You chose..."&nbsp;
</p>
<p>
	<b>Bonus Tip:</b>
</p>
<p>
	You can use <code>miva_splitstring(...)</code> to set up the checkboxes as well, making it even easier to maintain the form.
</p>
<pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.settings:checkbox_colors" value="'Red,Green,Yellow,White,Black'" /&gt;

&lt;mvt:assign name="l.ok" value="miva_split_string(l.settings:checkbox_colors,',',l.settings:color_array,'trim')" /&gt;

&lt;p&gt;Select your favorite colors:&lt;/p&gt;

&lt;form...&gt;
&lt;mvt:foreach iterator="color" array="color_array"&gt;
	&lt;input type="checkbox" name="colors" value="&amp;mvt:color;"&gt; &amp;mvt:color
&lt;/mvt:foreach&gt;
&lt;button type="submit"&gt;Submit&lt;/button&gt;
&lt;/form&gt;</pre>
<p>
	Using this method is very easy to maintain because all you need to do is add or remove colors from the <code>l.settings:checkbox_colors</code> variable. The <code>mvt:foreach</code> loop rolls through each one and outputs the checkbox and all you ever have to do is update what colors you want to use.
</p>
<p>
	<b>2. Miva Merchant Custom Field Lists</b>
</p>
<p>
	How many of us have used custom fields to hold a list of product codes or some such thing?
</p>
<p>
	Let's say we have a "suggested products" custom field where we list product codes separated by spaces. After we load the custom field into say <code>l.products</code> the value will be something like this:
</p>
<p>
	<code>pcode1 pcode2 pcode3 pcode4</code>
</p>
<p>
	Now let's say we want to load the information for these products into our own product array:
</p>
<pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.ok" value="miva_splitstring(l.product_codes,' ',l.settings:pcodes,'trim')" /&gt;
&lt;mvt:foreach iterator="pcode" array="pcodes"&gt;
	&lt;mvt:comment&gt; ## it is always a good idea to clear a temp variable like this before loading new product (or whatever) data into it ## &lt;/mvt:comment&gt;
	&lt;mvt:assign name="l.temp_product" value="''" /&gt;
	&lt;mvt:do file="g.Module_Library_DB" name="l.ok" value="product_load_code(l.settings:pcode, l.temp_product)" /&gt;
	&lt;mvt:assign name="l.ok" value="miva_array_insert(l.settings:suggested_products,l.temp_product,-1)" /&gt;
&lt;/mvt:foreach&gt;</pre>
<p>
	Now we have an array of basic product information in l.settings:suggested_products that we can loop through and do whatever we want with.j
</p>
<p>
	<b>Pro Tip:</b>
</p>
<p>
	In order to easily use this array it would be a good idea to add formatted prices and URIs if you need the product links. Add a few more function calls in the previous loop to add this data before adding it to the suggested products array:
</p>
<pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.ok" value="miva_splitstring(l.product_codes,' ',l.settings:pcodes,'trim')" /&gt;
&lt;mvt:foreach iterator="pcode" array="pcodes"&gt;
	&lt;mvt:comment&gt; ## it is always a good idea to clear a temp variable like this before loading new product (or whatever) data into it ## &lt;/mvt:comment&gt;
	&lt;mvt:assign name="l.temp_product" value="''" /&gt;
	&lt;mvt:do file="g.Module_Library_DB" name="l.ok" value="product_load_code(l.settings:pcode, l.temp_product)" /&gt;
	&lt;mvt:do file="g.Module_Store_Module_Currency" name="l.settings:temp_product:formatted_price" value="CurrencyModule_AddFormatting(l.settings:module, l.temp_product:price)" /&gt;
	&lt;mvt:do file="g.Module_Store_Module_Currency" name="l.settings:temp_product:formatted_base_price" value="CurrencyModule_AddFormatting(l.settings:module, l.temp_product:base_price)" /&gt;
	&lt;mvt:do file="g.Module_Feature_URI_DB" name="l.ok" value="URI_Load_Product_Canonical(l.temp_product:id, l.temp_product:uri)" /&gt;
	&lt;mvt:assign name="l.ok" value="miva_array_insert(l.settings:suggested_products,l.temp_product,-1)" /&gt;
&lt;/mvt:foreach&gt;</pre>
<p>
	Now you will have your formatted prices and you'll find the product URI&nbsp;in <code>suggested_products:uri:uri</code> - you can also load images and other stuff in it.
</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Miva Merchant Precision Price Display Problem and How To Fix It]]></title>
<link>http://www.scotsscripts.com/blog/miva-merchant-update-price-display-issue.html</link>
<description>The new precision weight/pricing feature for Miva Merchant is a good thing if you're selling screws and need to show smaller than .01 prices. The problem is that precision pricing is affecting everyone who uses discounts, not just people using precision weight.</description> 
<pubDate>Fri, 6 Dec 2024 10:36:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/miva-merchant-update-price-display-issue.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>
	Precision prices are creating quite the problem for discount price display after Miva Merchant 10.11.01 update for a lot of store owners.
</p>
<p>
	Discounts are showing prices like $12.330123 instead of $12.33 on the <code>CTGY</code>, <code>PROD</code>, <code>SRCH </code>&nbsp;and possibly <code>INVC </code>and some email templates, among others.
</p>
<p>
	So how do we fix this? One way is to create a readytheme content section that will adjust the formatted price which is used to display the price.</p>
<h4 class="h4">Step 1. Make a New Readytheme Content Section
</h4>
<p>Go to:</p>
<p><code>USER INTERFACE &gt; THEME COMPONENTS &gt; CONTENT SECTIONS</code></p>
<p>Click the blue button, <b>Add Content Section</b></p>
<p>
	<b>Name:</b>&nbsp;<code>Function: Price Format for 2 Decimal Places</code>
</p>
<p>
	<b>Code:</b>&nbsp;<code>function_price_format</code>
</p>
<p>
	<b>Content:</b>
</p>
<pre class="p-3 bg-light rounded"><code>&lt;mvt:if expr="l.settings:product:price"&gt;
	&lt;mvt:do file="g.Module_Store_Module_Currency" name="l.settings:product:formatted_price" value="CurrencyModule_AddFormatting(l.settings:module, (l.settings:product:price ROUND 2))" /&gt;
&lt;/mvt:if&gt;</code></pre>
<p>
	<b>Wrap In a DIV Tag:</b> OFF
</p>
<h4 class="h4">Step 2:&nbsp;Using this in a Page
</h4>
<p>The code below refers to the Shadows framework but will work in any Miva Merchant framework.</p>
<p>Usually the product price variable is&nbsp;<code>l.settings:product:price</code> however there may be cases when it's in some other variable. If this happens the condition above can easily be updated to include other price variables. If you need help with this let us know.&nbsp;</p>
<p>
	The code below works on the&nbsp;<code>PROD</code>, <code>CTGY</code>, and <code>SRCH</code>&nbsp;templates. The precision bug appears to affect discounted prices so find the <code>&lt;s&gt;</code> tag and use this function there.&nbsp;</p>
<pre class="p-3 bg-light rounded"><code>.....

	&lt;mvt:if expr="l.settings:product:base_price GT l.settings:product:price"&gt;
		&lt;span class="x-product-list__price u-color-gray-30"&gt;&lt;s&gt;&amp;mvt:product:formatted_base_price;&lt;/s&gt;&lt;/span&gt;
&lt;mvt:comment&gt;
#
# fixes decimal problem
#
&lt;/mvt:comment&gt;
		&lt;mvt:item name="readytheme" param="contentsection( 'function_price_format' )" /&gt;

		&lt;span class="x-product-list__price u-color-red"&gt;&amp;mvt:product:formatted_price;&lt;/span&gt;
	&lt;mvt:else&gt;	
		&lt;span class="x-product-list__price"&gt;&amp;mvt:product:formatted_price;&lt;/span&gt;
	&lt;/mvt:if&gt;

.....</code></pre>
<p></p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Miva Merchant Quick and Dirty IP Blocking ]]></title>
<link>http://www.scotsscripts.com/blog/miva-merchant-quick-and-dirty-ip-blocking-.html</link>
<description>Here is some Miva template code to quickly block bad IP addresses from using up your Miva Merchant site's bandwidth.</description> 
<pubDate>Thu, 31 Oct 2024 09:51:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/miva-merchant-quick-and-dirty-ip-blocking-.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>Sometimes you need to quickly block some IP&nbsp;addresses and we have a Block IP&nbsp;module for Miva Merchant that does just this. The only problem is that we've gotten a few reports that it's not working and may be blocking everyone, regardless of IP.</p>
<p>If this happens to you here's a quick fix until we find out what's wrong with the module. This fix is not quite as elegant as the Block IP&nbsp;module because it will allow bots/spammers past the first wall of defense, but it will save your bandwidth until you can get your host to add the bad IPs to their block list.</p>
<p>In the Miva Merchant admin, go to <code>USER INTERFACE &gt; GLOBAL SETTINGS</code> and find the HTML PROFILE&nbsp;template. </p>
<p>Put the following code at the top of the HTML&nbsp;PROFILE&nbsp;template:</p>
<pre class="p-3 bg-light rounded">&lt;mvt:comment&gt;
#
# Add IP addresses here, putting | symbols around each address to keep them separate.
# Tell your host about the bad IPs and once your host handles them you can remove this code.
#
&lt;/mvt:comment&gt;

&lt;mvt:if expr="s.remote_addr IN '|123.123.123.123|345.345.345.345|'"&gt;
	&lt;html&gt;
	&lt;head&gt;
		&lt;title&gt;Closed for maintenance&lt;/title&gt;
	&lt;/head&gt;
	&lt;body&gt;
		&lt;h1&gt;We're closed for maintenance, check back later.&lt;/h1&gt;
	&lt;/body&gt;
	&lt;/html&gt;
	&lt;mvt:exit /&gt;
&lt;/mvt:if&gt;</pre>
<p>Replace the IP addresses in the code above with the ones you want to block. You can add as many as you want but at your earliest convenience ask your host to add the bad IPs to their own list. Once they do that you can remove this code from your HTML&nbsp;PROFILE template.</p>
<p>Make sure you wrap each IP&nbsp;address with the bar | symbol to separate the IP addresses.</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Use the JSON Decode Function in Mivascript]]></title>
<link>http://www.scotsscripts.com/blog/how-to-use-json-encode-and-decode-with-mivascript.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com/blogimages/json_scots_miva_script.png" />JSON is a great way to store and move text data. Decoding the JSON data into a usable array is also easy using Mivascript.]]></description>
<pubDate>Wed, 16 Aug 2023 13:57:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/how-to-use-json-encode-and-decode-with-mivascript.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>The <a href="https://www.mivascript.com/item/mivascript-functions/miva_json_decode.html" target="_blank" class="text-decoration-none">miva_json_decode(...)</a> function in Mivascript is very easy to use. Better yet, it's wonderfully useful.</p><p>The miva json encode function is not built into Mivascript, however there is a <a href="https://docs.miva.com/api-functions/json_encode" target="_blank" class="text-decoration-none">json_encode(...)</a> function in the Miva Merchant API&nbsp;that let's you use it in your modules or in template Store Morph Technology (SMT)&nbsp;code. We'll take a quick look at both of these and how they can be used in Miva Merchant templates.</p><p>miva_json_decode(...)</p><p>Here is a block of basic json set up in SMT code. Using MvCAPTURE&nbsp;is the easiest way to put the JSON into a variable because there is no need to deal with any special formatting.</p><pre class="p-3 bg-light rounded">&lt;mvt:capture variable="l.settings:scientists"&gt;{"scientists": [    {        "name":"Albert Einstein",        "ice_cream":"Vanilla",        "idea":"Theory of Relativity"    },    {        "name":"Ernest Rutherford",        "ice_cream":"Pistacio",        "idea":"Everything Edison Took Credit For"    },     {        "name":"Stephen Hawkins",        "ice_cream":"none",        "idea":"Hawking radiation"    }]}&lt;/mvt:capture&gt;</pre><p>This JSON&nbsp;block is now stored in <code>l.settings:scientists</code> - note that in a module you would use the <a href="http://www.mivascript.com/item/mivascript-tags/MvCAPTURE.html" target="_blank" class="text-decoration-none">MvCAPTURE</a> tag.</p><p><b>Hint:</b>&nbsp;Using&nbsp;<code>l.settings</code> style variables in template coding (SMT) makes them super easy to display. <code>&amp;mvt:variable;</code> is faster and cleaner looking than using the&nbsp;&nbsp;<code>&lt;mvt:eval expr="l.some_variable" /&gt;</code>.&nbsp;</p><p>Make an array out of <code>l.settings:scientists</code> by using the <code>miva_json_decode(...)</code> function and display the data in a loop:</p><pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.json_convert_ok" value="miva_json_decode(l.settings:scientists,l.settings:json_array)" /&gt;<br>&lt;mvt:if expr="l.json_convert_ok NE 1"&gt;    &lt;p&gt;JSON is invalid.&lt;/p&gt;&lt;mvt:else&gt;    &lt;mvt:foreach iterator="scientist" array="json_array:scientists"&gt;        &lt;p&gt;        &lt;b&gt;Name:&lt;/b&gt; &amp;mvt:scientist:name;                &lt;b&gt;Favorite Ice Cream:&lt;/b&gt; &amp;mvt:scientist:ice_cream;                &lt;b&gt;Popular idea:&lt;/b&gt; &amp;mvt:scientist:idea;        &lt;/p&gt;    &lt;/mvt:foreach&gt;&lt;/mvt:if&gt;</pre><p>The <code>miva_json_decode(...)</code> function returns a 1 if the JSON&nbsp;is decoded successfully. It's generally good to check for things like this so the code above includes an <code>mvt:if</code> conditional to make sure the data is OK.</p><p>The output of the code above is:</p><p><b>Name:</b> Albert Einstein<br><b>Favorite Ice Cream:</b> Vanilla<br><b>Idea:</b> Theory of Relativity	</p><p><b>Name:</b> Ernest Rutherford<br><b>Favorite Ice Cream:</b> Pistacio<br><b>Idea:</b> Everything Edison Took Credit For	</p><p><b>Name:</b> Stephen Hawkins<br><b>Favorite Ice Cream:</b> none<br><b>Idea:</b> Hawking radiation	</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[How To Add Modules to Miva Merchant 10]]></title>
<link>http://www.scotsscripts.com/blog/how-to-add-modules-to-miva-merchant-10.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com/blogimages/miva_merchant_10_add_modules_scots_scripts.png" />Miva Merchant 10 is probably the most powerful and customizable ecommerce platform out there. Here's a streamlined discussion on adding and using new modules to your store.]]></description>
<pubDate>Fri, 9 Jun 2023 13:09:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/how-to-add-modules-to-miva-merchant-10.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>Adding modules to Miva Merchant 10 can be tricky the first time you try it.&nbsp;</p><p>The term "add module"&nbsp;and "install module"&nbsp;are treated differently in Miva 10. Adding a module means putting it into your Miva Merchant platform so it's available to "install"&nbsp;into one or more stores.&nbsp;</p><p>Make sure you are logged into your Miva Merchant admin before going any further.</p><h4 class="h4">Step 1:&nbsp;Adding a Module</h4><p>To make the module available to install we have to add it first. </p><p><b>A.</b> Click on the Settings gear at the bottom of the left menu, and then click on Domains in the menu that opens up.</p><figure><img src="https://www.scotsscripts.com/blogimages/add_module_to_miva_merchant_10_domain_settings_1686337681.png" id="1686337681" data-image="1686337681" class="img-fluid"></figure><p><b>B.</b> Once the Domain Settings opens, find the Modules tab and click it (mine is first, yours will probably be second), then click the blue Add Module button.</p><figure><img src="https://www.scotsscripts.com/blogimages/add_module_to_miva_10_blue_button_1686337813.png" id="1686337813" data-image="1686337813" class="img-fluid"></figure><p><b>C. </b>When the add module screen comes up click on the Upload button and upload your module.</p><p><i class="fa fa-arrow-right"></i> <b>Unzip the module first.</b> Modules have the file extension of <code>.mvc</code>&nbsp;and if your module comes as a&nbsp;<code>.zip</code> file unzip it and get the <code>.mvc</code> file.</p><p>After the module has uploaded a blue Add Module button will appear. Click it to finish the process.</p><p><b>Updating Module Note:&nbsp;</b>If you are updating a module you must check the box to overwrite the module in the upload dialogue.</p><figure><img src="https://www.scotsscripts.com/blogimages/miva_10_add_module_upload_overwrite_scots_scripts_1686339241.png" id="1686339241" data-image="1686339241" class="img-fluid"></figure><p>Congrats! Your module is now available to install in your store.</p><h4 class="h4">Step 2:&nbsp;Installing The Module In Your Store</h4><p>Now that the module has been added to your store you can install and start using it. The easiest way to install the module is to click the Settings gear at the bottom of the left menu and then click Modules at the bottom of the menu that opens.</p><figure><img src="https://www.scotsscripts.com/blogimages/miva_10_add_module_modules_menu_scots_scripts_1686339407.png" id="1686339407" data-image="1686339407" class="img-fluid"></figure><p>When you click on Modules you'll get a screen of modules in your store. Some will be already installed and show green "Installed"&nbsp;text, others will be waiting for you to install them with blue "Install" text.</p><figure><img src="https://www.scotsscripts.com/blogimages/miva_10_add_module_module_list_scots_scripts_1686339674.png" id="1686339674" data-image="1686339674" class="img-fluid"></figure><p><b>Uninstall: </b>The three dots will open up a sub menu with a single menu item, "Uninstall". Don't ask me why it's not right there on the screen.&nbsp;</p><p class="small text-secondary p-3 border border-secondary rounded mx-2"><i class="fa fa-arrow-right"></i> <b>Three Dots in Miva Merchant:</b>&nbsp;The three dots in the Miva Merchant admin bring up all sorts of random menus and force administrators into extra clicks. If you are ever looking for something be sure to check boxes then use the three dots menus, or just try clicking any that you see so you can get to know all the hidden functions in Miva Merchant. The three dot menus are very inconsistent but that's how it goes sometimes.</p><h4 class="h4">Step 3: Module Administration and Misc Information</h4><p>Scot's Scripts modules generally bring you to the module admin after they are installed. Some modules leave you hanging so you'll need to read the module documentation to figure out where the admin for the module is.</p><p>Various module types will have tabs for products, pages, categories, customers, and more. If you open a module in the <code>Domains &gt; Modules</code> section of the store you will see all the features that the module supports.&nbsp;</p><p>For example, Scot's Blogger uses <code>component, data_store, json, scheduledtask,</code> and a few other features. Each of these features lets the module do things in various parts of the stores.</p><figure><img src="https://www.scotsscripts.com/blogimages/miva_10_add_module_scots_blogger_info_scots_scripts_1686340205.png" id="1686340205" data-image="1686340205" class="img-fluid"></figure><h4 class="h4">Uninstalling and/or Removing a Module</h4><p>First, and very important, <b>do not ever </b>remove a module by deleting the file from the server using FTP or control panel file browser. This will cause all sorts of problems in your Miva store.</p><p>Before you can remove a module you will need to uninstall it. Go to the <code>Settings &gt; Modules</code> section, find the module you want to remove, and click the three dots for the remove menu item.</p><p>Possible problems will include page items that are in use in the store. Some modules can't be easily uninstalled if they are used in pages. Take Scot's Blogger for example. Scot's Blogger creates a page item named scotsblogger when the module is installed. It removes that page item when it's uninstalled, however, if the page item is in use (as it is in the blog page) then the store won't allow the module to be uninstalled.</p><p>For Scot's Blogger this is no problem- just delete the blog template and all is well. For some other modules it may be more difficult because their page items are spread all around the store in different templates. Using the Search and Replace utility module will make finding them all an easier task.</p><p>Once&nbsp; you've successfully uninstalled the module from your store, or stores, then you can go to the <code>Settings &gt; Domains &gt; Modules</code> section of the admin, find your module, open the module screen, click the three dots, and then delete your module.</p><h4 class="h4">Deactivating a Module</h4><p>The module screen will also have a checkbox for deactivating the module. Sometimes this is easier than removing a module.</p><h4 class="h4">Important Module Removal Related Things to Consider</h4><p>Before removing a module from your store it's important to consider what the module does. If it's a <b>shipping or payment module</b> that has been in use you should never remove it unless advised by the developer because the module might be called on for orders that originally used it.</p><p><b>Remove unused modules:</b>&nbsp;If you're not using it, remove it. This will save resources and keep your store fast.</p><h4 class="h4">How many modules can I&nbsp;install?</h4><p>You can install as many as you want, but know that every module that is installed will make your store go slower. You might not notice it, but let's say you install a System module. System modules have functions that are called on every screen load. Even if the function doesn't do anything the system still has to open the module file and call the function.</p><p>System modules are some of the heaviest modules. So are logging modules. Component modules also call certain functions whether they are used or not.&nbsp;</p><p><b>Component Modules:</b>&nbsp;Make sure when you are adding and removing items from a page template (the ITEMS&nbsp;tab) that any items that are checked are actually in use. For example, the Buttons item is rarely in use in modern Miva stores, yet the page item appears to be checked in all templates, at least in Shadows 2.</p><p><b>Module Data:</b>&nbsp;Some modules keep their data in tables, some in flat files, some in both. It's not a good idea to assume anything about module data, especially when making a dev store live. I've seen stores go live and break half their modules because the devs thought they could just copy the MySQL&nbsp;table over without copying directories of flat files in the Miva data directory.</p><p>Let us know if you have any questions about installing a module or general module information. </p><p>If you need a custom module that's what we like to do most! No module is too small or too large.</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Easy Add "Shop All Categories" to Primary Navigation in Miva Merchant]]></title>
<link>http://www.scotsscripts.com/blog/how-to-create-an-all-categories-primary-navigation-dropdown-with-branches.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com
					<p>This tutorial is for stock&nbsp;<a href=" />Learn how to automatically add the category tree to your primary navigation menu in Miva Merchant. Includes all required code and an optional method to skip categories via a category custom field.]]></description>
<pubDate>Wed, 17 May 2023 11:04:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/how-to-create-an-all-categories-primary-navigation-dropdown-with-branches.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>This tutorial is for stock&nbsp;<a href="https://docs.miva.com/readytheme-shadows/" target="_blank" class="text-decoration-none">Shadows CSS</a> framework developed by Miva for Miva Merchant. This will work for customized frameworks although some item names in the store admin might be different.</p><h4 class="h4">Miva Merchant Category Tree</h4><p>The category tree in Miva Merchant is a tree style breakdown of your categories that follows the parent-child relationship set up in the category management section of your Miva Merchant administration. You see this in the sidebar of some pages of your store, but it's not present in the primary navigation bar.</p><p>The standard method of adding "all categories" to your navigation bar is tedious, and if you have a lot of categories and complicated category tree incredibly time consuming. Instead of building the "All Categories"&nbsp;menu item by hand, do it the easy way: automatically. The following method also automatically mirrors any changes you make to your category tree.</p><p><b>Take a look:<a class="text-decoration-none" href="https://esentia.com/" target="_blank"> </a></b><a href="https://esentia.com/" target="_blank" class="text-decoration-none">Esentia Security Products</a> asked me to put something like this in their primary nav bar. The "Shop All Categories"&nbsp;item is automatically created based on the category tree settings, not navigation item settings. The rest of the primary nav bar is basic navigation items, easily modified like any other navigation set in Miva Merchant.</p><h4 class="h4">Step 1</h4><p><b>Optional Custom Field - Skip a Category</b></p><p>There may be times you want a particular category skipped in the "Shop All Categories"&nbsp;navigation item. The code below supports a custom category field checkbox that can be used for this. Create a custom field by going to <code>UTILITIES &gt; CUSTOM FIELDS</code></p><ul class="ms-3"><li><b>CODE</b>:&nbsp;all_categories_filter</li><li><b>NAME</b>:&nbsp;All Categories:&nbsp;Filter the all categories primary nav dropdown</li><li><b>GROUP</b>:&nbsp;default</li><li><b>FIELDTYPE</b>: Checkbox</li><li><b>TYPE</b>:&nbsp;Category</li></ul><h4 class="h4 mt-3">Step 2<a class="text-decoration-none"></a></h4><p>Open the primary navigation bar template for editing by clicking on <code>User Interface &gt; Theme Components &gt; Navigation Sets &gt;Primary Site Navigation Bar</code></p><div class="row"><div class="col-sm-3"><figure><img src="https://www.scotsscripts.com/blogimages/scots_scripts_2023_all_categories1_1683741956.png" id="1683741956" data-image="1683741956" class="img-fluid"></figure></div><div class="col-sm-3"><figure><img src="https://www.scotsscripts.com/blogimages/scots_scripts_2023_all_categories2_1683742000.png" id="1683742000" data-image="1683742000" class="img-fluid"></figure></div><div class="col-sm-3"><figure><img src="https://www.scotsscripts.com/blogimages/scots_scripts_2023_all_categories3_1683742061.png" id="1683742061" data-image="1683742061" class="img-fluid"></figure></div><div class="col-sm-3"><figure><img src="https://www.scotsscripts.com/blogimages/scots_scripts_2023_all_categories4_1683742103.png" id="1683742103" data-image="1683742103" class="img-fluid"></figure></div></div><h4 class="h4 mt-3">Step 3</h4><p>Update the Primary Navigation Template. The code we are adding basically mimics the code already in the template, except instead of getting the category tree from a navigation set, we load it from the store's category structure.</p><figure><img src="https://www.scotsscripts.com/blogimages/scots_scripts_primary_navigation_bar_miva_merchant_2023_1684345466.png" id="1684345466" data-image="1684345466" class="img-fluid"></figure><p>Find the following two lines of code. In a stock primary nav bar template they will be around line 11.</p><pre class="p-3 bg-light rounded">&lt;div class="x-transfigure-navigation__content"&gt;&lt;ul class="c-navigation__row x-transfigure-navigation__row"&gt;</pre><p>Insert the following code after the <code>&lt;ul class="c-navigation__row x-transfigure-navigation__row"&gt;</code> line. This will load and display all categories based on how categories have been set up in the stock category tree that shows up on some pages.</p><pre class="p-3 bg-light rounded">&lt;mvt:comment&gt;## ALL CATEGORIES - auto create based on category heirarchy in store. Use the "filter primary nav" category custom field to keep a category out of this list#&lt;/mvt:comment&gt;<br>&lt;mvt:do file="g.Module_Library_DB" name="l.success" value="CategoryList_Load_Parent(l.nulll, l.settings:pcats)" /&gt;&lt;mvt:assign name="l.settings:has:children" value="'has-child-menu' $ asciichar(34) $ ' data-hook=' $ asciichar(34) $ 'has-drop-down has-child-menu'"/&gt;&lt;mvt:assign name="l.settings:show:child" value="'&lt;span class=' $ asciichar(34) $ 'c-navigation__link-carat' $ asciichar(34) $ '&gt;&lt;span class=' $ asciichar(34) $ 'u-icon-chevron-right' $ asciichar(34) $ ' aria-hidden=' $ asciichar(34) $ 'true' $ asciichar(34) $ ' style=' $ asciichar(34) $ 'font-weight: bold; position: relative; top: -1px;' $ asciichar(34) $ '&gt;&lt;/span&gt;&lt;/span&gt;'"/&gt;<br>&lt;li class="c-navigation__list &amp;mvt:has:children;"&gt;&lt;a class="c-navigation__link" href="/our-catalog.html"&gt;&lt;b&gt;Shop By Category&amp;mvt:show:child;&lt;/b&gt;&lt;/a&gt;<br>&lt;ul class="c-navigation__row is-hidden" style="z-index: 10000;"&gt;    &lt;li class="c-navigation__list u-hidden--l" data-hook="show-previous-menu"&gt;        &lt;span class="c-navigation__link"&gt;&lt;span class="u-icon-chevron-left" aria-hidden="true"&gt; &lt;/span&gt;&lt;span class="o-layout--grow"&gt;Main Menu&lt;/span&gt;&lt;/span&gt;    &lt;/li&gt;<br>    &lt;mvt:foreach iterator="cat" array="pcats"&gt;        &lt;mvt:comment&gt; ### skip category if set in the custom field ### &lt;/mvt:comment&gt;        &lt;mvt:do file="g.Module_Root $ '/modules/util/customfld.mvc'" name="l.success" value="Read_Category_Code(l.settings:module, l.nulll, l.settings:cat:code, 'all_categories_filter', l.settings:all_categories_filter)" /&gt;        &lt;mvt:if expr="l.settings:all_categories_filter EQ 1 OR l.settings:cat:active NE 1"&gt;            &lt;mvt:foreachcontinue /&gt;        &lt;/mvt:if&gt;        &lt;mvt:do file="g.Module_Feature_URI_DB" name="l.success" value="URI_Load_Category_Canonical(l.settings:cat:id, l.settings:cat:uridata)" /&gt;        &lt;mvt:assign name="l.settings:children" value="''" /&gt;        &lt;mvt:do file="g.Module_Root $ '/modules/component/cmp-cssui-cattree.mvc'" name="l.success" value="CategoryList_Load_Tree(l.settings:cat:id, l.settings:children, 2, l.settings:urisettings)" /&gt;        &lt;mvt:if expr="NOT ISNULL l.settings:children"&gt;            &lt;mvt:assign name="l.settings:has:children" value="'has-child-menu' $ asciichar(34) $ ' data-hook=' $ asciichar(34) $ 'has-drop-down has-child-menu'"/&gt;            &lt;mvt:assign name="l.settings:show:child" value="'&lt;span class=' $ asciichar(34) $ 'c-navigation__link-carat' $ asciichar(34) $ '&gt;&lt;span class=' $ asciichar(34) $ 'u-icon-chevron-right' $ asciichar(34) $ ' aria-hidden=' $ asciichar(34) $ 'true' $ asciichar(34) $ ' style=' $ asciichar(34) $ 'font-weight: bold; position: relative; top: -1px;' $ asciichar(34) $ '&gt;&lt;/span&gt;&lt;/span&gt;'"/&gt;        &lt;mvt:else&gt;            &lt;mvt:assign name="l.settings:has:children" value="''"/&gt;            &lt;mvt:assign name="l.settings:show:child" value="''"/&gt;        &lt;/mvt:if&gt;        &lt;li class="c-navigation__list &amp;mvt:has:children;"&gt;            &lt;a class="c-navigation__link" href="&amp;mvte:cat:uridata:uri;" target="&amp;mvt:cat:link_targ;"&gt;&amp;mvt:cat:name;&amp;mvt:show:child;&lt;/a&gt;            &lt;mvt:if expr="NOT ISNULL l.settings:children"&gt;                &lt;ul class="c-navigation__row is-hidden"&gt;                    &lt;mvt:assign name="l.settings:has:children" value="''"/&gt;                    &lt;li class="c-navigation__list u-hidden--l" data-hook="show-previous-menu"&gt;                        &lt;span class="c-navigation__link"&gt;&lt;span class="u-icon-chevron-left" aria-hidden="true"&gt; &lt;/span&gt;&lt;span class="o-layout--grow"&gt;Main Menu&lt;/span&gt;&lt;/span&gt;                    &lt;/li&gt;<br>                    &lt;mvt:foreach iterator="child" array="children"&gt;                        &lt;mvt:assign name="l.settings:grandchildren" value="''" /&gt;                        &lt;mvt:do file="g.Module_Root $ '/modules/component/cmp-cssui-cattree.mvc'" name="l.success" value="CategoryList_Load_Tree(l.settings:child:id, l.settings:grandchildren, 2, l.settings:urisettings)" /&gt;                        &lt;mvt:if expr="NOT ISNULL l.settings:grandchildren"&gt;                            &lt;mvt:assign name="l.settings:has:children" value="'has-child-menu' $ asciichar(34) $ ' data-hook=' $ asciichar(34) $ 'has-child-menu'"/&gt;                            &lt;mvt:assign name="l.settings:show:child" value="'&lt;span class=' $ asciichar(34) $ 'c-navigation__link-carat' $ asciichar(34) $ '&gt;&lt;span class=' $ asciichar(34) $ 'u-icon-chevron-right' $ asciichar(34) $ '&gt;&lt;/span&gt;&lt;/span&gt;'"/&gt;                        &lt;mvt:else&gt;                            &lt;mvt:assign name="l.settings:has:children" value="''"/&gt;                            &lt;mvt:assign name="l.settings:show:child" value="''"/&gt;                        &lt;/mvt:if&gt;                        &lt;li class="c-navigation__list &amp;mvt:has:children;"&gt;                            &lt;mvt:do file="g.Module_Feature_URI_DB" name="l.success" value="URI_Load_Category_Canonical(l.settings:child:id, l.settings:child:uridata)" /&gt;                            &lt;a class="c-navigation__link" href="&amp;mvte:child:uridata:uri;"&gt;&amp;mvt:child:name;&amp;mvt:show:child;&lt;/a&gt;                            &lt;mvt:if expr="NOT ISNULL l.settings:grandchildren"&gt;                                &lt;ul class="c-navigation__row is-hidden"&gt;                                    &lt;li class="c-navigation__list u-hidden--l" data-hook="show-previous-menu"&gt;                                        &lt;span class="c-navigation__link"&gt;&lt;span class="u-icon-chevron-left" aria-hidden="true"&gt; &lt;/span&gt;&lt;span class="o-layout--grow"&gt;Main Menu&lt;/span&gt;&lt;/span&gt;                                    &lt;/li&gt;                                    &lt;mvt:foreach iterator="grandchild" array="grandchildren"&gt;                                        &lt;mvt:do file="g.Module_Feature_URI_DB" name="l.success" value="URI_Load_Category_Canonical(l.settings:grandchild:id, l.settings:grandchild:uridata)" /&gt;                                        &lt;li class="c-navigation__list"&gt;                                            &lt;a class="c-navigation__link" href="&amp;mvte:grandchild:uridata:uri;"&gt;&amp;mvt:grandchild:name;&lt;/a&gt;                                        &lt;/li&gt;                                    &lt;/mvt:foreach&gt;                                    &lt;li class="c-navigation__list u-hidden--l"&gt;                                        &lt;a class="c-navigation__link" href="&amp;mvte:navigationitem_level2:url;" target="&amp;mvt:navigationitem_level2:link_targ;"&gt;View All &amp;mvt:navigationitem_level2:name;&lt;/a&gt;                                    &lt;/li&gt;                                &lt;/ul&gt;                            &lt;/mvt:if&gt;                        &lt;/li&gt;                    &lt;/mvt:foreach&gt;<br>                    &lt;li class="c-navigation__list u-hidden--l"&gt;                        &lt;a class="c-navigation__link" href="&amp;mvte:navigationitem:url;" target="&amp;mvt:navigationitem:link_targ;"&gt;View All &amp;mvt:navigationitem:name;&lt;/a&gt;                    &lt;/li&gt;                &lt;/ul&gt;            &lt;/mvt:if&gt;        &lt;/li&gt;    &lt;/mvt:foreach&gt;<br>    &lt;li class="c-navigation__list u-hidden--l"&gt;        &lt;a class="c-navigation__link" href="&amp;mvte:navigationitem:link;"&gt;View All &amp;mvt:navigationitem:name;&lt;/a&gt;    &lt;/li&gt;&lt;/ul&gt;&lt;/li&gt;<br>&lt;mvt:comment&gt;## END ALL CATEGORIES#&lt;/mvt:comment&gt;</pre><p>That's all there is to it. </p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Analytics 4 for Miva Merchant is Easy]]></title>
<link>http://www.scotsscripts.com/blog/google-analytics-4-for-miva-merchant-is-easy.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com/mm9/graphics/00000001/1/ganalytics_logo.png" />On July 1, 2023, standard Universal Analytics properties will no longer process data. Now is the time to install the Google Analytics 4 module in your Miva Merchant store.]]></description>
<pubDate>Tue, 2 May 2023 18:53:19 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/google-analytics-4-for-miva-merchant-is-easy.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>Now is the time to install the <a href="https://www.scotsscripts.com/google-analytics-4.html" target="_blank" class="text-decoration-none">Google Analytics 4 module</a> in your store. It's easy to install, tracks everything, and doing it now saves you any stress when Universal Analytics is soon retired.</p><p>Our Google Analytics 4 module has been maturing for three years and is now easier than ever to install and use. Built in documentation and help will get you started on the right foot without any hassle or worries. When you buy the module you pay for it once. No recurring fees of any kind, ever.</p><blockquote class="mx-sm-5 border rounded p-3"><p>Scot has done it again. This app works seamlessly. Install it. Make a few tweaks and if you have problems, Scot is quick to address them and offer recommendations. Great job!&nbsp;I recommend and use this for all of my projects.</p><p><cite>James, <a href="https://www.afterdarkgrafx.com/" target="_blank" class="text-decoration-none">After Dark Grafx</a></cite></p></blockquote><h5 class="h4 h5">How is our module different than simply putting the Google Analytics 4 code in your store?</h5><p>There is one major difference: Almost all browsers either natively block Google Analytics javascript or use a plugin like U-Block Origin to block that kind of javascript. </p><p>The module uses Google's REST&nbsp;API to send tracking data. This means that browsers can't block it because the data is behind the scenes, invisible to the browser and visitors browsing. Page load isn't affected and tracking is perfect. </p><p>In addition to tracking analytics, you can enter five measurement IDs in the module settings to track any of Google's services such as adsense or custom gtags measurements.</p><h5 class="h4 h5">Custom Field Data</h5><p>Some store owners use custom fields to create all sorts of tracking metrics and our Google Analytics 4 module makes including this data in your tracking a breeze. Check the boxes and you're good to go.</p><figure class="mx-sm-5"><img src="https://www.scotsscripts.com/blogimages/google_analytics_4_miva_merchat_custom_fields_2023_1683076839.png" id="1683076839" data-image="1683076839" class="img-fluid"></figure><h5 class="h5">Installation</h5><p>Installing the Google Analytics 4 module is very easy. After adding it to the store the module asks for the license code which you'll get in your purchase confirmation email. After adding the code the settings comes up. If you're just getting started the instructions will show you how to get your Google Analytics 4 measurement ID and/or create a new analytics property.</p><p>Here's a sample of the instructions page:</p><figure class="mx-sm-5"><img src="https://www.scotsscripts.com/blogimages/miva_merchant_2023_google_analytics_4_instructions_sample_1683077071.png" id="1683077071" data-image="1683077071" class="img-fluid"></figure><p>As usual, we have also added some extras that make things even more easy, such as built in page assignments to easily turn on/off Google Analytics 4 for any pages in your store.</p><figure class="mx-sm-5"><img src="https://www.scotsscripts.com/blogimages/miva_merchant_2023_google_analytics_4_page_assignments_1683077242.png" id="1683077242" data-image="1683077242" class="img-fluid"></figure><h5 class="h5">Module Settings</h5><p>The module settings have everything you need to get the module going the way you want.</p><figure class="mx-sm-5"><img src="https://www.scotsscripts.com/blogimages/miva_merchant_2023_google_analytics_4_settings.png_1683077470.png" id="1683077470" data-image="1683077470" class="img-fluid"></figure><p><b>Debugging is good.</b> You'll also notice that you can easily debug your tracking before going live. This is a very nice feature that keeps frustration at a minimum when trying to figure out what's going on if tracking isn't doing exactly what you thought it would do.</p><p>Please contact us if you have any questions about using our <a href="/google-analytics-4.html" class="text-decoration-none">Google Analytics 4 Module</a> for your Miva Merchant store.</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Accept Donations in Miva Merchant]]></title>
<link>http://www.scotsscripts.com/blog/how-to-accept-donations-in-miva-merchant.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com/blogimages/custom_attribute_price_for_miva_merchant_by_scots_scripts.png" />Accepting donations, tips, and other open ended dollar amounts such as invoicing in Miva Merchant has always been somewhat difficult. Those days are over.]]></description>
<pubDate>Fri, 21 Jan 2022 10:00:45 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/how-to-accept-donations-in-miva-merchant.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>There are a few ways to accept donations, tips, and other custom price situations such as invoices in <a  href="https://my.miva.com/signup.php?affiliate_code=NH1h8G2O">Miva Merchant</a>.</p><p>Sometimes people create a donate button with PayPal or some other service. This works, but the problem is that it makes your store look bad. Your customers are wondering, "Why is there something completely different here for donating?" Your customers need to trust your store and want to go through the normal checkout process, so putting various out of context buttons in for donations could turn them off. ﻿</p><p>Another option is an old Miva module being used for invoices. In as much as this older module works, it's also, well, very old, and hasn't been updated in years. There is no guarantee that the module will continue to work as Miva Merchant is updated.﻿</p><h4 class="h4">The Easy Way﻿</h4><p>The easiest way of accepting tips, donations, and more in Miva Merchant is to use our brand new module, <a href="https://www.scotsscripts.com/custom-attribute-price.html" target="_blank" class="text-decoration-none"><b>Custom Attribute Prices</b></a>﻿.﻿</p><p>Ok, sure, this is a blatant marketing pitch for the module, but that doesn't mean it isn't the best solution for invoicing, tips, and donations out there for Miva Merchant.﻿</p><h4 class="h4">Is Custom Attribute Prices easy to use?﻿</h4><p>Yes, it's super easy to use. Setup literally takes minutes. In fact, it will probably take longer to install the module than to set up your first donation product.</p><p>All you have to do is create a product and give it a text attribute with a few defined settings. See the <a href="https://www.scotsscripts.com/custom-attribute-price.html" target="_blank" class="text-decoration-none">product page</a>﻿ for details.</p><h4 class="h4">How does reporting work for Custom Attribute Price?﻿</h4><p>Since you are using a normal store product for your donation, tip, or invoice, reporting is the same as everything else in your store. The attribute shows up in the invoice and order details so you know what the person paid for and what they paid.﻿</p><h3 class="h3">Some Ways to Use Custom Attribute&nbsp;Price﻿</h3><p>Donations are an obvious choice, a tip jar if you're in the service industry, and for stores that need online invoice payment, this is the perfect solution.﻿</p><p>But what else can you do?﻿</p><p>Another way I thought might be interesting is making a product and giving it the attribute that holds the price field, but also give it a text attribute.&nbsp;This way the customer can enter the price they want to pay as well as entering some kind of note about why they are paying. I had a client that wanted this functionality a few years ago and we had to go through a lot of work to make it happen. With this module it could have been done in minutes.</p><p>Contact us if you have any questions about this module.﻿</p><p>Another option could be our <b>Get Money module</b> which lets you send an encrypted link to your customers to populate the price and name of the service they are paying for.﻿</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Open Task Manager in Windows 11]]></title>
<link>http://www.scotsscripts.com/blog/how-to-open-task-manager-in-windows-11.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com
					<p>If you're not using the task manager you're missing out. It's a way to see what's going on under the hood, close processes that are using too many resources, change priority in applications and games to make them more responsive, and more.</p><p>In Windows 10 I used to right click in the taskbar to get the task manager.</p><p>In Windows 11 that doesn't work. However there is still a shortcut to get the task manager up so you don't have to search through apps to bring it up: ﻿</p><h4 class=" />					
					If you're not using the task manager you're missing out. It's a way to see what's going on under the hood, close processes that are using too many resources, change priority in applications and games to make them mor]]></description>
<pubDate>Tue, 11 Jan 2022 16:29:24 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/how-to-open-task-manager-in-windows-11.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>If you're not using the task manager you're missing out. It's a way to see what's going on under the hood, close processes that are using too many resources, change priority in applications and games to make them more responsive, and more.</p><p>In Windows 10 I used to right click in the taskbar to get the task manager.</p><p>In Windows 11 that doesn't work. However there is still a shortcut to get the task manager up so you don't have to search through apps to bring it up: ﻿</p><h4 class="h4 text-center">Right Click the Blue Windows Icon﻿</h4><figure class="align-center"><img src="https://www.scotsscripts.com/blogimages/Windows-11-34-1068x401_1641947208.jpg" id="1641947208" data-image="1641947208" class="img-fluid"></figure><p>Right click the blue "four squares"&nbsp;icon and select the Task Manager.</p><figure class="align-center"><img src="https://www.scotsscripts.com/blogimages/w10-tricks-02-136400246695802601_1641947288.jpg" id="1641947288" data-image="1641947288" class="img-fluid"></figure>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Miva Merchant SMT / Storemorph Basics]]></title>
<link>http://www.scotsscripts.com/blog/miva-merchant-smt-storemorph-basics.html</link>
<description>Miva Merchant template coding language, otherwise known as SMT or Storemorph Technology, gives you the power to do anything in your pages.</description> 
<pubDate>Sat, 14 Aug 2021 15:26:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/miva-merchant-smt-storemorph-basics.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>When you want to add new code to your Miva Merchant page templates sometimes there's a learning curve, or more of a learning bump because when you get over it the rest is smooth sailing.</p><h3 class="h3 text-danger">Resources:﻿</h3><p><b>1.</b>&nbsp;<a href="https://www.scotsscripts.com/blog/miva-merchant-functions-and-how-to-use-them.html" target="_blank" class="text-decoration-none">Miva Merchant API Functions and How to Use Them</a></p><p>This post on Scot's Scripts explains in detail how to use Miva Merchant API Functions.</p><p><b>2.</b>&nbsp;<a href="https://docs.miva.com/api-functions" target="_blank" class="text-decoration-none">Miva Merchant Template API Functions</a></p><p>These are all functions you can use in your page templates (and your modules if you are developer.) </p><p><b>3.</b> <a href="https://docs.miva.com/template-language/mvtassign" target="_blank" class="text-decoration-none">Official Miva documentation</a></p><p>Store Morph Template (SMT) coding reference. Reference this as go through this post.</p><h3 class="h3 text-danger">mvt:assign <a href="https://docs.miva.com/template-language/mvtassign" target="_blank" class="text-decoration-none"><i class="fa fa-sm fa-external-link"></i></a>﻿</h3><p>﻿This is used to assign a variable a value. Let's assign the value "Scot" to the variable <code>l.settings:my_name</code> using the code below.</p><pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.settings:my_name" value="'Scot'" /&gt;</pre><p><b>l.settings:</b>&nbsp;</p><p>To use page items like <code>&amp;mvt:my_name;</code> to display data you must assign the data to a variable name that starts with <code>l.settings</code> otherwise you will need to use&nbsp; the<code>mvt:eval</code>&nbsp;function (see below)&nbsp;to display the data. </p><p class="border border-secondary m-3 p-3"><b>Module Development Note:</b>&nbsp;If you are writing a module and want to assign values to <code>l.settings</code> from the Component module API functions, you need to assign them to <code>l.all_settings</code> because <code>l.all_settings</code> gets copied to <code>l.settings</code> via internal Miva Merchant processes.﻿</p><p>The example above is the most basic use of mvt:assign. What if we want to display the date where we are going to connect some internal <a href="https://www.mivascript.com/topic/system-variables.html" target="_blank" class="text-decoration-none">system variable</a>﻿ data ﻿with strings?</p><p>The system variable for the day of the week is <code>s.stm_wday</code> ﻿and for the month is <code>s.stm_mon</code></p><p>Let's assign a variable called l.settings:hello_customer using mvt:assign and the date variables above.</p><pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.settings:hello_customer" value="'Hello Customer, today is ' $ s.stm_wday $ ', day ' $ s.tm_mday $ ' of ' $ s.stm_mon" /&gt;<br>Then we can display it anywhere below on the page like:<br>&amp;mvt:hello_customer;</pre><p>This would output something like:&nbsp;</p><p class="text-center"><b>Hello Customer, today is Sun, day 13 of Oct</b></p><p>You probably noticed the&nbsp;<code>$</code> symbols in the "value"&nbsp;section of the code above. In template coding and miva script coding we must distinguish between variables and strings. Strings are anything that is not a variable or a function, strings are words and symbols, such as "Hello Customer, today is" in the example above.<br></p><p>The basic rule is strings are surround by single quotes, and all variables and strings are separated by <code>$</code> symbols.</p><h3 class="h3 text-danger">mvt:eval&nbsp;<a href="https://docs.miva.com/template-language/mvteval" target="_blank" class="text-decoration-none"><i class="fa fa-sm fa-external-link"></i></a>﻿</h3><p>This is used to evaluate, or output, data.</p><p>It's used in a very similar manner to <code>mvt:assign</code>&nbsp;, however instead of assigning data to a variable, you are displaying it directly on the page.</p><p>Using the variable in the example above, <code>l.settings:hello_customer</code>, we can display the contents of the variable like so:</p><pre class="p-3 bg-light rounded">&lt;mvt:eval expr="l.settings:hello_customer" /&gt;</pre><p>The output from this is identical to <code>&amp;mvt:hello_customer;</code>.</p><p>We can also use mvt:eval for more complex output. Using the example above, we can mvt:eval the "hello customer"&nbsp;string instead of assigning it to a variable.</p><pre class="p-3 bg-light rounded">&lt;mvt:eval expr="'Hello Customer, today is ' $ s.stm_wday $ ' day ' $ s.tm_mday $ ' of ' $ s.stm_mon" /&gt;</pre><p><b>Evaluate Customer Name</b></p><p>If your customer is logged in and has their billing information set (for this example) you can say hello to them personally like this:</p><pre class="p-3 bg-light rounded">&lt;mvt:eval expr="'Hello ' $ g.customer:bill_fname $ ' ' $ g.customer:bill_lname $ ', today is ' $ s.stm_wday $ ' day ' $ s.tm_mday $ ' of ' $ s.stm_mon" /&gt;</pre><p><b>Remember:</b>&nbsp;All literal strings, including spaces, must be enclosed with single quotes, and, we must use <code>$</code> to connect (concatenate)&nbsp;them together.</p><p><b>Tip:</b>&nbsp;You can also <code>mvt:eval </code>any of the&nbsp;<a href="https://www.mivascript.com/topic/mivascript-functions.html" target="_blank" class="text-decoration-none">mivascript functions</a>﻿. For example if you wanted to add zeros in front of a number so that there are always three digits in total (1 would turn into 001), you could use the <code>padl(string, length, character)</code> function like this:</p><pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.number" value="'1'" /&gt;&lt;mvt:eval expr="'This is your number: ' $ padl(l.number,3,'0')" /&gt;</pre><p>This would output:&nbsp;</p><p class="text-center"><b>This is your number:&nbsp;001</b></p><h3 class="h3 text-danger">mvt:do <a href="https://docs.miva.com/template-language/mvtdo" target="_blank" class="text-decoration-none"><i class="fa fa-sm fa-external-link"></i></a>﻿</h3><p>This is used to call functions that have been created in modules and mivascript files that run your store. The <a href="https://docs.miva.com/api-functions" target="_blank" class="text-decoration-none">api function reference</a>﻿ page lists all the functions available in stock Miva Merchant. This does not include functions in third party modules, although some third party modules might have their own api function reference (while others hide their functions.)</p><p>The <code>mvt:do</code> functions in the API function reference are ready to copy and paste into your templates, it's just the variable names that need changing to reflect the data you are using and loading. Here is one example to help understand how they are used. Let's look at the function that loads a product URI. The code below is copied straight from the function reference guide.</p><pre class="p-3 bg-light rounded">&lt;mvt:do file="g.Module_Feature_URI_DB" name="l.success" value="URI_Load_Product_Canonical(product_id, canonical_uri var)" /&gt;</pre><p>This function could be used to display a list of products manually with links.&nbsp;In this example, we will load product data from the product code, then load the URI into the product data.</p><p><b>Note:</b> Notice the "var"&nbsp;after "canonical_uri" in the <code>URI_Load_Product_Canonical</code> function? This "var"&nbsp;denotes that it is a reference variable. This simply means that after the function is run, the canonical information will be stored in the reference variable rather than returned.</p><p>Some functions return their data into the "name"&nbsp;field (in this case the name field is "success" which will be a 1 or 0 based on if the canonical uri was found)&nbsp;and some load data into reference variables.</p><p>See the <a href="https://www.scotsscripts.com/blog/miva-merchant-functions-and-how-to-use-them.html" target="_blank" class="text-decoration-none">Miva Merchant API Functions and How to Use</a>﻿ Them﻿ post for more details about reference variables.</p><p><b>﻿Load Product Canonical URI Example</b></p><pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.product_code" value="'product_code_1'" /&gt;<br>&lt;mvt:do file="g.Module_Library_DB" name="l.success" value="Product_Load_Code(l.product_code, l.settings:product)" /&gt;<br>&lt;mvt:do file="g.Module_Feature_URI_DB" name="l.success" value="URI_Load_Product_Canonical(l.settings:product:id, l.settings:product:canonical_uri)" /&gt;<br>&lt;mvt:if expr="l.success"&gt;    The product URI is: &lt;mvt:eval expr="l.settings:product:canonical_uri:uri" /&gt;&lt;mvt:else&gt;    Error: Problem loading URI for &amp;mvt:product:name;.&lt;/mvt:if&gt;</pre><p>In this example we arbitrarily set a product code, load the product data into <code>l.settings:product</code>, try to load the URI based on the product id, and if it loads we display it and if not we display an error message.</p><p>See below in the <code>mvt:foreach</code> section for an example of loading a list of products.</p><h3 class="h3 text-danger">mvt:if <a href="https://docs.miva.com/template-language/if-statement" target="_blank" class="text-decoration-none"><i class="fa fa-sm fa-external-link"></i></a>﻿</h3><p>This uses <a href="https://www.mivascript.com/topic/operators.html" target="_blank" class="text-decoration-none">operators</a>﻿ to test for conditions that we use to figure out what the next step is. Check the <a href="https://www.mivascript.com/topic/operators.html" target="_blank" class="text-decoration-none">operators</a>﻿ reference for a rundown of all available operators.</p><p><b>Operators:</b>&nbsp;Operators make <code>mvt:if</code> work. Understanding how to use operators is <b>required</b> for miva scripting and template language and programming in general.</p><p>In this example we'll assign a variable an animal type and then check what kind of food it needs.</p><p class="text-center"><i>"IF" it's a cat, feed it cat food,</i></p><p class="text-center"><i>"ELSE"&nbsp;do not feed it cat food.</i></p><pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.animal_type" value="'cat'" /&gt;<br>&lt;mvt:if expr="l.animal_type EQ 'cat'"&gt;    Let's feed it cat food.&lt;mvt:else&gt;    Do not feed it cat food.&lt;/mvt:if&gt;</pre><p>In this example we'll assign the variable again and use <code>mvt:elseif</code> to extend the condition tests.</p><p class="text-center"><i>"IF"&nbsp;it's a cat, feed it cat food,</i></p><p class="text-center"><i>"ELSE&nbsp;IF"&nbsp;it's a dog, feed it dog food,</i></p><p class="text-center"><i>"ELSE"&nbsp;do not feed it.</i></p><pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.animal_type" value="'cat'" /&gt;<br>&lt;mvt:if expr="l.animal_type EQ 'cat'"&gt;    Let's feed it cat food.&lt;mvt:elseif expr="l.animal_type EQ 'dog'"&gt;    Let's feed it dog food.&lt;mvt:else&gt;    Do not feed it cat food or dog food.&lt;/mvt:if&gt;</pre><p>These are basic examples, but conditionals are the life blood of coding in templates and anything else.</p><p>Did you see the <code>EQ</code> being used above? That's an operator. See the <a href="http://www.mivascript.com/topic/operators.html" target="_blank" class="text-decoration-none">operator reference</a>﻿ for a list of them all.</p><p>This is an example of using the <code>AND</code>&nbsp;operator with a more complex conditional situation where we use <code>AND</code>&nbsp;and <code>NE</code></p><p class="text-center"><i>"IF"&nbsp;it's a calico cat feed it calico cat food,</i></p><p class="text-center"><i>"ELSE IF"&nbsp;it's a non-calico cat&nbsp;feed it non-calico cat food,</i></p><p class="text-center"><i>"ELSE&nbsp;IF"&nbsp;it's a dog, feed it dog food,</i></p><p class="text-center"><i>"ELSE"&nbsp;do not feed it.</i></p><pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.animal_type" value="'cat'" /&gt;<br>&lt;mvt:assign name="l.cat_color" value="'calico'" /&gt;<br>&lt;mvt:if expr="l.animal_type EQ 'cat' AND l.cat_color EQ 'calico'"&gt;    Let's feed it cat food for calico cats.&lt;mvt:elseif expr="l.animal_type EQ 'cat' AND l.cat_color NE 'calico' "&gt;    Let's feed it cat food for not calico cats.&lt;mvt:elseif expr="l.animal_type EQ 'dog'"&gt;    Let's feed it dog food.&lt;mvt:else&gt;    Do not feed it cat food or dog food.&lt;/mvt:if&gt;</pre><h3 class="h3 text-danger">mvt:foreach&nbsp;<a href="https://docs.miva.com/template-language/foreach" target="_blank" class="text-decoration-none"><i class="fa fa-sm fa-external-link"></i></a>﻿</h3><p>This is a way to process a list by looping through it. In coding a list is usually called an array.&nbsp;An array is nothing more than a bucket to hold a bunch of things that are the same, like products.</p><p>﻿Let's use the <code>mvt:do</code> example from above where we loaded a canonical URI&nbsp;for a product based on the product code but do it for a list of product codes rather than just one.</p><p>In this case we'll assign a list of product codes to a variable, turn that into an array using <code>miva_array_deserialize(...)</code> and then loop through to show a product list with links.﻿</p><pre class="p-3 bg-light rounded">&lt;mvt:assign name="l.product_codes" value="'product_code_1,product_code_2,product_code_3,product_code_4'" /&gt;&lt;mvt:assign name="l.settings:_products" value="miva_array_deserialize(l.product_codes)" /&gt;<br>&lt;mvt:foreach iterator="product" array="_products"&gt;    &lt;mvt:do file="g.Module_Library_DB" name="l.success" value="Product_Load_Code(l.product_code, l.settings:product)" /&gt;<br>    &lt;mvt:do file="g.Module_Feature_URI_DB" name="l.success" value="URI_Load_Product_Canonical(l.settings:product:id, l.settings:product:canonical_uri)" /&gt;<br>    &lt;mvt:if expr="l.success"&gt;        &lt;a href="&amp;mvte:product:canonical_uri:uri;"&gt;&amp;mvt:product:name;&lt;/a&gt;    &lt;mvt:else&gt;        Error: Problem loading URI for &amp;mvt:product:name;.    &lt;/mvt:if&gt;&lt;/mvt:foreach&gt;</pre><p><code>miva_array_deserialize(...)</code> : this is a built in mivascript function that turns a simple list of items that are separated by commas and into an array. Note that if there are commas in the item codes/names then you'd have to do it another way, probably one at a time with the function <code>miva_array_insert(...)</code></p><p>Notice that instead of using <code>mvt:eval</code> for the product name and uri, we used page entities (<code>&amp;mvt:product:name;</code>)﻿</p><div class="border border-secondary p-3 m-3"><p><b>Pro Tip:</b> You may have also noticed that I&nbsp;named the products array <code>l.settings:_products</code></p><p>I like to use an <code>_</code> (underscore) to prefix variable names for my own stuff because that way I&nbsp;am fairly confident that I'm not going to get my variables mixed up with anything else on the page. </p><p>Keeping your template code organized by properly formatting and indenting code, putting blank lines between sections, using comments, and giving variable names that make obvious sense on the page makes it easier to update the code later and makes it much easier for developers you hire to go in and do stuff fast, which also means you don't pay them as much.</p></div><h3 class="h3 text-danger">Conclusion</h3><p>These are the most often used SMT&nbsp;tags in your Miva Merchant page templates and should help you get a grip on what's going on in that template code. Send us a message if you would like to see a tutorial on anything else.﻿</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Fix Move All to Wish List "Invalid Wish List" Error in Miva Merchant]]></title>
<link>http://www.scotsscripts.com/blog/fix-move-all-to-wish-list-error-in-miva-merchant.html</link>
<description>There is a bug in current Miva Merchant templates that gives you an &quot;Invalid Wish List&quot; ï»¿error when a customer without an account tries to move all items in the basket to a wish list.</description> 
<pubDate>Wed, 9 Jun 2021 10:16:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/fix-move-all-to-wish-list-error-in-miva-merchant.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>Scenario:&nbsp;A new customer without an account tries to move all items from their basket into a wish list while on the basket page.</p><p>Result:&nbsp;An error "Invalid Wish List"&nbsp;is displayed after they create an account.</p><p>This happens because a wish list is not being created when they create their account so there isn't anywhere for the basket items to go and the form for them to create their account is missing actions that are necessary for this to happen.<br></p><p>Fixing it is pretty easy.</p><h3>Step 1.</h3><p>Log into your Miva Merchant admin.</p><h3>Step 2.</h3><p>Open up the Customer Create (ACAD) page in the User Interface.</p><h3>Step 3.</h3><p>Find the form for creating an account. In modern stores the form tag will look something like the code below. The conditionals above the form tag set the URL based on what is going on. In this situation, the url is set to the wish list page because of <code>g.wishlist</code>.</p><pre class="prettyprint linenums:1">&lt;mvt:if expr="g.Order"&gt;    &lt;mvt:assign name="l.settings:url" value="l.settings:urls:OINF:secure" /&gt;&lt;mvt:elseif expr="g.Redeem"&gt;    &lt;mvt:assign name="l.settings:url" value="l.settings:urls:RGFT:secure" /&gt;&lt;mvt:elseif expr="g.WishList"&gt;    &lt;mvt:assign name="l.settings:url" value="l.settings:urls:WISH:secure" /&gt;&lt;mvt:else&gt;    &lt;mvt:assign name="l.settings:url" value="l.settings:urls:ACED:secure" /&gt;&lt;/mvt:if&gt;<br>&lt;form id="acad_form" method="post" action="&amp;mvte:url;" autocomplete="off"&gt;    &lt;input type="hidden" name="Action" value="ICST" /&gt;</pre><p>If your template code looks different you might have an older or newer or custom setup for wish lists and will need to do something else to get it working.</p><h3>Step 4.</h3><p>Replace the last line in the code above, the&nbsp;hidden input, with:</p><pre class="prettyprint linenums:1">&lt;mvt:if expr="g.wishlist"&gt;    &lt;input type="hidden" name="Action" value="ICST,IWSH,MAWL"&gt;    &lt;input type="hidden" name="WishList_Title" id="WishList_Title" value="My Wish List"&gt;&lt;mvt:else&gt;    &lt;input type="hidden" name="Action" value="ICST" /&gt;&lt;/mvt:if&gt;</pre><p>What this does is set a name for a new wish list and adds the required action codes to go through the process of moving all items from the basket to the wish list when the customer is in the create a new account flow.</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Favorite Web Development Tools and Resources]]></title>
<link>http://www.scotsscripts.com/blog/favorite-web-developement-resources.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com
					<p>All developers have their go-to tools to make web development life easier. Here's a list of mine.</p><p>This list will grow as time goes on. If you have a resource that could be added here, let us know.</p><h3 class=" />When you are coding for the web or anything else, tools that make the job easier and faster are key. These are Scot's Scripts favorite web design tools.]]></description>
<pubDate>Wed, 6 Jan 2021 05:44:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/favorite-web-developement-resources.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>All developers have their go-to tools to make web development life easier. Here's a list of mine.</p><p>This list will grow as time goes on. If you have a resource that could be added here, let us know.</p><h3 class="h3">Web Utilities</h3><p><b>IP Checker:</b>&nbsp;Fast IP lookup. Defaults to your IP so it's easy to know what to use for IP&nbsp;based debugging (If your IP&nbsp;changes on a regular basis like mine does.)</p><p><a href="https://ipapi.co/" class="text-decoration-none">https://ipapi.co/</a></p><p><b>Htaccess Tester:</b> Test htaccess directives before bricking your site.</p><p><a href="http://htaccess.madewithlove.be/" class="text-decoration-none">http://htaccess.madewithlove.be/</a></p><p><b>Redirect Checker:</b> Gives you low level information on the kinds of redirects a site page is going through.</p><p><a href="https://www.redirect-checker.org/index.php" class="text-decoration-none">https://www.redirect-checker.org/index.php</a></p><p><b>W3 Markup Validator:</b>&nbsp;Great tool to make sure your pages all have legal HTML.</p><p><a href="https://validator.w3.org/" class="text-decoration-none">https://validator.w3.org/</a></p><p><b>HTML Formatter:</b> Takes messy HTML and fixes it.</p><p><a href="https://www.freeformatter.com/html-formatter.html" class="text-decoration-none">https://www.freeformatter.com/html-formatter.html</a></p><p><b>HTML Tidy:</b> Similar to HTML Formatter. Sometimes you need another tool to do the same job.</p><p><a href="https://htmltidy.net/" class="text-decoration-none">https://htmltidy.net/</a></p><p>Online <b>JSON Parser:</b> Is that an error I see in your json? Json errors can kill javascript and other web apps.</p><p><a href="http://json.parser.online.fr/" class="text-decoration-none">http://json.parser.online.fr/</a></p><p><b>JSON&nbsp;Examples:</b> We all need refreshers every now and then.</p><p><a href="https://jsontotable.org/blog/json/sample-json" class="text-decoration-none">https://jsontotable.org/blog/json/sample-json</a></p><p><b>Javascript Beautifier: </b>This also gives you hints about javascript coding errors.</p><p><a href="https://beautifier.io/" class="text-decoration-none">https://beautifier.io/</a></p><p><b>XML Validator</b></p><p><a href="https://codebeautify.org/xmlvalidator" class="text-decoration-none">https://codebeautify.org/xmlvalidator</a></p><p><b>ISO Lists:</b>&nbsp;All the lists you need. Countries, states, timezones, whatever.</p><p><a href="https://www.iso.org/obp/ui/#search" class="text-decoration-none">https://www.iso.org/obp/ui/#search</a></p><p><b>Calculators:</b>&nbsp;Sometimes you just need one. Many different kinds of calculators here.</p><p><a href="https://planetcalc.com/" class="text-decoration-none">https://planetcalc.com/</a></p><p>Find <b>Unclosed DIV</b> and other tags:</p><p><a href="https://www.aliciaramirez.com/closing-tags-checker/" class="text-decoration-none">https://www.aliciaramirez.com/closing-tags-checker/</a></p><p><b>REG-EX Tester:</b> Useful for htaccess and other situations that need complex regular expressions.</p><p><a href="https://www.regexpal.com/" class="text-decoration-none">https://www.regexpal.com/</a></p><p></p><h3 class="h3">Graphics, Galleries,&nbsp;Design</h3><p><del>BX Slider</del></p><p><b>Swiper.js:</b>&nbsp;<a href="https://swiperjs.com/" class="text-decoration-none">https://swiperjs.com/</a>&nbsp;2025 version of BX&nbsp;Slider, better in every way, mobile perfect, no need to look elsewhere.</p><p>Unite Gallery:&nbsp;<a href="http://unitegallery.net/" class="text-decoration-none">https://unitegallery.net/</a> Beautiful, full featured, many different galleries, and easy to use. Supported by The Gallery module. 2025 note: This gallery is a bit old and busy, there are some other galleries that may be more useful.</p><p><b>Featherlight Lightbox:</b>&nbsp;This is old but still the cleanest lightbox out there. Takes some effort to customize it for galleries and such.&nbsp;<a href="https://github.com/noelboss/featherlight/" class="text-decoration-none">https://github.com/noelboss/featherlight/</a></p><p><b>Favicon Generator:</b>&nbsp;I've never had a client who wasn't thrilled with their new favicon (browser tab graphic)</p><p><a href="https://realfavicongenerator.net/" class="text-decoration-none">https://realfavicongenerator.net/</a></p><p><a href="https://www.favicon.cc/" class="text-decoration-none">https://www.favicon.cc/</a></p><p>Gradient Editor by Color Zilla - create css gradients (like the top header background here.)</p><p><a href="https://www.colorzilla.com/gradient-editor/" class="text-decoration-none">https://www.colorzilla.com/gradient-editor/</a></p><p>Color Scheme Generator: Sometimes inspiration needs a kick.</p><p><a href="https://paletton.com/" class="text-decoration-none">https://paletton.com/</a></p><p>Convert PNG to Base64: Useful for embedding icons in a module.</p><p><a href="https://onlinepngtools.com/convert-png-to-base64" class="text-decoration-none">https://onlinepngtools.com/convert-png-to-base64</a></p><p>Placehold.co:&nbsp;Easy to use URLs for placeholder graphics.</p><p><a href="https://placehold.co/" class="text-decoration-none">https://placehold.co/</a>&nbsp;- image below: placehold.co/250x65</p><figure><img src="https://placehold.co/250x65" data-image="c3hlo3symbun" class="img-fluid"></figure><h3 class="h3"></h3><h3 class="h3">Windows/OS Utiltiies</h3><p>Greenshot:&nbsp;My go-to screenshot generator. I like this because it's super easy to use and has an editor that I can use for arrows, text, circles, etc...&nbsp;</p><p><a href="https://getgreenshot.org/" class="text-decoration-none">https://getgreenshot.org/</a></p><h3 class="h3">SEO</h3><p>Google Rich Results Test: Make sure your pages have the data they need.</p><p><a href="https://search.google.com/test/rich-results" class="text-decoration-none">https://search.google.com/test/rich-results</a></p><p>SEO One Click:&nbsp;The absolute best browser extension for quickly checking a web page meta and microdata.</p><p><a href="http://www.seo-extension.com/" class="text-decoration-none">http://www.seo-extension.com/</a></p><p>Schema.org is the definitive guide to microdata and includes json/ld examples for almost all situations.</p><p><a href="https://www.schema.org" class="text-decoration-none">https://www.schema.org</a></p><h3 class="h3">Resources</h3><p>W3 Schools is where we learn how to code. HTML, CSS, JS, and everything else.&nbsp;</p><p><a href="https://www.w3schools.com/" class="text-decoration-none">https://www.w3schools.com/</a></p><p>Stack Overflow: Any coding related question answered. Most questions have already been answered.</p><p><a href="https://stackoverflow.com/questions" class="text-decoration-none">https://stackoverflow.com/questions</a></p><p>PHP Sandbox: Just in case you need to get some PHP working</p><p><a href="https://sandbox.onlinephpfunctions.com/" class="text-decoration-none">https://sandbox.onlinephpfunctions.com/</a></p><p>Dummy Text (lorem ipsum) generator. Great for filler text when creating a mockup.</p><p><a href="https://www.blindtextgenerator.com/lorem-ipsum" class="text-decoration-none">https://www.blindtextgenerator.com/lorem-ipsum</a></p><h3 class="h3">Security</h3><p>Project Honeypot: Find out if an IP is a spammer or worse.</p><p><a href="https://www.projecthoneypot.org/" class="text-decoration-none">https://www.projecthoneypot.org/</a></p><p>The complete IP check for sending Mailservers - Useful if you're dealing with figuring out black lists, email address marked as spam, etc...</p><p><a href="https://multirbl.valli.org/" class="text-decoration-none">https://multirbl.valli.org/</a></p><p>MX Lookup from MX Toolbox - Another resource to help figure out why an email address might be marked as spam and other domain issues.</p><p><a href="https://mxtoolbox.com/" class="text-decoration-none">https://mxtoolbox.com/</a></p><h3 class="h3">Miva Merchant</h3><p>Check out&nbsp;<a  href="https://my.miva.com/signup.php?affiliate_code=NH1h8G2O">Miva Merchant</a> if you are looking for a flexible, powerful, top shelf ecommerce platform.</p><p>The best resource for Mivascript functions and related information:</p><p><a href="http://www.mivascript.com/" class="text-decoration-none">http://www.mivascript.com/</a></p><p>Shadows Style Guide and other documentation:</p><p><a href="https://docs.miva.com/readytheme-shadows/#overview-style-guide" class="text-decoration-none">https://docs.miva.com/readytheme-shadows/#overview-style-guide</a></p><p>Miva Merchant API Functions:&nbsp;Use these in store pages and modules. Page Template code functions. Not all functions are here, sometimes you need to look in the LSK.</p><p><a href="https://docs.miva.com/api-functions" class="text-decoration-none">https://docs.miva.com/api-functions</a></p><p>Module API reference guide: Want to make miva modules or need info a particular feature? Here's the file. Note that it hasn't been updated for Miva 10 as of Jan 2021.</p><p><a href="https://www.miva.com/pdf/MM_Module_API_Ref_Guide_v45.pdf" class="text-decoration-none">https://www.miva.com/pdf/MM_Module_API_Ref_Guide_v45.pdf</a></p><p>Miva Merchat Limited Source Kit (LSK) contains source code to about 80% of Miva Merchant. Invaluable if you are learning module and miva script coding in general.</p><p><a href="https://apps.miva.com/miva-merchant-limited-source-kit.html" class="text-decoration-none">https://apps.miva.com/miva-merchant-limited-source-kit.html</a></p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Content Studio Module for Miva Merchant]]></title>
<link>http://www.scotsscripts.com/blog/content-studio-module-for-miva-merchant.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com/blogimages/content_studio_scots_scripts_2021.png" />Content Studio is a sophisticated rich content module for Miva Merchant with a next generation WYSIWYG editor, logical organization, and easy to use features.]]></description>
<pubDate>Sun, 27 Dec 2020 17:38:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/content-studio-module-for-miva-merchant.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>We're pleased to announce the release of the <a href="https://www.scotsscripts.com/content-studio.html" target="_blank">Content Studio</a>, a cutting edge WYSIWYG editor and content manager&nbsp;for Miva Merchant.</p><p>Take a look at the video tour:</p><figure><iframe width="500" height="281" src="//www.youtube.com/embed/baOfD4hfrfQ" frameborder="0" allowfullscreen=""></iframe></figure><p>Content Studio gives Miva Merchant store administrators a tool to easily create rich content for their stores. Creating vibrant product content has never been easier.</p><p>Differences between Content Studio and Scot's Blogger</p><p>The main differences between the two modules is that the blogger is specifically made for blogging and content management with full URL control and organization features in line with most blogging platforms whereas the Content Studio is designed for admins to create rich content blocks to use within Miva Merchant.</p><p>The editors are similar although the Content Studio editor is a bit more advanced and has more readily available options. The major difference regarding editors is that in the Content Studio, as of version 1.008, only store admins can edit and create content although this may change if enough customers request it. The blogger module uses customer accounts, editor accounts, for content creation and maintenance.</p><p>Image support is about the same, however the Content Studio does have an image selector that gives you quick access to previously used images as well as access to product images if you're creating locked product content. Locked content is nothing more than content associated with a particular product, page, or category. We call it locked because the code is locked into the product, page or category.</p><p>Another major difference is how easy it is to use Content Studio content anywhere in your store. It's possible to use blogger content anywhere in your store, and many people do it (including here on Scot's Scripts) but the Content Studio makes it much more straightforward.&nbsp;</p><p>Another big difference is organizing content. In the blogger module content is organized first between different blogs, then there are codes, categories, and tags. Tags are treated as search items, codes are treated one more way to organize, and categories are, well, categories.</p><p>In the Content Studio content is organized by codes and tags, and through a simple URL parameter the Content Studio can be used as a support and documentation system, a simple blogging system, and a way to links various bits of content into seamless groups, with the content accessed much more easily than with the blog module.</p><p>In summary, if you're looking for something more like Word Press where your posts have their own URLs&nbsp;then the blogger module is for you. If you are looking for an easy way to add&nbsp;rich content in your store for pages, products, and anything else, then the Content Studio is for you.</p><p><br></p><p></p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Miva Merchant Error: admin/storemod.mv]]></title>
<link>http://www.scotsscripts.com/blog/miva-merchant-error-adminstoremodmv.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com
					<p>If you are in the Miva Merchant admin and this error breaks the store:<br></p><pre class=" />Just a quick mention of a Miva Merchant admin error that befuddled me for a little while.]]></description>
<pubDate>Sat, 12 Dec 2020 09:14:19 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/miva-merchant-error-adminstoremodmv.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>If you are in the Miva Merchant admin and this error breaks the store:<br></p><pre class="prettyprint linenums:1">Runtime error in mm5/5.00/admin.mvc @ [00000332:000003d8]: admin/storemod.mv: Line 882: MvDO: No such file or directory</pre><p>it means there is a module file physically missing.&nbsp;</p><p>The "Line 882" will most likely change as Miva Merchant 10 is updated, but the error will probably remain the same until the developers add a routine to check for the existence of module files before trying to access them.</p><p>This error comes up if you rename, move, or delete a module manually using FTP, your hosting control panel, or some other means.</p><p>The only way to get rid of this error is to put the file back or go into PHPMyAdmin and manually edit the store tables relating to modules (which I will not explain here: If you know how, you know how, if you don't, you shouldn't do it.)</p><figure><img src="https://www.scotsscripts.com/blogimages/miva_merchant_10_error_storemod_1607793224.png" data-image="1607793224"></figure>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Miva Merchant Custom Fields for Pages]]></title>
<link>http://www.scotsscripts.com/blog/miva-merchant-page-custom-fields.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com
					<p>The most powerful content feature in Miva Merchant is rarely used to it's full potential.</p><p>Basically, we're talking about custom fields for pages, as many as you want. </p><p>You won't find a " />Have you ever wanted custom fields for pages in Miva Merchant? Well, you already have them but they aren't called custom fields.]]></description>
<pubDate>Wed, 9 Dec 2020 11:04:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/miva-merchant-page-custom-fields.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>The most powerful content feature in Miva Merchant is rarely used to it's full potential.</p><p>Basically, we're talking about custom fields for pages, as many as you want. </p><p>You won't find a "Custom Fields" tab when editing a page template, but you will find an "SEO" tab.</p><figure><img src="https://www.scotsscripts.com/blogimages/miva_merchant_meta_fields_seo_tab_Scots_scripts_1607539919.png" data-image="1607539919"></figure><p>By default you will most often see options&nbsp;for page title, description, and key words. However, you can add as many options as you want and use them like page custom fields.</p><p>Using them is super easy.</p><h3>Assign Page Item</h3><p>First, check the "ITEMS" tab and make sure the "Product/Category META-Tag Settings" (prodctgy_meta) item is assigned. If it's not then all you get is the title SEO field.</p><figure><img src="https://www.scotsscripts.com/blogimages/miva_merchant_meta_seo_tab_Scots_scripts_1609534611.png" data-image="1609534611"></figure><p></p><h3>Create Custom Fields for Miva Pages<br></h3><p>Go&nbsp;to the "Global Settings" in the "User Interface" and then click on "META Tag Settings".&nbsp;</p><figure><img src="https://www.scotsscripts.com/blogimages/scots_miva_scripts_meta_fields_miva_merchant_2020_1607540242.png" data-image="1607540242"></figure><p></p><p>Once you're in there click the "Add META Name" button and make a new meta tag/page custom field.</p><h3>Example</h3><p>Let's say you want to add a meta image (sharing image) to your pages. </p><p>You'd create a new meta tag called <code>meta_image</code> (or whatever you like) by clicking the "Add META Name" button, entering <code>meta_image</code> in the "meta name" column, something like "Meta Image" in the prompt, and then selecting text area or text field from the dropdown and saving changes.</p><figure><img src="https://www.scotsscripts.com/blogimages/miva_merchant_page_custom_fields_scots_scripts_2020_1607540400.png" data-image="1607540400"></figure><p>Select text field for small items such as headline and titles and whatnot. Select text area for larger blocks of code.</p><p>Customize the new meta image field by opening a page to edit and clicking on the "SEO" tab.</p><figure><img src="https://www.scotsscripts.com/blogimages/scots_miva_scripts_meta_image_for_miva_merchant_2020_1607540602.png" data-image="1607540602"></figure><h3>Using Page Meta Fields</h3><p>All page meta fields are accessed the same way.</p><p><code>l.settings:page_metafields:meta_name</code></p><p>For the example above, the meta_image data is available in&nbsp;<code>l.settings:page_metafields:meta_image</code> and can be displayed using <code>mvt:eval</code> or with a page entity: <code></code></p><p><strong>Why is all this useful?</strong></p><p>It makes it easy to customize the data on a page the same way product custom fields make it easy to customize product data.</p><p>If you want to override the default "seo title" that a page is using, you can make a meta field called title_override, go to the "SEO" tab of the page and enter an alternate title, then in the head of the page or your global header and footer use code like this to see if there is an alternate title and if so, display it. This example has a final fallback to the page name.</p><pre class="prettyprint linenums:1">&lt;mvt:if expr="l.settings:page_metafields:title_override"&gt;    &lt;h1&gt;&amp;mvt:page_metafields:title_override;&lt;/h1&gt;&lt;mvt:elseif expr="l.settings:page:title"&gt;    &lt;h1&gt;&amp;mvt:page:title;&lt;/h1&gt;&lt;mvt:else&gt;    &lt;h1&gt;&amp;mvt:page:name;&lt;/h1&gt;&lt;/mvt:if&gt;</pre>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Solution for Thunderbird 78 Taking a Long Time to Preview Message]]></title>
<link>http://www.scotsscripts.com/blog/solution-for-thunderbird-taking-a-long-time-to-preview-message.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com
					<p>Thunderbird (<a href=" />If your messages are loading slowly in Thunderbird, try this easy fix to see if it helps you speed things up.]]></description>
<pubDate>Thu, 22 Oct 2020 10:02:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/solution-for-thunderbird-taking-a-long-time-to-preview-message.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>Thunderbird (<a href="https://www.thunderbird.net/en-US/download/">https://www.thunderbird.net/en-US/download/</a>) is an amazing email client because it does whatever I want. My emails are on my computer so it's fast and convenient. I'm currently running&nbsp;version&nbsp;78.4.0, 32bit.</p><p>Sometimes, however, Thunderbird is not fast and in my case it always had problems loading up long messages for viewing. Sometimes I&nbsp;have long emails because a I'm going back and forth with a client about something, and as that message gets larger and larger, sometimes over 100k, Thunderbird gets slower and slower.</p><p>This isn't a new problem. I've been dealing with it on and off for years. Today I found a solution, and it changed my Thunderbird world.</p><h3>Speed Up Thunderbird Message Loading</h3><ul><li>Go to the "<strong>View</strong>"&nbsp;menu item.</li><li>Find the "<strong>Message Body As</strong>" option.</li><li>Select the "<strong>Plain Text</strong>" option.</li></ul><p>If the screenshot below doesn't look like your Thunderbird it might be&nbsp;because I turned off the fly-out menu and and use the old style menu.</p><figure><img src="https://www.scotsscripts.com/blogimages/thunderbird_78_slow_message_load_scots_miva_scripts_1603329495.png" data-image="1603329495"></figure><p>Once I selected "Plain Text" method of viewing the message body, all those&nbsp;huge&nbsp;message threads that took forever to load started loading&nbsp;up hundreds of times faster.</p><p>What is the downside?&nbsp;You don't see images or any other kinds of graphics, which doesn't matter one bit because you can install this addon to give you a button that loads the html version of a message if you want it:</p><p><a href="https://addons.thunderbird.net/en-us/thunderbird/addon/allow-html-temp/">https://addons.thunderbird.net/en-us/thunderbird/addon/allow-html-temp/</a></p><p>To install this addon in Thunderbird, click on <strong>TOOLS</strong> then <strong>ADD-ONS</strong> then search for "<strong>Allow HTML Temp</strong>"<br></p><h3>Quick Privacy Tip</h3><p>Turn graphics off in Thunderbird. Do it now.</p><p>Did you know that it's super easy to track if you opened an email simply by loading the graphics? You will notice that sometimes when an image is loaded in an email it won't just be <code>src="some_image.jpg"</code>, it&nbsp; might be <code>src="some_image.jpg?some_variable=some_value"</code></p><p>When that image is loaded, the back end software can track it because of the url parameters/variables attached to the image call.</p><p>Turn off Thunderbird graphics in message by going to OPTIONS and search for "remote"</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Disable Double Click on Submit Button]]></title>
<link>http://www.scotsscripts.com/blog/how-to-disable-double-click-on-submit-button.html</link>
<description>Prevent double clicks on form buttons. </description> 
<pubDate>Thu, 16 Jan 2020 14:27:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/how-to-disable-double-click-on-submit-button.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>A lot of web users double click links and form buttons.&nbsp;</p><p>I've watched over the shoulder of friends, normally older friends who haven't grown up with computers,&nbsp;who do this and when I ask them why, the answer is basically the same. They didn't know that you could click links and buttons once. They thought it was like their computer.</p><p>The problem isn't that they click form buttons twice, the problem is whatever server side processing is going on doesn't know how to handle a double submit.&nbsp;</p><p>This is a bug in the server side processing system and the developer should have taken double submits into consideration when creating their Miva Module, php script, or whatever.</p><p>The main issue with that?&nbsp;Often you can't get the original developer to fix the issue or if they do it takes a long time for them to get around to it or figure out a solution.<br></p><p>In the meantime, you can add a very simple bit of javascript to any button to disable more than one click.<br></p><h3>The Prevent Double Form Submit&nbsp;Fix</h3><p></p><pre class="prettyprint linenums:1">&lt;button type="submit" id="submitbutton" onclick="document.getElementById('submitbutton').disabled = true;"&gt;Click Me&lt;/button&gt;</pre><p>Normal button:</p><p><button type="button">Click Me!</button></p><p>Single click button:</p><p><button type="button" id="submitbutton" onclick="document.getElementById('submitbutton').disabled = true;">Click Me Too!</button></p><p>That disabled any further clicking of the button but it doesn't really show the user they clicked, so they might hurt themselves clicking over and over again while the form is being processed.&nbsp;</p><h3>Fade the Button After Click</h3><p>Let's add one more bit of js to fade the button out a bit so users have a visual cue that they clicked the button.</p><pre class="prettyprint linenums:1">&lt;button type="submit" id="submitbutton" onclick="document.getElementById('submitbutton').disabled = true;document.getElementById('submitbutton').style.opacity='0.5';"&gt;Click Me&lt;/button&gt;</pre><p>Single click button that fades out:</p><p><button type="button" id="submitbutton2" onclick="document.getElementById('submitbutton2').disabled = true;document.getElementById('submitbutton2').style.opacity='0.5';">Click Me Three!</button></p><p>Now it's apparent that the button was clicked.</p><h3>Jquery</h3><p>Doing this with Jquery lets you get more creative with less work than doing it in pure javascript. You may want to replace the button with a spinner, or change the button text, or any number of creative options. The easiest is to hide the button and show something else, like a message (or hide the active button and replace it with an inactive button.)&nbsp;</p><p>These kinds of things are done using Jquery <code>hide()</code> and <code>show()</code> functions. Check out <a href="https://www.w3schools.com/jquery/jquery_hide_show.asp" target="_blank">w3schools jquery show and hide tutorial</a> on this for more information.</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Make the "Select" Form Element Easy with Mivascript]]></title>
<link>http://www.scotsscripts.com/blog/make-the-select-form-element-easy-with-mivascript.html</link>
<description>Using shortcut functions makes your mivascript projects go faster. This function takes the hassle out of the select form element.</description> 
<pubDate>Thu, 21 Nov 2019 10:05:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/make-the-select-form-element-easy-with-mivascript.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>The "select"&nbsp;form element let's people select from a list of options. The only real problem with it is when the data is being edited there may be a lot of MvIF's to contend with and if there are a lot of "select"&nbsp;form elements, populating the form data with the right selection&nbsp;can get messy with a lot of extra code.<br><br>Here's a mivascript function that makes this super easy and removes the mess.<br><br></p><pre class="prettyprint linenums:1">&lt;MvFUNCTION NAME = "select" PARAMETERS = "class,default,name,condition,options" STANDARDOUTPUTLEVEL="compresswhitespace,text,html" &gt;    &lt;MvASSIGN NAME = "l.options" VALUE = "{ miva_array_deserialize( l.options ) }" /&gt;    &lt;select class="{ l.class } name="{ l.name }"&gt;        &lt;option value=""&gt;&lt;MvEVAL EXPR = "{ l.default }"&gt;&lt;/option&gt;        &lt;MvFOREACH ITERATOR = "l.option" INDEX = "l.pos" ARRAY = "l.options"&gt;            &lt;MvIF EXPR = "{ gettoken(l.option,'-',1) EQ l.condition }"&gt;                &lt;option value="{ gettoken(l.option,'-',1) }" selected&gt;&lt;MvEVAL EXPR = "{ gettoken(l.option,'-',2) }"&gt;&lt;/option&gt;            &lt;MvELSE&gt;                &lt;option value="{ gettoken(l.option,'-',1) }"&gt;&lt;MvEVAL EXPR = "{ gettoken(l.option,'-',2) }"&gt;&lt;/option&gt;            &lt;/MvIF&gt;        &lt;/MvFOREACH&gt;    &lt;/select&gt;&lt;/MvFUNCTION&gt;</pre><ul><li>The <code>class</code> parameter sets the "select" form element class.</li><li>The <code>default</code>parameter sets the no-value option (like, "Select one...")</li><li>The <code>name</code> parameter is the name of the variable for the "select" form element.</li><li>The <code>condition</code> parameter is the what has to match in order to make an option selected.</li><li>The <code>options</code> parameter is a list of option values and labels.<br></li></ul><p>The options parameter is set up in a deserialized array style and we also use a dash to separate the value from the option label:</p><pre class="prettyprint linenums:1">&lt;MvASSIGN NAME = "l.options" VALUE = "{ 'value1-Option Label One,value2-Option Label Two,value3-Option Label Three,value4-Option Label Four' }" /&gt;</pre><p>Here's a basic call to list the above options without anything selected. This would be used for a fresh form for a new record.</p><pre class="prettyprint linenums:1">&lt;MvASSIGN NAME = "l.ok" VALUE = "{ select(l.null,'Select one...','selected_value',l.null,l.options) }" /&gt;</pre><p><select name="selected_value"><option value="">Select one...</option><option value="value1">Option Label One</option><option value="value2">Option Label Two</option><option value="value3">Option Label Three</option><option value="value4">Option Label Four</option></select></p><p>When you're populating the form for editing you would set the condition that needs to be matched so the proper "option"&nbsp;is preselected.&nbsp;In this example we'll set the condition to&nbsp; 'value2' so it's automatically selected:</p><pre class="prettyprint linenums:1">&lt;MvASSIGN NAME = "l.condition" VALUE = "{ 'value2' }" /&gt;&lt;MvASSIGN NAME = "l.ok" VALUE = "{ select(l.null,'Select one...','selected_value',l.condition,l.options) }" /&gt;</pre><p>This sets the value2 option as selected:</p><p><select name="selected_value"><option value="">Select one...</option><option value="value1">Option Label One</option><option value="value2" selected="">Option Label Two</option><option value="value3">Option Label Three</option><option value="value4">Option Label Four</option></select></p><p>I'm using the bootstrap framework here so I could include the form-control class:</p><pre class="prettyprint linenums:1">&lt;MvASSIGN NAME = "l.condition" VALUE = "{ 'value2' }" /&gt;&lt;MvASSIGN NAME = "l.ok" VALUE = "{ select('form-control','Select one...','selected_value',l.condition,l.options) }" /&gt;</pre><p>This will evaluate to:</p><pre class="prettyprint linenums:1">&lt;select class="form-control" name="selected_value"&gt;    &lt;option value=""&gt;Select one...&lt;/option&gt;    &lt;option value="value1"&gt;Option Label One&lt;/option&gt;    &lt;option value="value2" selected&gt;Option Label Two&lt;/option&gt;    &lt;option value="value3"&gt;Option Label Three&lt;/option&gt;    &lt;option value="value4"&gt;Option Label Four&lt;/option&gt;&lt;/select&gt;</pre><div class="row"><div class="form-group col-md-4"><select class="form-control" name="selected_value"><option value="">Select one...</option><option value="value1">Option Label One</option><option value="value2" selected="">Option Label Two</option><option value="value3">Option Label Three</option><option value="value4">Option Label Four</option></select></div></div>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Mivascript: The Wide World of Arrays]]></title>
<link>http://www.scotsscripts.com/blog/mivascript-the-wide-world-of-arrays.html</link>
<description>Arrays are indispensable in the world of coding. Mivascript arrays are easy to use and follow the same basic array principles you'll find in any coding language.</description> 
<pubDate>Fri, 26 Jul 2019 16:21:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/mivascript-the-wide-world-of-arrays.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p><a href="http://www.mivascript.com/topic/arrays.html" target="_blank">Mivascript Arrays</a> on a basic level are a list of items organized in a way that makes them easy to access. All programming languages have some sort of array support and Mivascript is no different.</p><p><strong>Filling an Array</strong></p><p>Here are a few ways you can add items to an array. For this example we'll use a simple array (list) of names.</p><p>The first example is how to create the array manually.</p><pre class="prettyprint linenums:1">&lt;mvassign name="l.myarray" index="1" value="{ 'Isaac Asimov' }"&gt;&lt;mvassign name="l.myarray" index="2" value="{ 'Ursala K. Leguin' }"&gt;&lt;mvassign name="l.myarray" index="3" value="{ 'Fritz Leiber' }"&gt;&lt;mvassign name="l.myarray" index="4" value="{ 'Andre Norton' }"&gt;&lt;mvassign name="l.myarray" index="5" value="{ 'Fredrich Pohl' }"&gt;</pre><p>The name of the&nbsp;array is <code>l.myarray</code> and we're putting names of sci-fi/fantasy authors into it. The <code>index</code> is what position the array item is in.</p><p><strong>Display the Array</strong></p><p>One of the most basic things to do with an array is display the array contents. We'll use the built in <a href="http://www.mivascript.com/item/mivascript-tags/MvFOREACH.html" target="_blank">MvFOREACH</a> Mivascript tag to do this.</p><pre class="prettyprint linenums:1">&lt;mvforeach iterator="l.arrayitem" index="l.pos" array="l.myarray"&gt;    &lt;mveval expr="{ l.arrayitem }"&gt;&lt;br&gt;&lt;/mvforeach&gt;</pre><p>This displays:</p><pre class="prettyprint linenums:1">Isaac AsimovUrsala K. LeguinFritz LeiberAndre NortonFredrich Pohl</pre><p>A more dynamic way of loading an array is to use the <a href="http://www.mivascript.com/item/arrays/miva_array_insert.html" target="_blank">miva_array_insert(...)</a> function. It's quite useful while template coding in <a  href="https://my.miva.com/signup.php?affiliate_code=NH1h8G2O">Miva Merchant</a> templates.</p><pre class="prettyprint linenums:1">&lt;mvassign name="l.ok" value="{ miva_array_insert(l.myarray,'Isaac Asimov',-1) }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.myarray,'Ursala K. Leguin',-1) }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.myarray,'Fritz Leiber',-1) }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.myarray,'Andre Norton',-1) }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.myarray,'Fredrich Pohl',-1) }"&gt;</pre><p>This assigns each name to the end of the array. Instead of -1 you can also manually set a position, however the usefulness of this function is that you don't need to know the position to fill the array. This array will display using the same <code>MvFOREACH</code> code above.</p><p>These are the most simple arrays. But what if you want to add more data, for example, specify if the author is a male or female, or the author's favorite ice cream?</p><p><strong>Arrays of Structures</strong></p><p>This is where structures come in, and it's also quite easy.</p><p>Fill the array:</p><pre class="prettyprint linenums:1">&lt;mvassign name="l.author:name" value="{ 'Isaac Asimov' }"&gt;&lt;mvassign name="l.author:gender" value="{ 'male' }"&gt;&lt;mvassign name="l.author:icecream" value="{ 'Vanilla' }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.authors,l.author,-1) }"&gt;<br>&lt;mvassign name="l.author:name" value="{ 'Ursala K. Leguin' }"&gt;&lt;mvassign name="l.author:gender" value="{ 'female' }"&gt;&lt;mvassign name="l.author:icecream" value="{ 'Doomsday Swirl' }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.authors,l.author,-1) }"&gt;<br>&lt;mvassign name="l.author:name" value="{ 'Fritz Leiber' }"&gt;&lt;mvassign name="l.author:gender" value="{ 'male' }"&gt;&lt;mvassign name="l.author:icecream" value="{ 'Lankhmar Special' }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.authors,l.author,-1) }"&gt;<br>&lt;mvassign name="l.author:name" value="{ 'Andre Norton' }"&gt;&lt;mvassign name="l.author:gender" value="{ 'female' }"&gt;&lt;mvassign name="l.author:icecream" value="{ 'Mint Chocolate' }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.authors,l.author,-1) }"&gt;<br>&lt;mvassign name="l.author:name" value="{ 'Fredrich Pohl' }"&gt;&lt;mvassign name="l.author:gender" value="{ 'male' }"&gt;&lt;mvassign name="l.author:icecream" value="{ 'Strawberry' }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.authors,l.author,-1) }"&gt;</pre><p>Now each item in the array contains multiple pieces of information. Here's how we display that:</p><pre class="prettyprint linenums:1">&lt;mvforeach iterator="l.author" index="l.pos" array="l.authors"&gt;    &lt;p&gt;        Name: &lt;mveval expr="{ l.author:name }"&gt;&lt;br&gt;        Gender: &lt;mveval expr="{ l.author:gender }"&gt;&lt;br&gt;        Ice Cream: &lt;mveval expr="{ l.author:icecream }"&gt;    &lt;/p&gt;&lt;/mvforeach&gt;</pre><p>The output for this is:</p><pre class="prettyprint linenums:1">Name: Isaac AsimovGender: maleIce Cream: Vanilla<br>Name: Ursala K. LeguinGender: femaleIce Cream: Doomsday Swirl<br>Name: Fritz LeiberGender: maleIce Cream: Lankhmar Special<br>Name: Andre NortonGender: femaleIce Cream: Mint Chocolate<br>Name: Fredrich PohlGender: maleIce Cream: Strawberry</pre><p><strong>Bonus: <a href="http://www.mivascript.com/item/arrays/miva_array_sort.html" target="_blank">Sorting the Array</a></strong></p><p>Sorting the array should be a basic function of Mivascript, but instead it's a little bit tricky. Not that tricky once you get the hang of it, though.&nbsp;</p><p>Let's sort the above list of authors by their names before we display the data.&nbsp;</p><p>The&nbsp;<code>miva_array_sort( aggregate var, callback, data var)</code> function requires a callback function to do the heavy lifting. I'm not going to get into what this is all about, but this particular callback function will sort on the name. Add this function to the bottom of your script.</p><pre class="prettyprint linenums:1">&lt;mvfunction name="Sort_Callback" parameters="left var, right var, data var" standardoutputlevel=""&gt;    &lt;mvassign name="l.left_name" value="{ tolower( l.left:name ) }"&gt;    &lt;mvassign name="l.right_name" value="{ tolower( l.right:name ) }"&gt;<br>    &lt;mvif expr="{ l.left_name LT l.right_name }"&gt;        &lt;mvfunctionreturn value="-1"&gt;    &lt;mvelseif expr="{ l.left_name GT l.right_name }"&gt;        &lt;mvfunctionreturn value="1"&gt;    &lt;/mvif&gt;<br>    &lt;mvfunctionreturn value=""&gt;&lt;/mvfunction&gt;</pre><p>Sort the array:</p><pre class="prettyprint linenums:1">&lt;mvassign name="l.ok" value="{ miva_array_sort(l.authors,'Sort_Callback',l.data) }"&gt;</pre><p>Now when we display the data using the same MvFOREACH loop as above the names will be in alphabetical order.</p><p><strong>Full Script</strong></p><p>Here's an outline of what the script would look like:</p><ol><li>Fill the array</li><li>Sort the array</li><li> Display the array data</li><li>Include callback function</li></ol><pre class="prettyprint linenums:1">&lt;mvcomment&gt;|| fill up array|&lt;/mvcomment&gt;<br>&lt;mvassign name="l.author:name" value="{ 'Isaac Asimov' }"&gt;&lt;mvassign name="l.author:gender" value="{ 'male' }"&gt;&lt;mvassign name="l.author:icecream" value="{ 'Vanilla' }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.authors,l.author,-1) }"&gt;<br>&lt;mvassign name="l.author:name" value="{ 'Ursala K. Leguin' }"&gt;&lt;mvassign name="l.author:gender" value="{ 'female' }"&gt;&lt;mvassign name="l.author:icecream" value="{ 'Doomsday Swirl' }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.authors,l.author,-1) }"&gt;<br>&lt;mvassign name="l.author:name" value="{ 'Fritz Leiber' }"&gt;&lt;mvassign name="l.author:gender" value="{ 'male' }"&gt;&lt;mvassign name="l.author:icecream" value="{ 'Lankhmar Special' }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.authors,l.author,-1) }"&gt;<br>&lt;mvassign name="l.author:name" value="{ 'Andre Norton' }"&gt;&lt;mvassign name="l.author:gender" value="{ 'female' }"&gt;&lt;mvassign name="l.author:icecream" value="{ 'Mint Chocolate' }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.authors,l.author,-1) }"&gt;<br>&lt;mvassign name="l.author:name" value="{ 'Fredrich Pohl' }"&gt;&lt;mvassign name="l.author:gender" value="{ 'male' }"&gt;&lt;mvassign name="l.author:icecream" value="{ 'Strawberry' }"&gt;&lt;mvassign name="l.ok" value="{ miva_array_insert(l.authors,l.author,-1) }"&gt;<br>&lt;mvcomment&gt;|| sort array|&lt;/mvcomment&gt;<br>&lt;mvassign name="l.ok" value="{ miva_array_sort(l.authors,'Sort_Callback',l.data) }"&gt;<br>&lt;mvcomment&gt;|| display array data|&lt;/mvcomment&gt;<br>&lt;mvforeach iterator="l.author" index="l.pos" array="l.authors"&gt;    &lt;p&gt;        Name: &lt;mveval expr="{ l.author:name }"&gt;&lt;br&gt;        Gender: &lt;mveval expr="{ l.author:gender }"&gt;&lt;br&gt;        Ice Cream: &lt;mveval expr="{ l.author:icecream }"&gt;    &lt;/p&gt;&lt;/mvforeach&gt;<br>&lt;mvcomment&gt;|| callback function|&lt;/mvcomment&gt;<br>&lt;mvfunction name="Sort_Callback" parameters="left var, right var, data var" standardoutputlevel=""&gt;    &lt;mvassign name="l.left_name" value="{ tolower( l.left:name ) }"&gt;    &lt;mvassign name="l.right_name" value="{ tolower( l.right:name ) }"&gt;<br>    &lt;mvif expr="{ l.left_name LT l.right_name }"&gt;        &lt;mvfunctionreturn value="-1"&gt;    &lt;mvelseif expr="{ l.left_name GT l.right_name }"&gt;        &lt;mvfunctionreturn value="1"&gt;    &lt;/mvif&gt;<br>    &lt;mvfunctionreturn value=""&gt;&lt;/mvfunction&gt;</pre>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Set a "Master" Parent Category for a Product in Miva Merchant]]></title>
<link>http://www.scotsscripts.com/blog/how-to-set-a-master-parent-category-for-a-product-in-miva-merchant.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com
					<p>For this example let's say you are selling a baseball hat and in your store you have several categories that the hat belongs to, such as athletic wear, hats, and summer clothing.</p><p>Let's also say that when someone clicks on the hat you always want your breadcrumbs to reflect the hats category rather then the athletic wear or summer clothing.</p><p>Normally in Miva Merchant when a customer opens a category in the store and then clicks through to a product, the breadcrumbs will always show the categories the customer clicked in from. If they were in the athletic wear category and click on the baseball hat, the breadcrumbs will reflect athletic wear.</p><p>The way to make it so baseball hats always reflect the hats category is to set a Canonical Category.</p><p><strong>Step 1</strong></p><p>Open the product in the Miva Merchant admin.</p><p><strong>Step 2</strong></p><p>Assign the " />Normally a product breadcrumbs will show the category the customer &quot;clicked in&quot; from, however what if you want to show a different category in the breadcrumbs?]]></description>
<pubDate>Wed, 19 Jun 2019 13:07:35 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/how-to-set-a-master-parent-category-for-a-product-in-miva-merchant.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>For this example let's say you are selling a baseball hat and in your store you have several categories that the hat belongs to, such as athletic wear, hats, and summer clothing.</p><p>Let's also say that when someone clicks on the hat you always want your breadcrumbs to reflect the hats category rather then the athletic wear or summer clothing.</p><p>Normally in Miva Merchant when a customer opens a category in the store and then clicks through to a product, the breadcrumbs will always show the categories the customer clicked in from. If they were in the athletic wear category and click on the baseball hat, the breadcrumbs will reflect athletic wear.</p><p>The way to make it so baseball hats always reflect the hats category is to set a Canonical Category.</p><p><strong>Step 1</strong></p><p>Open the product in the Miva Merchant admin.</p><p><strong>Step 2</strong></p><p>Assign the "master category" (for this example&nbsp;"hats")&nbsp;to the Canonical Category field.</p><figure><img src="https://www.scotsscripts.com/blogimages/miva_merchant_how_set_master_product_category_canonical_scots_scripts_1560974594.png" data-image="1560974594"></figure><p>If you don't know the category code, click the "LOOK UP" button (note that I selected "Category 2" below, but it is the same process if I were to select "hats".)&nbsp;</p><figure><img src="https://www.scotsscripts.com/blogimages/miva_merchant_set_canoical_product_category_scots_miva_scripts_1560974620.png" data-image="1560974620"></figure><p>That's all there is to it. If you set the canonical category for a product, every time someone visits that product it will always show the canonical category in the breadcrumbs as well as in the meta and SEO information if you have it set up that way.</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Make a JSON Configuration file in Miva Script]]></title>
<link>http://www.scotsscripts.com/blog/make-a-json-configuration-file-in-miva-script.html</link>
<description>The Miva Scripting language has a fantastic JSON parser that makes it easy to use JSON files for configurations and other plain text settings.</description> 
<pubDate>Tue, 18 Jun 2019 11:18:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/make-a-json-configuration-file-in-miva-script.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>JSON is a very nice way to store data in plain text format. This is useful because you can edit it in a text area in your web app or Miva Merchant module, or simply edit it in a text editor.</p><p>Let's say your json&nbsp;file is called config.json and you want load the settings you've saved in it.&nbsp;</p><p>Let's say this is what the json file looks like:</p><pre class="prettyprint linenums:1">{    "name":"Scot Ranney",    "website_name":"Scot's Scripts",    "city":"Bellingham",    "state":"Washington"}</pre><p>The code below reads&nbsp;that file and puts the data into a structure you can use in your Miva script. This example assumes the json file is in the same directory as the script or module.</p><pre class="prettyprint linenums:1">&lt;mvif expr="{ sexists('config.json') }"&gt;    &lt;mvassign name="l.ok" value="{ file_read('config.json','script',l.json) }" /&gt;    &lt;mvassign name="l.ok" value="{ miva_json_decode(l.json,l.config) }" /&gt;&lt;/mvif&gt;</pre><p><strong>1.</strong> Use the built in Mivascript function <code>sexists(...)</code>&nbsp;<a href="http://www.mivascript.com/item/mivascript-functions/sexists.html" target="_blank"><i class="fa fa-external-link"></i></a> to see if the file exists. This way we don't get any error messages&nbsp;if the file isn't there.</p><p><strong>2.</strong> Use the built in Mivascript function <code>file_read(...)</code> <a href="http://www.mivascript.com/item/mivascript-functions/file_read.html" target="_blank"><i class="fa fa-external-link"></i></a> to load the data into a variable. In this case I decided to use&nbsp;<code>l.json</code> to hold the data from the json file.</p><p><strong>3.</strong> Use the built in Mivascript function <code>miva_json_decode(...)</code>&nbsp;<a href="http://www.mivascript.com/item/strings/miva_json_decode.html" target="_blank"><i class="fa fa-external-link"></i></a>&nbsp;to convert the json data into a structure. In this case the data would be available like this:</p><pre class="prettyprint linenums:1">l.config:namel.config:website_namel.config:cityl.config:state</pre><p>You could display it in any way, such as a welcome message:</p><pre class="prettyprint linenums:1">Hello &lt;MvEVAL EXPR= "{ l.config:name }"&gt;, how is the weather in &lt;MvEVAL EXPR= "{ l.config:city $ ', ' $ l.config:state }"&gt;?</pre><p>This would display as:</p><pre class="prettyprint linenums:1">Hello Scot, how is the weather in Bellingham, Washington?</pre>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[The Number One Miva Merchant SEO Tip]]></title>
<link>http://www.scotsscripts.com/blog/the-number-one-miva-merchant-seo-tip.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com
					<p><a  href=" />Miva Merchant is a great storefront but the SEO is not as complete out of the gate as some other eCommerce platforms. Do this first to help SEO.]]></description>
<pubDate>Sat, 8 Jun 2019 12:29:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/the-number-one-miva-merchant-seo-tip.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p><a  href="https://my.miva.com/signup.php?affiliate_code=NH1h8G2O">Miva Merchant</a>&nbsp;is a fantastic eCommerce platform that is used by businesses that don't want to deal with the inconsistencies, bugs, and security hassles that various other eCommerce platforms deal with.&nbsp;</p><p>However, once you have your Miva Merchant store set up, your product catalog finished, some custom images on the home page,&nbsp;what's next?</p><p>Most new <a  href="https://my.miva.com/signup.php?affiliate_code=NH1h8G2O">Miva Merchant</a>&nbsp;stores have similar <a href="https://www.scotsscripts.com/blog/search.html?_scotsblogger_search=tag:SEO">SEO</a>&nbsp;issues when they go online, and if you are interested in fixing all of them, check out our Miva Merchant Checklist (with an infographic you can print out for reference):&nbsp;<br><br><a href="https://www.scotsscripts.com/blog/seo-checklist-by-scots-scripts.html">https://www.scotsscripts.com/blog/seo-checklist-by-scots-scripts.html</a><strong><br><br>The First SEO Task for New Miva Merchant Stores: Category Descriptions</strong></p><p>Your product categories are important for SEO but Miva Merchant does not come with built in category description fields. That means you need to manually set category descriptions in your SEO tab.</p><p><strong>Move Your SEO Tab</strong></p><p>The SEO tab is sometimes hidden or at the end of the tab list. Let's move it to the beginning so you are reminded to use the SEO tab every time you create a category.</p><p>First open up a category in the Miva Merchant admin and see if the SEO tab is visible. If not, click the More button and select the Edit Tab Display Order option.</p><figure><img src="https://www.scotsscripts.com/blogimages/2019-miva-merchant-seo-important-tip-scots-miva-scripts_1560019489.png" data-image="1560019489"></figure><p>After you click on that, find the SEO tab and drag it up until it's under the Category tab.</p><figure><img src="https://www.scotsscripts.com/blogimages/2019-miva-merchant-how-to-change-tab-order-for-seo_1560019613.png" data-image="1560019613"></figure><p>When you're done, the SEO tab will be right where you need it. Do this in the product edit screen and the page edit screen because&nbsp;SEO is a habit and everything you do in your store should have some SEO value, and this makes it much easier to remind yourself of that.</p><figure><img src="https://www.scotsscripts.com/blogimages/2019-miva-merchant-seo-important-tips_1560019757.png" data-image="1560019757"></figure><p>After you have moved the SEO tab to an easy to access location, click on it to bring up the Category meta data.</p><figure><img src="https://www.scotsscripts.com/blogimages/2019-miva-merchant-category-seo-tips-scots-miva-scripts_1560019829.png" data-image="1560019829"></figure><p>First, fill in the description. This will be used as the meta description. Normally it will never be shown on the page, so stuff it full of keywords and phrases.</p><p>Don't worry so much about the keywords since the majority of serious search engines don't use them (content is key, not key words.)</p><p>For example, this example category is "bedroom". A good SEO description does not include a lot of adjectives. Search engines don't care if you are writing a poem. This might look good to a human, but for SEO it's useless:</p><p><em>"Visit our beautiful bedroom collection where you'll find the most modern designs to help you create the bedroom of your dreams. Don't wait, supplies are limited."</em></p><p>This is a fairly basic description, but better used somewhere in the product description, not in category SEO. For category SEO the description should use more key terms and phrases.&nbsp;</p><p><em>"Fashionable bedroom furniture, end tables, beds, mattresses, mirrors, vanities, and closet organizers and lighting to help you create a comfortable and modern bedroom."</em></p><p><strong>How do you find key terms and phrases?</strong></p><p>If you're just getting started with SEO you'll be happy to know there is a <strong>VERY </strong>easy way to create the best descriptions you can: Steal from competitors.&nbsp;</p><p>Search for your product online and go to the first non-sponsored site that comes up&nbsp;and check the meta data on the page and use it. Edit it so it's not word for word, but use it as a base for your own.&nbsp;</p><p><strong>How do I see meta data?</strong></p><p>You can use the inspector (right click on the page and find the "inspector"&nbsp;option) but that's mainly a developer tool. To make is super easy, I use a Chrome plugin called SEO Meta:&nbsp;<br><br><a href="https://chrome.google.com/webstore/detail/seo-meta-in-1-click/bjogjfinolnhfhkbipphpdlldadpnmhc/">https://chrome.google.com/webstore/detail/seo-meta-in-1-click/bjogjfinolnhfhkbipphpdlldadpnmhc/</a><br><br>This plugin puts a button in my browser that opens up a box with all the meta information you could want. Here's an example from the home page on this site. If you scroll down you see all the other meta, plus other information.</p><figure><img src="https://www.scotsscripts.com/blogimages/2019-miva-merchant-seo-chrome-plugin-seo-meta_1560020878.png" data-image="1560020878"></figure><h3><br></h3><h2 class="text-center"><i class="fa fa-caret-right text-success"></i>&nbsp;Miva Merchant SEO Extra Tip&nbsp;<i class="fa fa-caret-left text-success"></i></h2><p>Another issue with Miva Merchant out of the box is the page titles. They are called things like "Storefront"&nbsp;and "About Us".&nbsp;Who will ever visit a page called "Storefront" or a page called "About Us"?</p><p>Open the SEO tab in all your storefront (SFNT) page and you'll see that the page title is blank.</p><figure><img src="https://www.scotsscripts.com/blogimages/2019-miva-merchant-page-title-seo_1560021009.png" data-image="1560021009"></figure><p>Is the front page of your site being called "Storefront"&nbsp;good SEO? Not exactly.</p><p>So for example, if your store is called, "Best Tires", change the SEO page title to something like, "Best Tires Storefront". In this case, I'll change it to, "Scot's Scripts Development Store"</p><p>I will also change the regular page title to match the SEO title. Now when I open the page it looks like:</p><figure><img src="https://www.scotsscripts.com/blogimages/2019-seo-for-miva-merchant-page-titles_1560021182.png" data-image="1560021182"></figure><p>When you visit the page, the browser tab will now say, "Scot's Scripts Development Store" instead of "Storefront"</p><figure><img src="https://www.scotsscripts.com/blogimages/2019-page-title-seo-for-miva-merchant_1560021261.png" data-image="1560021261"></figure><p>Go through all the important pages on your site. You can skip the Product (PROD) and Category (CTGY) pages because their SEO will be derived form the product or category that the customer is visiting.</p><h3><strong>Schema Microdata SEO</strong></h3><p>This is important too. It's not something I can explain in a post, but we offer a services that creates dynamic <a href="https://www.schema.org" target="_blank">schema microdata</a> for every page on your site. It usually takes about an hour to install, including any customizations necessary for how your site is put together. Contact us for more information or if you have any questions about anything you've seen here.</p><p>Good luck, and remember, <strong>SEO is a habit</strong>. Work on&nbsp;it every day to increase sales and search engine visibility.</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Powerful Utlility to Rename Multiple Files in Windows]]></title>
<link>http://www.scotsscripts.com/blog/rename-multiple-files-in-windows.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com
					<p><strong>How do I handle complex bulk file renaming tasks in windows?</strong></p><p>The most useful utility I've ever used for bulk file renaming is Bulk Rename Utility. You&nbsp;might not even know you need this tool until after you use it.<br><br><a href=" />When I have dozens of files that need the first few characters removed or a pattern changed I save tons of time using Bulk Rename Utility.]]></description>
<pubDate>Tue, 21 May 2019 10:31:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/rename-multiple-files-in-windows.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p><strong>How do I handle complex bulk file renaming tasks in windows?</strong></p><p>The most useful utility I've ever used for bulk file renaming is Bulk Rename Utility. You&nbsp;might not even know you need this tool until after you use it.<br><br><a href="https://www.bulkrenameutility.co.uk/Main_Intro.php">https://www.bulkrenameutility.co.uk/Main_Intro.php</a><br><br>The utility is donation-ware, so if you use it a few times send them $10 to show your appreciation for the developers hard work.</p><p>In addition to a large array of built in filename manipulation tools such as "ignore the first # characters in the selected files", this Bulk Rename Utility can also use regular expressions to make renaming rules for a group of files.</p><p><strong>Features:</strong> Instead of me listing what this utility can do, check out the features page:<br><br><a href="https://www.bulkrenameutility.co.uk/Features.php">https://www.bulkrenameutility.co.uk/Features.php</a></p><p>Actually I do need to mention&nbsp;one of the <strong>best features</strong>&nbsp;which is&nbsp;new filenames are shown in a preview column ("New Name" column in the image below) and this by itself makes this utility worth using.</p><p>A picture is worth a thousand words:</p><p></p><figure><img src="https://www.scotsscripts.com/blogimages/bulk_rename_utility_main_screen_1558459318.png" data-image="1558459318"></figure><p></p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Miva Merchant API: How to Test if a Product is in a Category]]></title>
<link>http://www.scotsscripts.com/blog/miva-merchant-api-how-to-test-if-a-product-is-in-a-category.html</link>
<description>Have you ever wanted to find out if a product is in a particular category? Here's how you can do that using the ever so nifty Miva Merchant API.</description> 
<pubDate>Fri, 3 May 2019 16:46:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/miva-merchant-api-how-to-test-if-a-product-is-in-a-category.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>The <a href="https://docs.miva.com/api-functions" target="_blank">Miva Merchant API</a> has a set of functions that start with CategoryXProduct that deal with handling what categories products are assigned to.</p><p>If you want to quickly find out if a product is assigned to a category, use the</p><pre class="prettyprint linenums:1">&lt;mvt:do file="g.Module_Library_DB" name="l.success" value="CategoryXProduct_Load(cat_id, product_id, categoryxproduct var)" /&gt;</pre><p>function.</p><p>The cat_id is the category id, product_id is the product id, and categoryxproduct is the structure the data will be loaded into if the product exists in the category.</p><p>For example, if you've loaded some product data into <code>l.settings:product</code> and some category data into <code>l.settings:category</code>, you could check to see if the product is in the category this way:</p><pre class="prettyprint linenums:1">&lt;mvt:do file="g.Module_Library_DB" name="l.success" value="CategoryXProduct_Load(l.settings:category:id, l.settings:product:id, l.settings:_catproduct)" /&gt;</pre><p>Once you call this, you can check <code>l.settings:_catproduct</code> to see if the product was found in the category.</p><pre class="prettyprint linenums:1">&lt;mvt:if expr="l.settings:_catproduct:cat_id"&gt;    do something here because the product was found in the category&lt;mvt:else&gt;    do something here because the product was not found in the category&lt;/mvt:if&gt;</pre><p>If the product is found in the category, the <code>l.settings:_catproduct</code> structure will contain:</p><pre class="prettyprint linenums:1">l._catproduct:cat_idl._catproduct:product_idl._catproduct:disp_order</pre><p><strong>What if you don't know the product or category id?</strong></p><p>If you know the product code and the category code then use these category and product lookup via code functions. Put them above the <em>CategoryXProduct_Load(...)</em> function so the product and category data is available.</p><pre class="prettyprint linenums:1">&lt;mvt:assign name="l.product_code" value="'my_product_code'" /&gt;&lt;mvt:do file="g.Module_Library_DB" name="l.success" value="Product_Load_Code(l.product_code, l.settings:product)" /&gt;<br>&lt;mvt:assign name="l.category_code" value="'my_category_code'" /&gt;&lt;mvt:do file="g.Module_Library_DB" name="l.success" value="Category_Load_Code(l.category_code, l.settings:category)" /&gt;</pre><p>If you used a product code that exists in your store the product data will be in l.settings:product and the product id would be l.settings:product:id</p><p>Same thing goes for the category lookup.</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Get Around HSTS Chrome Security Errors]]></title>
<link>http://www.scotsscripts.com/blog/How-to-Get-Around-HSTS-Chrome-Page-Errors.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com
					<p>You searched the web, finally found an answer, and now Chrome won't let you into the site because the page is not secure and there is some kind of HSTS error.</p><p>You might see messages like " />It's super frustrating to visit a page and then because of heavy handed Chrome browser https rules you can't get in. Here's a quick fix for HSTS lock outs.]]></description>
<pubDate>Thu, 11 Apr 2019 18:42:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/How-to-Get-Around-HSTS-Chrome-Page-Errors.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>You searched the web, finally found an answer, and now Chrome won't let you into the site because the page is not secure and there is some kind of HSTS error.</p><p>You might see messages like "Your connection is not private" or "You cannot visit..." when trying to access the page.<br></p><p>Basically Chrome has turned into <em>net-mommy</em> and wants to tell you what is good for you and what is not. Hey, if I want to play with broken glass and rusty nails, I'm going to play with broken glass and rusty nails.</p><p><strong>Here's how you fix it.</strong></p><p><strong>Step 1:</strong> Open the chrome HSTS settings page</p><pre class="prettyprint linenums:1">chrome://net-internals/#hsts</pre><p><strong>Step 2:</strong> Delete domain security policy</p><p>At the bottom of the hsts settings page you will find an entry for&nbsp;Delete domain security policies. Enter the domain of the page you are trying to view and then click the delete key.</p><p>That's it. Reload the page and go into the advanced warning options to set a security exception (checkbox) which should then let you view the page.</p><figure><img src="https://www.scotsscripts.com/blogimages/chrome_hsts_error_fix_scots_miva_scripts_1555033076.png" data-image="1555033076"></figure><p></p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[Miva Con 2019]]></title>
<link>http://www.scotsscripts.com/blog/Miva-Con-2019.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com/blogimages/scot_ranney_miva_con_2019_scotsscripts_dot_com_1554324762.jpg" />Miva Corporation puts on a very cool convention once a year and this year I thought I'd post a few notes about what they are talking about and what I've seen.]]></description>
<pubDate>Wed, 3 Apr 2019 13:54:00 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/Miva-Con-2019.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>These are just some notes I took at the Miva Con. Not everything is fleshed out. Contact me if you want more details on what happened and what's coming up for Miva Merchant.</p><p>Miva Con 2019 was hosted at a beautiful resort called San Bernardino Inn,&nbsp;not far from Miva headquarters. You may think all we did was party and hang out in hot tubs, but that's only mostly&nbsp;true.&nbsp;</p><p>The format of the con changed slightly so there were fewer choices as far as breakout sessions went (and alas, I was not invited to give my SEO presentation, however I had lengthy semi-private session on my own with about a dozen interested store owners) which actually made it easier for people to figure out what they wanted to see.</p><p>The big deal of course is Version 10 which is going to be a wonderful thing. If you're thinking about converting your store to a new framework, <strong>wait for version 10</strong>. Just wait for it. Once V10 rolls out we will be able to stage pages and entire frameworks from within <em>without </em>a dev store. So. Just. Wait.</p><figure><img src="https://www.scotsscripts.com/blogimages/scot_ranney_miva_con_2019_scotsscripts_dot_com_1554324762.jpg" data-image="1554324762"></figure><h2>Hot Topics<br></h2><p><a target="_blank" href="https://www.shopbandit.com/">ShopBandit (demo is on their home page)</a>&nbsp;is an amazing search solution for Miva Merchant. The guys have been around Miva Merchant forever, I know them personally, and they will install it, customize it, and you can test it out on your site before it goes live. Bottom line is if facets don't work for you, you need to check this out.</p><h3>Day 1</h3><p>There are some interesting and exciting things in store for Miva Merchant. A new&nbsp;<strong>fraud prevention</strong>&nbsp;module (the module is free, the service might not be) has been released called&nbsp;<a target="_blank" href="https://apps.miva.com/signifyd-guaranteed-fraud-protection.html">Signifyd</a>.</p><p><strong>StoneEdge order manager</strong>&nbsp;is undergoing a major update so if you're frustrated with how ancient and useless StoneEdge is right now, it should be modernized in the near future.</p><p>You will be able to use&nbsp;<strong>workflow queues</strong>&nbsp;to hold orders before processing. For example, if you have customers calling in during the first 15 minutes of an order because they want to change something, you could automatically hold all new orders for 15 minutes before processing.</p><p>A&nbsp;<strong>new readytheme</strong>&nbsp;is almost ready: Colossus. This theme has a new mega menu and appears to be based on a lot of graphic tiles to help people find what they want to buy.</p><p>The old and very expensive&nbsp;<strong>Quotes module</strong>&nbsp;has been updated to&nbsp;<a target="_blank" href="https://apps.miva.com/manage-quotes.html">Quote 2</a>&nbsp;and is&nbsp;free. It integrates nicely with miva merchant (because it's made by Miva devs).</p><p>They are going to add&nbsp;<strong>Customer Loyalty</strong>&nbsp;points that can be used for purchases and other things.</p><p><strong>Staging!</strong>&nbsp;This is in 10.0 which should be out before the end of the year. We will be able to stage new pages and entire sites right within the miva merchant admin, and this includes version control so multiple developers can be working on a page or theme without messing each other up. Very very cool. This is a game changer.</p><h3>Day 2</h3><p><strong>Order Workflows</strong>&nbsp;are a dream come true for admins who need to do js integrations to push data to metric, analytics, management and other outside sources. For the most part, integration modules are unnecessary at this point. Workflow conditions are being added all the time, such as "send an email", and if we need one all we do is ask Miva because they are looking for ideas for more trigger conditions.</p><p>The&nbsp;<strong>JSON Api</strong>&nbsp;is another dream come true when it comes to pushing and pulling data. With the json api and workflow trigger/condition/action situation 95% of all integration modules are obsolete with the work being done within the admin.</p><p><strong>Wait until true</strong>&nbsp;checks the workflow condition on a time interval/delayed situation. You can set it for 1 minute, five minutes, whatever you like up to 60 minutes. This is useful for workflow conditions that might take a few minutes such as receiving confirmation data from shipping or supplier data. It's probably useful to have "wait enabled" for all workflows, just set it to five minutes to make sure everything has finished grinding away before sending the data.</p><p><strong>Json API Payment API's</strong></p><p><strong></strong>This looks pretty interesting and gives us another way to integrate with more payment solutions.<br></p><p>All of this is just whiteboard material right now and there will probably be changes before anything is rolled out.<br></p><h3 class="text-danger"><strong>Version 10 Upgrade Tip<strong><br></strong></strong></h3><p><strong>Do Not Upgrade</strong> for at least a month after the new version rolls out sometime around 2020. Seriously. Version 10 is a huge mega update on all levels and being on the bleeding edge is a great way to crash your store. Miva has said everything will be smooth, but I wouldn't bet my business on it! Be patient, wait for a few weeks, and then update.</p>
				]]></content:encoded>
</item>
<item>
<title><![CDATA[How to Use Lintalist with Miva Merchant]]></title>
<link>http://www.scotsscripts.com/blog/How-to-Use-Lintalist-with-Miva-Merchant.html</link>
<description><![CDATA[ <img src="https://www.scotsscripts.com/blogimages/lintalist_miva_merchant_how_to_1551126014.png" />The Miva Merchant template language is super powerful and lets you do complex coding within page templates. Using Lintalist will speed this process up dramatically.]]></description>
<pubDate>Mon, 25 Feb 2019 12:26:04 GMT</pubDate>
<guid isPermaLink="true">http://www.scotsscripts.com/blog/How-to-Use-Lintalist-with-Miva-Merchant.html</guid>
<source url="https://www.scotsscripts.com/blog/feed">Scot's Miva Scripts News and Updates</source>
<content:encoded><![CDATA[					
					<p>I just stumbled across a system where a hot key brings up code snippets that can be used while editing miva store page templates.&nbsp;<br><br>For example, if I want an mvt:if statement, all I do is click the hotkey (caps-lock in my case), type mvt:if, hit return, enter the expression, and presto, the code is inserted at cursor position. I've been using it for two days and it's already saved loads of time.</p><p>info:&nbsp;<a href="https://github.com/lintalist/lintalist" target="_blank" rel="nofollow">https://github.com/lintalist/lintalist</a><br><br>direct download link:&nbsp;<a href="https://github.com/lintalist/lintalist/releases/download/v1.9.8/lintalist.zip">https://github.com/lintalist/lintalist/releases/download/v1.9.8/lintalist.zip</a><br><br>I made a "bundle" file for the Miva Template Language here:<br><br><a href="https://www.scotsscripts.com/updates/lintalist/MivaMerchant.txt">https://www.scotsscripts.com/updates/lintalist/MivaMerchant.txt</a><br><br><strong>Quick Start</strong><strong><br></strong><strong><br>1.</strong> Unzip the lintalist.zip file into wherever you put your small utilities files. There is no installation, just unzip to wherever you want to run it from.</p><p><strong>2.</strong> Copy the <code>MivaMerchant.txt</code> file into the <code>lintalist/bundles</code> directory.</p><p><strong>3.</strong> Make sure lintalist is running then start editing a store page and click the caps-lock key. Click on the <code>bundle</code> menu item and make sure Miva Merchant is selected.</p><figure><strong><img src="https://www.scotsscripts.com/blogimages/miva_merchant_lintalist_how_to_use_1_scots_mivascripts_1551125757.png" data-image="1551125757"></strong></figure><p><strong>4.</strong> Type mvt:assign in the lintalist search bar and then hit enter, then fill out the name and value just like you would normally:</p><p></p><figure><strong><img src="https://www.scotsscripts.com/blogimages/lintalist_miva_merchant_how_to_1551126014.png" data-image="1551126014"></strong></figure><figure><strong><img src="https://www.scotsscripts.com/blogimages/miva_merchant_lintalist_mvassign_scots_scripts_mivascripting_1551126022.png" data-image="1551126022"></strong></figure><figure><strong><img src="https://www.scotsscripts.com/blogimages/miva_script_lintalist_miva_merchant_seo_mvt_template_language_assign_year2_1551126029.png" data-image="1551126029"></strong></figure><p><strong>5.</strong> Once you hit OK on the value box, the mvt:assign code&nbsp;should be where your cursor was on the page.&nbsp;</p><p>This is a super time saver. No more minor syntax errors or tired finger errors, all the hard work is done.</p>
				]]></content:encoded>
</item>
</channel>
</rss>