<?xml version="1.0" encoding="utf-8"?>
<rss xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" version="2.0">

	<channel>
		<title><![CDATA[Interspire Developer Network - Blogs]]></title>
		<link>http://idn.interspire.com</link>
		<description />
		<language>en-us</language>
		<copyright><![CDATA[http://idn.interspire.com]]></copyright>
		<generator>N/A</generator>
		<webMaster>mitchell.harper@interspire.com</webMaster>
		<lastBuildDate>Tue, 06 Jan 2009 21:57:31 CST</lastBuildDate>
		<ttl>20</ttl>
		<itunes:author>false</itunes:author>
		<itunes:summary>false</itunes:summary>
		<itunes:keywords>false</itunes:keywords>
		<itunes:explicit>clean</itunes:explicit>
		<item>
			<title><![CDATA[Modifying Shopping Cart: &quot;Sort by Letter&quot; in Categories]]></title>
			<link>http://idn.interspire.com/blogs/31/Modifying-Shopping-Cart-Sort-by-Letter-in-Categories.html</link>
			<description><![CDATA[<p>In the Interspire Shopping Cart Control Panel, we allow you to break down products and customers by those beginning with a specific letter (A-Z). Today we'll be looking at implementing a modification that allows you to bring this functionality to the front end of your store when viewing a list of products in a particular category. Essentially you'll be able to click a letter in a predefined list and view a listing of all products beginning with that specific letter.</p>
<p>The end result of our modification will be similar to the following:</p>
<p><img src="http://idn.interspire.com/content/shoppingcart/images/category_letters.png" alt="" /></p>
<p>We'll be diving right in to the Interspire Shopping Cart code to make these modifications, so there's an assumption that you have a small about of technical knowledge of PHP/HTML, but even if you don't have the experience, you should be able to progress.</p>
<p><strong>The first thing to do is make sure you have a backup copy of the files we'll be editing in case anything goes wrong.</strong></p>
<h4>Open: includes/classes/class.category.php</h4>
<p><strong>Find:</strong></p>
<pre name="code" class="php">
$query = "
	SELECT p.*, floor(prodratingtotal/prodnumratings) AS prodavgrating, imageisthumb, imagefile, ".GetProdCustomerGroupPriceSQL()."
	FROM idn_products p
	INNER JOIN idn_categoryassociations ca ON (p.productid = ca.productid)
	LEFT JOIN idn_product_images pi ON (p.productid=pi.imageprodid)
	WHERE ca.categoryid='".(int)$this-&gt;GetId()."' AND p.prodvisible='1' AND (imageisthumb=1 OR ISNULL(imageisthumb))
	ORDER BY ".$this-&gt;GetSortField().", p.prodname ASC
";
</pre>

<p><strong>Replace it with:</strong></p>
<pre name="code" class="php">
$query = "
	SELECT p.*, floor(prodratingtotal/prodnumratings) AS prodavgrating, imageisthumb, imagefile, ".GetProdCustomerGroupPriceSQL()."
	FROM idn_products p
	INNER JOIN idn_categoryassociations ca ON (p.productid = ca.productid)
	LEFT JOIN idn_product_images pi ON (p.productid=pi.imageprodid)
	WHERE ca.categoryid='".(int)$this-&gt;GetId()."' AND p.prodvisible='1' AND (imageisthumb=1 OR ISNULL(imageisthumb))
";

if(isset($_REQUEST['letter']) &amp;&amp; $_REQUEST['letter'] != '') {
	$letter = chr(ord($_REQUEST['letter']));
	if($_REQUEST['letter'] == '0-9') {
		$query .= " AND p.prodname NOT REGEXP('^[a-zA-Z]')";
	}
	else if(isc_strlen($letter) == 1) {
		$query .= " AND p.prodname LIKE '".$GLOBALS['ISC_CLASS_DB']-&gt;Quote($letter)."%'";
	}
}

$query .= "ORDER BY ".$this-&gt;GetSortField().", p.prodname ASC";
</pre>

<p><strong>Find:</strong></p>
<pre name="code" class="php">
$query = "
	SELECT COUNT(p.productid) AS numproducts
	FROM idn_products p
	INNER JOIN idn_categoryassociations ca ON (p.productid = ca.productid)
	WHERE ca.categoryid='".(int)$this-&gt;GetId()."' and p.prodvisible='1'
";
</pre>

<p><strong>Replace it with:</strong></p>
<pre name="code" class="php">
$query = "
	SELECT COUNT(p.productid) AS numproducts
	FROM idn_products p
	INNER JOIN idn_categoryassociations ca ON (p.productid = ca.productid)
	WHERE ca.categoryid='".(int)$this-&gt;GetId()."' and p.prodvisible='1'
";

if(isset($_REQUEST['letter']) &amp;&amp; $_REQUEST['letter'] != '') {
	$letter = chr(ord($_REQUEST['letter']));
	if($_REQUEST['letter'] == '0-9') {
		$query .= " AND p.prodname NOT REGEXP('^[a-zA-Z]') ";
	}
	else if(isc_strlen($letter) == 1) {
		$query .= " AND p.prodname LIKE '".$GLOBALS['ISC_CLASS_DB']-&gt;Quote($letter)."%' ";
	}
}
</pre>

<p>Now we need to modify a few of the panels that handle the next/previous and sorting options to ensure that the selected letter is also included. We'll also add some code to build our letter list and highlight the active item (fun times).</p>

<h4>Open: includes/display/CategoryContent.php</h4>
<p><strong>Find:</strong></p>
<pre name="code" class="php">
// Should we hide the comparison button?
if(GetConfig('EnableProductComparisons') == 0 || $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetNumProducts() &lt; 2) {
	$GLOBALS['HideCompareItems'] = "none";
}
</pre>

<p><strong>Under it add:</strong></p>
<pre name="code" class="php">
if($GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetNumProducts() == 0 &amp;&amp; !isset($_REQUEST['letter'])) {
	$GLOBALS['HideLetterList'] = 'display: none';
}
else {
	$letters = '0-9,A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R,S,T,U,V,W,X,Y,Z';
	$letters = explode(',', $letters);
	$GLOBALS['LetterList'] = '';
	if(!isset($_REQUEST['letter'])) {
		$GLOBALS['AllActive'] = 'ActiveLetter';
	}
	$GLOBALS['AllLettersLink'] = CatLink($GLOBALS['CatId'], $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetName(), false);
	foreach($letters as $letter) {
		$active = '';
		if(isset($_REQUEST['letter']) &amp;&amp; $_REQUEST['letter'] == $letter) {
			$active = 'ActiveLetter';
		}
		$link = CatLink($GLOBALS['CatId'], $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetName(), false, array(
			'letter' =&gt; $letter
		));
		$GLOBALS['LetterList'] .= '&lt;li class="'.$active.'"&gt;&lt;a href="'.$link.'"&gt;'.isc_html_escape($letter).'&lt;/a&gt;&lt;/li&gt;';
	}
}
</pre>

<p><strong>Find:</strong></p>
<pre name="code" class="php">
$start = max($GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetPage()-$num_pages_either_side_of_current,1);
$end = min($GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetPage()+$num_pages_either_side_of_current, $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetNumPages());
</pre>

<p><strong>Under it add:</strong></p>
<pre name="code" class="php">
$linkOptions = array(
	'sort' =&gt; $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetSort()
);
if(isset($_REQUEST['letter']) &amp;&amp; (isc_strlen($_REQUEST['letter']) == 1 || $_REQUEST['letter'] == '0-9')) {
	$linkOptions['letter'] = $_REQUEST['letter'];
}
</pre>

<h4>Open: includes/display/CategoryContent.php</h4>
<p><strong>Find:</strong></p>
<pre name="code" class="php">$GLOBALS['PageLink'] = CatLink($GLOBALS['CatId'], $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetName(), false, array("page" =&gt; $page, "sort" =&gt; $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetSort()));</pre>

<p><strong>Replace with:</strong></p>
<pre name="code" class="php">$GLOBALS['PageLink'] = CatLink($GLOBALS['CatId'], $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetName(), false, array_merge($linkOption, array('page' =&gt; $page)));</pre>

<p><strong>Find:</strong></p>
<pre name="code" class="php">$GLOBALS['PrevLink'] = CatLink($GLOBALS['CatId'], $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetName(), false, array("page" =&gt; $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetPage()-1, "sort" =&gt; $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetSort()));</pre>
<p><strong>Replace with:</strong></p>
<pre name="code" class="php">$GLOBALS['PrevLink'] = CatLink($GLOBALS['CatId'], $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetName(), false, array_merge($linkOption, array('page' =&gt; $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetPage()-1)));</pre>

<p><strong>Find:</strong></p>
<pre name="code" class="php">$GLOBALS['NextLink'] = CatLink($GLOBALS['CatId'], $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetName(), false, array("page" =&gt; $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetPage()+1, "sort" =&gt; $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetSort()));</pre>
<p><strong>Replace with:</strong></p>
<pre name="code" class="php">$GLOBALS['NextLink'] = CatLink($GLOBALS['CatId'], $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetName(), false, array_merge($linkOption, array('page' =&gt; $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetPage()+1)));</pre>

<h4>Open: includes/display/CategoryHeading.php</h4>
<pre name="code" class="php">if($GLOBALS['EnableSEOUrls'] == 1) {
	$GLOBALS['URL'] = CatLink($GLOBALS['CatId'], $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetName(), false);
}
else {
	$GLOBALS['URL'] = $GLOBALS['ShopPath']."/categories.php";
	$GLOBALS['HiddenSortField'] = "&lt;input type=\"hidden\" name=\"category\" value=\"".$catPath."\" /&gt;";
}&lt;/pre>

Replace it with:
&lt;pre name="code" class="php">if($GLOBALS['EnableSEOUrls'] == 1) {
	$linkOptions = array();
	if(isset($_REQUEST['letter']) &amp;&amp; (isc_strlen($_REQUEST['letter']) == 1 || $_REQUEST['letter'] == '0-9')) {
		$linkOptions['letter'] = $_REQUEST['letter'];	
	}
	$GLOBALS['URL'] = CatLink($GLOBALS['CatId'], $GLOBALS['ISC_CLASS_CATEGORY']-&gt;GetName(), false);
}
else {
	$GLOBALS['URL'] = $GLOBALS['ShopPath']."/categories.php";
	$GLOBALS['HiddenSortField'] = "&lt;input type=\"hidden\" name=\"category\" value=\"".$catPath."\" /&gt;";
	if(isset($_REQUEST['letter']) &amp;&amp; (isc_strlen($_REQUEST['letter']) == 1 || $_REQUEST['letter'] == '0-9')) {
		$GLOBALS['HiddenSortField'] .= "&lt;input type=\"hidden\" name=\"letter\" value=\"".isc_html_escape($_REQUEST['letter'])."\" /&gt;";
	}
}</pre>

<p>That's the end of the modifications we need to make to the PHP to get this all happening. Next up, we'll be implementing the modification in to your store design.</p>

<h4>Open: templates/[name of the template you're using]/Panels/CategoryContent.html</h4>
<p><strong>Insert the HTML below where you'd like the list to appear:</strong></p>
<pre name="code" class="html">&lt;ul class="LetterSort" style="&#37;%GLOBAL_HideLetterList%%"&gt;
	&lt;li class="&#37;%GLOBAL_AllActive%%"&gt;&lt;a href="&#37;%GLOBAL_AllLettersLink%%"&gt;All&lt;/a&gt;&lt;/li&gt;
	&#37;%GLOBAL_LetterList%%
&lt;/ul&gt;</pre>

<h4>Open: templates/[name of the template you're using]/Styles/styles.css:</h4>
<p>Add the following to the bottom of the stylesheet. (Adjust the layout, colours etc so it appears how you'd like it to)</p>
<pre name="code" class="html">.LetterSort, .LetterSort li {
	list-style: none;
	margin: 0;
	padding: 0;
}

.LetterSort {
	border: 1px solid #b9cfda;
	background: #dcf0f5;
	padding: 4px;
	text-align: center;
}

.LetterSort li {
	display: inline;
}

.LetterSort a {
	padding: 0 3px;
}

.LetterSort li.ActiveLetter a {
	font-weight: bold;
	text-decoration: none;
}</pre>

<p>If you save all of the changes we've made, and upload the new files to your store you should have a listing of the letters A through Z and the 'All' and '0-9' links on the category views. Clicking these letters will show you products beginning with the selected letter.</p>
<p>If there are any questions, or you can't get this to work correctly on your store simply leave a comment.</p>]]></description>
			<author>no@spam.com (Chris Boulton)</author>
			<pubDate><![CDATA[Mon, 06 Oct 2008 00:00:00 CDT]]></pubDate>
			<guid isPermaLink="true">http://idn.interspire.com/blogs/31/Modifying-Shopping-Cart-Sort-by-Letter-in-Categories.html</guid>
		</item>
		<item>
			<title><![CDATA[Creating segment from the API]]></title>
			<link>http://idn.interspire.com/blogs/30/Creating-segment-from-the-API.html</link>
			<description><![CDATA[<p>Over the coming days I will be explaining on how to manipulate segments using the API.</p>
<p>Today, I will explain to you on how to create segment using the API. When using the API to create segments, you will be able to create a more powerful filtering than using the standard UI in IEM.</p>
<pre name="code" class="php">
require_once (SENDSTUDIO_API_DIRECTORY . '/segment.php');

$segment = new Segment_API();

// Owner ID of the new segment
$segment->ownerid = 1;

// Current time
$segment->createdate = AdjustTime();

// Segment name
$segment->segmentname = 'Test Segment';

// Segment search information
$segment->searchinfo = array(
  // The list of which the segment will apply it's rule
  // This is an array of list Ids
  'Lists'  => array(49),

  // Segment rules
  'Rules'  => array(
    array(
      'type'      => 'group',
      'connector' => 'and', // Connector for the next group
      'rules'     => array(

        // --- These are the rules that will be applied to the list
        array(
          'type'      => 'rule',
          'connector' => 'or', // Connector for the next rule
          'rules'     => array(
            'ruleName'     => 'email',
            'ruleOperator' => 'like',
            'ruleValues'   => array('someemail@somecompany.com')
          )
        ),
        array(
          'type'      => 'rule',
          'connector' => 'and', // Connector for the next rule
          'rules'     => array(
            'ruleName'     => 20, // Custom field ID
            'ruleOperator' => 'like',
            'ruleValues'   => array('somename')
          )
        )
        // ---

      )
    )
  )
);

$status = $segment->Create();
if (!$status) {
  print "Cannot create segment";
} else {
  print "Segment created with the following id: {$segment->segmentid}";
}
</pre>

Analysis of the code:<br/>
(1) Include segment API<br/>
(3) Instantiate new Segment API<br/>
(5) Set up owner ID<br/>
(8) Specify current time (use AdjustTime() function to do this)<br/>
(11) Segment name<br/>
(14) Specify the segment search info<br/>
(17) Specify the list Ids 00 – These are arrays<br/>
(20) Specify the rules

<p>The following rules apply:</p>
<ul>
<li>Rule Type can either be: “group” or “rule”</li>
<li>Rule Connector can either be: “and” or “or”</li>
<li>
  “ruleName”: is the fields that the rule will be applied to... This can either be a special fields, or a custom field ID. Currently available special fields are:
  <ul>
    <li>email: Filter by email</li>
    <li>format: Filter by format (“h” or “t”)</li>
    <li>status: Filter by format (“b”, “u”, or “a” translate to “bounced”, “unsubscribed”, “active”)</li>
    <li>confirmation: Filter by conformation status (“1” or “0”)</li>
    <li>confirmation: Filter by conformation status (“1” or “0”)</li>
    <li>subscribe: Filter by subscribe data (mm/dd/yyyy)</li>
    <li>link: Filter by have/have not clicked a particular link (it accept a link id)</li>
    <li>campaign: Filter by have/have not opened a particular campaign (it accept a newsletterid)</li>
    <li>subscriberid: Filter by subscriber id</li>
  </ul>
</li>
<li>
  ”ruleOperator” value will depends on the context of the “ruleName”, so not all of the following rules will be available for each “ruleName”
  <ul>
    <li>equalto</li>
    <li>notequalto</li>
    <li>like</li>
    <li>notlike</li>
    <li>between</li>
    <li>greaterthan</li>
    <li>lessthan</li>
  </ul>
</li>
</ul>

]]></description>
			<author>no@spam.com (Hendri Kurniawan)</author>
			<pubDate><![CDATA[Wed, 24 Sep 2008 00:00:00 CDT]]></pubDate>
			<guid isPermaLink="true">http://idn.interspire.com/blogs/30/Creating-segment-from-the-API.html</guid>
		</item>
		<item>
			<title><![CDATA[What&#039;s using my space]]></title>
			<link>http://idn.interspire.com/blogs/27/Whats-using-my-space.html</link>
			<description><![CDATA[Here's a quick shell command to work out where your disk space is being used.

<pre name="code" class="html">
du -s * | sort -n | tail
</pre>

If you run this in a directory it will print out the top files and directories under the current directory using up space. 

For example, yesterday I started playing with a <a href="http://en.wikipedia.org/wiki/Fuzzing">Fuzzing</a> tool for testing shopping cart. Unfortunately Xdebug was setup to save execution traces and profiling files on the server. The end result after about an hour of fuzzing was a directory with about 67 Gigs worth of files in it.

That command let me track down the cause of the hard drive filling up quickly.]]></description>
			<author>no@spam.com (Rodney Amato)</author>
			<pubDate><![CDATA[Wed, 11 Jun 2008 00:00:00 CDT]]></pubDate>
			<guid isPermaLink="true">http://idn.interspire.com/blogs/27/Whats-using-my-space.html</guid>
		</item>
		<item>
			<title><![CDATA[The CAN SPAM Act and what it means to us.]]></title>
			<link>http://idn.interspire.com/blogs/26/The-CAN-SPAM-Act-and-what-it-means-to-us.html</link>
			<description><![CDATA[<h4>What is spam?</h4>

<p>Spam is the unsolicited sending of electronic mail to anyone. This can be to individual addresses or to an entire email marketing list consisting of millions of contacts. <a href="http://www.legalarchiver.org/cs.htm" target="_BLANK">Research</a> has determined that over 50% of all email transactions taken place in the United States are considered to be spam. This is a very serious issue because not only does it slow down our days clearing out our inbox's of spam (potentially missing and deleting valid emails) it is also placing a lot of overhead on the network system as a whole.</p>

<p>With all the complaints about spam, receiving it, having your own valid emails picked up as it, worrying about the legal ramifications on it, I thought it a good idea to do some research for you and find out exactly what the deal was and what we can do to avoid being marked as a spammer and potentially having our server black listed.</p>

<h4>Step up the CAN SPAM Act 2003</h4>

<p>In an attempt to try to control spamming in some way the Federal Trade Commission of America created the <a href="http://www.ftc.gov/bcp/conline/pubs/buspubs/canspam.shtm" target="_BLANK">CAN SPAM Act</a>. This Act is quite simple in its nature and easy for you to abide by. It does not stop you from sending unsolicited email. It simply tries to regulate it.</p>

<p>What this means is that you can still send emails to people that have not explicitly signed up to your mailing list but you must abide by the laid out rules in order to avoid the penalties.</p>

<h4>What are these rules?</h4>

<p>The rules are simple and very easy to follow:</p>

<ul>
	<li><b>Do not set false or misleading header information.</b>
		<ul>
			<li>That is your 'From' address, domain name etc must be correct. You cannot say you are from www.abc.com when you are in fact from www.xyz.com.</li> 
			<li>This does not mean that you always have to send from the same domain that Interspire Email Marketer is located on, it just means that the domain and person that you are saying you are must be real. So you can still send on your clients behalf from your own installation, just make sure they are real.</li>
		</ul>
	</li>
	<li><b>Do not set false or misleading subject lines</b>
		<ul>
			<li>This is simple. Make sure that your emails subject line and the content of the email are one and the same. Do not try to trick your contacts into opening the email.</li>
			<li>This does not mean that you are not allowed to be creative with your subject lines. They are the first point of contact with your contacts and as such must be catchy and make your contacts want to open the email. But being clever with your subject lines and being deceitful are completly different matters.</li>
		</ul>
	</li>
	<li><b>Give your contacts an opt out method</b>
		<ul>
			<li>Once again, this is a pretty simple step. Make sure that you include in every email that you send out a way to unsubscribe.</li>
			<li>Interspire Email Marketer provides you with 2 different methods to do this. The first is simply including the unsubscribe link (%%unsubscribelink%%) in your email. The second method is to create an unsubscribe form and place this on your website. From there you can link to the form from your email campaigns. Both methods are equally as valid.</li>
		</ul>
	</li>
	<li><b>You must identify yourself and your company clearly and let the contact know that this email is an advertisement.</b>
		<ul>
			<li>Your email campaign needs to clearly inform your contact that you are trying to sell them something (if you are) and provide them with your companies name and a valid physical postal address.</li>
		</ul>
	</li>
</ul>

<h4>What penalties can you expect for these?</h4>

<p><b>"Each violation of the above provisions is subject to fines of up to $11,000. Deceptive commercial email also is subject to laws banning false or misleading advertising."</b></p>

<p>What this means is that for every rule that you break in relation to this Act you could potentially be liable for $11,000. If you are found guilty of not allowing subscribers to unsubscribe as well as falsifying your from address so that your subscribers cannot get in touch with you then you could be liable for up to $22,000 in fines.</p>

<h4>What does all this mean to me?</h4>

<p>This can sound pretty full on but remember, if you do the right thing then you have nothing to worry about. Make sure you always have your details in your emails (Place them in your footer to be included), make sure you are honest with your contacts and you will be fine.</p>

<p>If you have any questions or comments at all about this please don't hesitate to post a comment bellow and I will get back to you.</p>]]></description>
			<author>no@spam.com (Scott Tedmanson)</author>
			<pubDate><![CDATA[Mon, 02 Jun 2008 00:00:00 CDT]]></pubDate>
			<guid isPermaLink="true">http://idn.interspire.com/blogs/26/The-CAN-SPAM-Act-and-what-it-means-to-us.html</guid>
		</item>
		<item>
			<title><![CDATA[20 Payment Methods Strong - More to Come!]]></title>
			<link>http://idn.interspire.com/blogs/22/20-Payment-Methods-Strong---More-to-Come.html</link>
			<description><![CDATA[<img title="" alt="" src="http://idn.interspire.com/content_images/11/paymentProviders.gif" style="border: 1px solid rgb(119, 119, 119);" align="baseline" border="0" height="300" width="590"/><br/>We've just reached 20 built in payment methods in Interspire Shopping Cart and we're still looking to build support for plenty more in to future releases, tackling a few for each release. We've been working hard to ensure that no matter where you're running your store from there's some type of built in payment method that'll work for your location.<br/><br/>The upcoming Interspire Shopping Cart 3.5 release contains several new providers, all of which have been highly demanded by customers:<br/><ul><li>Moneris eSelectPlus DirectPost<br/></li><li>PayPal PayFlow Pro</li><li>iDeal (Rabo Bank)</li><li>Google Checkout (Full level 2 integration)</li></ul>We're looking to tackle another set of popular payment providers (such as PayPal Website Payments Pro + PayPal Express Checkout) in the release following Interspire Shopping Cart 3.5.<br/><br/>If you have any suggestions for additional payment providers that you'd like built in, simply leave a comment below or submit a feture request via the <a  href="http://www.interspire.com/clientarea/">Interspire Client Area</a>.<br/>]]></description>
			<author>no@spam.com (Chris Boulton)</author>
			<pubDate><![CDATA[Sat, 31 May 2008 00:00:00 CDT]]></pubDate>
			<guid isPermaLink="true">http://idn.interspire.com/blogs/22/20-Payment-Methods-Strong---More-to-Come.html</guid>
		</item>
		<item>
			<title><![CDATA[Buttons available in the WYSIWYG Editor]]></title>
			<link>http://idn.interspire.com/blogs/25/Buttons-available-in-the-WYSIWYG-Editor.html</link>
			<description><![CDATA[These are the buttons available in DevEdit (the WYSIWYG Editor) at the current time.
<br/>
<br/>
When creating a new toolbar, the Name of the button should be used. To create a toolbar:
<pre name="code" class="php">
$rows = array (
"Fullscreen,Undo,Redo,Paste,-,OrderedList,UnorderedList,-,JustifyLeft,JustifyCenter,JustifyRight,JustifyFull,-,Custominsert,Help",
"Spellcheck,-,RemoveFormat,-,Indent,Outdent,-,SubScript,SuperScript,CreateLink,CreateEmailLink,Anchor,-,Image,-,Table,Form,Pageproperties",
"Fontname,Fontsize,Formatblock,Fontcolor,Highlight,HR,Insertchars,Showborders",
);
$myDE->AddToolbar("Simple", implode(",|,", $rows));
</pre>
<table>
	<tr>
		<td>
			Image
		</td>
		<td>
			Description
		</td>
		<td>
			Name of the button
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/absolute_positioning_off.gif">
		</td>
		<td>
			Toggle absolute positioning on and off.
		</td>
		<td>
			Toggleposition
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/align_center.gif">
		</td>
		<td>
			Centers the paragraph.
		</td>
		<td>
			JustifyCenter
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/align_left.gif">
		</td>
		<td>
			Aligns the paragraph to the left.
		</td>
		<td>
			JustifyLeft
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/align_right.gif">
		</td>
		<td>
			Aligns the paragraph to the right.
		</td>
		<td>
			JustifyRight
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/anchor.gif">
		</td>
		<td>
			Creates an anchor element.
		</td>
		<td>
			Anchor
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/bold.gif">
		</td>
		<td>
			<b>Bold</b> font format.
		</td>
		<td>
			Bold
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/insert_custom_html.gif">
		</td>
		<td>
			Inserts custom HTML on the cursor position.
		</td>
		<td>
			Custominsert
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/character.gif">
		</td>
		<td>
			Inserts a special character.
		</td>
		<td>
			Insertchars
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/clear_code.gif">
		</td>
		<td>
			Clears the HTML code.
		</td>
		<td>
			Clearcode
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/copy.gif">
		</td>
		<td>
			Copies the selected text to the clipboard.
		</td>
		<td>
			Copy
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/cut.gif">
		</td>
		<td>
			Cuts the selected text to the clipboard.
		</td>
		<td>
			Cut
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/decrease_indent.gif">
		</td>
		<td>
			Decreases the indent of the text.
		</td>
		<td>
			Outdent
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/email.gif">
		</td>
		<td>
			Creates a link to an email address.
		</td>
		<td>
			CreateEmailLink
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/find_and_replace.gif">
		</td>
		<td>
			Finds and/or replaces text in the editor.
		</td>
		<td>
			Findreplace
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/flash_manager.gif">
		</td>
		<td>
			Flash Manager, to handle Flash objects.
		</td>
		<td>
			Flash
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/font_color.gif">
		</td>
		<td>
			Changes the font color.
		</td>
		<td>
			Fontcolor
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/font_name_collapsed.gif">
		</td>
		<td>
			Selects the font face.
		</td>
		<td>
			Fontname
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/font_size_collapsed.gif">
		</td>
		<td>
			Selects the font size.
		</td>
		<td>
			Fontsize
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/format_collapsed.gif">
		</td>
		<td>
			Selects the element format to be used (paragraph, heading, etc).
		</td>
		<td>
			Formatblock
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/forms.gif">
		</td>
		<td>
			Inserts forms and various form elements.
		</td>
		<td>
			Form
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/help.gif">
		</td>
		<td>
			Help for the WYSIWYG editor.
		</td>
		<td>
			Help
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/highlight.gif">
		</td>
		<td>
			Changes the font highlight.
		</td>
		<td>
			Highlight
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/horizontal_line.gif">
		</td>
		<td>
			Inserts an horizontal line.
		</td>
		<td>
			HR
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/image_manager.gif">
		</td>
		<td>
			Image Manager, to insert images.
		</td>
		<td>
			Image
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/increase_indent.gif">
		</td>
		<td>
			Increases the indent of the text.
		</td>
		<td>
			Indent
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/italic.gif">
		</td>
		<td>
			<span style="font-style: italic;">Italics</span> font format.
		</td>
		<td>
			Italic
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/justify.gif">
		</td>
		<td>
			Justifies the paragraph.
		</td>
		<td>
			JustifyFull
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/link.gif">
		</td>
		<td>
			Creates a hiperlink.
		</td>
		<td>
			CreateLink
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/media_manager.gif">
		</td>
		<td>
			Media Manager, to handle movies and sound.
		</td>
		<td>
			Media
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/ordered_list.gif">
		</td>
		<td>
			Ordered list (list with numbers).
		</td>
		<td>
			OrderedList
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/page_properties.gif">
		</td>
		<td>
			Modifies the page properties - title, description and keyword.
		</td>
		<td>
			Pageproperties
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/paragraph.gif">
		</td>
		<td>
			Shows/hides paragraph endings and line breaks.
		</td>
		<td>
			Paragraph
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/paste.gif">
		</td>
		<td>
			Dropdown with paste options.
		</td>
		<td>
			Paste
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/redo.gif">
		</td>
		<td>
			Redoes the latest editing actions.
		</td>
		<td>
			Redo
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/remove_format.gif">
		</td>
		<td>
			Removes the style associated with the element.
		</td>
		<td>
			RemoveFormat
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/show_borders_off.gif">
		</td>
		<td>
			Shows/hides the borders around the tables.
		</td>
		<td>
			Showborders
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/spellcheck.gif">
		</td>
		<td>
			Spell checks the document.
		</td>
		<td>
			Spellcheck
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/strikethrough.gif">
		</td>
		<td>
			Strike through font format.
		</td>
		<td>
			Strikethrough
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/style_collapsed_empty.gif">
		</td>
		<td>
			Selects a style to be attached to an element.
		</td>
		<td>
			Styles
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/subscript.gif">
		</td>
		<td>
			Subscript font format.
		</td>
		<td>
			SubScript
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/superscript.gif">
		</td>
		<td>
			Superscript font format.
		</td>
		<td>
			SuperScript
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/tables.gif">
		</td>
		<td>
			Creates a new table.
		</td>
		<td>
			Table
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/textbox.gif">
		</td>
		<td>
			Inserts a text box.
		</td>
		<td>
			Inserttextbox
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/underline.gif">
		</td>
		<td>
			<span style="text-decoration: underline;">Underline</span> font format.
		</td>
		<td>
			Underline
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/undo.gif">
		</td>
		<td>
			Undoes the latest editing actions.
		</td>
		<td>
			Undo
		</td>
	</tr>
	<tr>
		<td>
			<img src="/devedit_buttons/unordered_list.gif">
		</td>
		<td>
			Unordered list (list with bullets).
		</td>
		<td>
			UnorderedList
		</td>
	</tr>
</table>
]]></description>
			<author>no@spam.com (Fulvio Oliveira)</author>
			<pubDate><![CDATA[Wed, 28 May 2008 00:00:00 CDT]]></pubDate>
			<guid isPermaLink="true">http://idn.interspire.com/blogs/25/Buttons-available-in-the-WYSIWYG-Editor.html</guid>
		</item>
		<item>
			<title><![CDATA[How to check if the WYSIWYG Editor is finished loading]]></title>
			<link>http://idn.interspire.com/blogs/24/How-to-check-if-the-WYSIWYG-Editor-is-finished-loading.html</link>
			<description><![CDATA[When the WYSIWYG Editor is loaded into a page, it builds its menu automatically and gets all functions ready to go. The last thing it does is set up the designMode, which is the area where all WYSIWYG actions take place and the WYSIWYG contents are actually handled by the browser.
<br/>
<br/>
So checking if the editor is already loaded is merely checking if the designMode is ready. And better yet, there's no need to know how to reach through a designMode object as the WYSIWYG editor has functions that access it. If you need some action to take place right after the editor is loaded, this JavaScript snippet can help you. It assumes:
<ul>
<li>the editor is instantiated as wysiwyg</li></li>
<li>the maximum number of tries will be 50 - totalTries&lt;50</li>
<li>the time between tries will be 200ms - window.setTimeout('tryToSetFocus()', 200)</li>
<li>you want to trigger a function called DoSomething() once the editor is available</li>
These options gives this script a maximum of 1000ms (50 tries times 200ms each) of wait for the editor to load - after the 1000ms DoSomething will not be triggered.
<pre class="js">
var totalTries = 0;
function tryToSetFocus() {
	totalTries++;
	try {
		wysiwyg.getHTMLContent();
	} catch (E) {
		if (totalTries&lt;50) {
			tryToWrite = window.setTimeout('tryToSetFocus()', 200);
		}
		return;
	}
	DoSomething();
}
</pre>]]></description>
			<author>no@spam.com (Fulvio Oliveira)</author>
			<pubDate><![CDATA[Wed, 28 May 2008 00:00:00 CDT]]></pubDate>
			<guid isPermaLink="true">http://idn.interspire.com/blogs/24/How-to-check-if-the-WYSIWYG-Editor-is-finished-loading.html</guid>
		</item>
		<item>
			<title><![CDATA[Adding categories support into Website Publisher]]></title>
			<link>http://idn.interspire.com/blogs/19/Adding-categories-support-into-Website-Publisher.html</link>
			<description><![CDATA[<p>Adding the Categories functionality into Interspire Website Publisher was quite easy, this is how I did it.</p>

<p>The first thing I did was to create the class that interfaces between the user and Interspire Website Publisher. This class extends upon the API that already has most of the functionality I need (such as loading specific categories or saving them). This provides me with a quick way of getting things going. So, I call it iwp_admin_categories and save it as /admin/includes/classes/class.categories.php.</p>


<pre name="code" class="php">
class iwp_admin_categories extends iwp_categories {
	private $Instance;
	// etc...
}
</pre>

<p>With this newly created class I can now begin adding functions as needed. For viewing the categories list, I add a function named View and give it no parameters. This is picked up automatically by Interspire Website Publisher, when the action in the URL is view. What I mean specifically, is the URL structure is dynamic, meaning you can add functions and then use those within the URL. Adding a function named View() will allow an action of view to be used.</p>

<pre name="code" class="php">
public function View() {
	echo "Within the View() function.";
}
</pre>

<p>Within my View function now, I need to designate the template file to be displayed, and set any content that needs to be displayed within it (such as the categories list). The template file will handle the loading and displaying of the categories, interfacing back into this categories object.
We've designed the template engine to handle almost any use-case, the categories page is a special instance that we've had to accommodate for specifically. With the use of a foreach loop, and the wonders of recursion, we have a quick and easy way of building the category tree.</p>

<pre name="code" class="php">
{foreach from=%admin_categories.GetCategoryList:'0' key=k item=row id=ViewListLoop}
	// Formatting the output of each category here
		// Recurse into any children
		{recursion=$row.categoryid}
{/foreach}
</pre>

<p>Regarding the template code specifically, we will be releasing in-depth documentation for it with the release of Interspire Website Publisher and also within further posts in the near future.</p>

<p>All in all, this presents us with a category list that works wonders.</p>

<img title="" alt="" src="http://idn.interspire.com/content_images/3/Categories.jpg" align="bottom" border="0" height="318" width="749"/>

<p>Questions? Comments? I'd love to hear them, just post below and I'll be sure to read and respond.</p>]]></description>
			<author>no@spam.com (Allan Shone)</author>
			<pubDate><![CDATA[Tue, 27 May 2008 00:00:00 CDT]]></pubDate>
			<guid isPermaLink="true">http://idn.interspire.com/blogs/19/Adding-categories-support-into-Website-Publisher.html</guid>
		</item>
		<item>
			<title><![CDATA[Submitting subscription forms transparantly to Interspire Email Marketer]]></title>
			<link>http://idn.interspire.com/blogs/18/Submitting-subscription-forms-transparantly-to-Interspire-Email-Marketer.html</link>
			<description><![CDATA[Quite a few users have asked about methods to subscribe a user transparently from their website (ie. When they purchased a product from your website, and have opt-in to subscribe to your mailing list), and don't want to get the "Thank you" page displayed after the subscription process. Or when you want to simplify your subscription process by just asking only to fill their email address, and you pre-fill the form for them (ie. Set the format to HTML, etc).
<br/><br/>
There are two ways to achieve this:
<ol>
<li>Using the API -- Which means: 
<ul>
<li>You need to understand how the API works</li>
<li>When the subscription process change, your code will also be obsolete (and you need to re-write them)</li>
</ul>
</li>
<li>Using a wrapper that act as an intermediate between your subscription HTML form and the Interspire Email Marketer<br/></li>
</ol>
<br/>
On this occasion, I will talk about how to use a wrapper to achieve this. This is because it is fast, and does not require any knowledge of the Interspire Email Marketer inner workings, and in addition, it will shield your code from any changes that are made in the subscription process.<br/><br/>A quick illustration on how this will work is as follow:<br/>

<pre name="code" class="html">+----------------+        +-------------------+       +-----------------------------+
| Your HTML Page |   ==>  | Your PHP page     |  ==>  | Interspire Email Marketter  |
|                |   <==  |                   |  <==  |                             |
+----------------+        +-------------------+       +-----------------------------+</pre><br/>First of all, you need to create a subscription web-form.... Please de-select the option to use CAPTCHA (As we want to keep the subscription form as simple as possible). After the creation is complete, you need to take note of the form ID.<br/><br/>Now the next process is to create your subscription form:<br/><pre>&lt;html&gt;
  &lt;form action="forms_wrapper.php" method="POST"&gt;
    Please enter your email address:
    &lt;input type="text" name="txtEmail" /&gt;
    &lt;input type="button" name="cmdSubscribe" value="Subscribe" /&gt;
  &lt;/form&gt;
&lt;/html&gt;</pre>
And create a PHP wrapper file that will send the request to Interspire Email Marketer:
<pre name="code" class="php">&lt;?php
  $data = array(
    'format' =&gt; 'h',
    'email' =&gt; $_POST['txtEmail']
  );
  $ch = curl_init(CONST_YOUR_IEM_URL . '/form.php?form=' . CONST_YOUR_FORMID);
  curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
  curl_setopt($ch, CURLOPT_POST, 1);
  curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
  
  $response = @curl_exec($ch);
  curl_close($ch);
  // Response will contains Interspire Email Marketer response to your subscription.
  // It will either be success (Thank you page)
  // Or it will contains the error page
?&gt;</pre>A working example can be downloaded <a  href="http://idn.interspire.com/content_images/curl_subscription_example.zip">here</a>


If you have any queries about this I will be glad to answer them. Simply leave me a comment bellow.]]></description>
			<author>no@spam.com (Hendri Kurniawan)</author>
			<pubDate><![CDATA[Tue, 27 May 2008 00:00:00 CDT]]></pubDate>
			<guid isPermaLink="true">http://idn.interspire.com/blogs/18/Submitting-subscription-forms-transparantly-to-Interspire-Email-Marketer.html</guid>
		</item>
		<item>
			<title><![CDATA[Introducing Interspire&#039;s CMS: Website Publisher]]></title>
			<link>http://idn.interspire.com/blogs/11/Introducing-Interspires-CMS-Website-Publisher.html</link>
			<description><![CDATA[<p>With all the front page news about Interspire Shopping Cart and Interspire Email
Marketer (formerly SendStudio) you might be saying "Hey Interspire! You&#8217;ve
forgotten about your coolest application, ArticleLive!". Well, my overly
assumptious friend, you couldn't be more wrong (and try not to use so many
exclamation marks next time). We're working hard on transforming ArticleLive
into a fully fledged Content Management System. We're taking this
transformation in a few steps.</p><p></p><span style="font-weight: bold;">The Transformation</span><br/><p>As current customers will know by their product downloads,
the first step has been to rename ArticleLive to "Interspire Website
Publisher". We believe this more accurately depicts
what the product does, rather than restricting it to just an "article
manager". It also reflects the direction of the program as it will have a
much larger range of practical application. You'll still be able to use it as
an article manager, but you will also be able to use it for many other purposes
such as a standalone blog script, a small business website, a community website
and pretty much anything you can think of. </p>



<p><img title="PHP 5" alt="PHP 5" src="http://idn.interspire.com/content_images/4/php5.jpg" style="border: medium none ;" align="right" border="0" height="84" width="91"/>The second step in the migration to CMS land will be Interspire Website Publisher 5.0
which has a major overhaul of the code in addition to changing how things work
within the application. Interspire Website Publisher 5.0 will require PHP 5.1.2 or above.<span>&nbsp; </span>We're pushing this up as we expect most hosts
to migrate to PHP5 (a lot already have) as <a  href="http://www.php.net/archive/2007.php#2007-07-13-1" target="_blank">PHP4's end of life nears in August</a>. In addition to this is PHP 5&#8217;s
superiority over PHP 4 which allows us to do so much more than we could before.
</p>

<p>If your host does not have PHP 5.1.2 or above, you'll need to
request they install it or find another host who has it. A lot of hosts
currently have the option to use either PHP 5 or PHP 4. You can check what
version your host has by checking your control panel or asking them. The
current version of Interspire Website Publisher (4.5) will work with PHP 5, so if PHP is upgraded
preparation for Interspire Website Publisher 5.0 your website will still function properly in the mean
time.</p>

<p>Over the coming weeks I'll be going into detail about the
new features and functions of Interspire Website Publisher 5.0. Future posts will cover the new template
system, modules and lists/menu generation. In this post I'll give you a peek at
what we are currently calling "Content Types". </p>

<p>Before I jump into any details, please note that the
application is still under *heavy* development, so any (or all) of the features
mentioned or pictured here may change significantly before the final release.</p>

<p><b>Content Types</b></p>

<p>'Content Types' is our current term for a set of rules that
define what a group of content items is made up of. The best way to think of it
is to use the current state of Interspire Website Publisher where there are articles, news items, pages
and blogs. Think of each of those as a &#8220;content type&#8221;, where they each have
different fields and options in addition to being displayed differently. <span>&nbsp;</span>In Interspire Website Publisher 5.0 these content types will be
dynamic, i.e. you&#8217;ll be able to create your own content type or edit an
existing one.</p>

<p>Creating/Editing a content type consists of choosing which
fields the content type will have, then selection options for each field. For
example, you might just want a simple &#8216;pages&#8217; content type which just has a
title, content and meta content. For that you&#8217;d select your fields and toggle
the options for each one. Title won&#8217;t have options, but for content you can
select to toggle whether to use a text area or a WYSIWYG editor. For the meta content
you can choose to automatically generate it or allow the option to enter it
manually.</p>

<p>
<img title="" alt="" src="http://idn.interspire.com/content_images/4/contentTypes1.jpg" align="bottom" border="0"/> <br/></p><p>I&#8217;ve got here a screenshot of where we are at. This is of
course an early shot, so may or may not look like this in the final release. As
you can see adding or removing fields consists of dragging or dropping them
into a list where you can also group fields and even put them into additional
tabs. This constructs what fields the content piece has, as well as what
structure the create/edit page will take.</p>

<p>Once the Content Type is saved, then you will be able to
create a piece of content within that Content Type. Using the &#8216;views&#8217; system we
have in Interspire Shopping Cart,<span>&nbsp; </span>you&#8217;ll be able to
view all content pieces of a certain type, that match a search term or other criteria.
Managing a website will have never been easier.

</p><p>All current features will exist in the new release, so when
upgrading you won&#8217;t be losing anything. When upgrading from the current
ArticleLive/Interspire Website Publisher 4.5, the process will automatically recreate pages, blogs,
articles and news items (unless empty) using the content types system. From
there you will be able to edit each of those content types to add or remove
fields. Want categories for blogs? Drag the categories into a group in
the blogs content type page and you&#8217;re done! </p>

<p>When installing from scratch you&#8217;ll have the option for
advanced mode or simple mode, where simple mode asks you what you will use your
website for and constructs the content types automatically for you based on
your selection.</p>

<p>I hope you&#8217;ve enjoyed this sneak peek into Interspire Website Publisher 5.0. Next
week I&#8217;ll have more information on another section of this major overhaul. If
you have any comments or questions I&#8217;ll be happy to answer them in the comments
section.</p>

]]></description>
			<author>no@spam.com (Jordie Bodlay)</author>
			<pubDate><![CDATA[Tue, 27 May 2008 00:00:00 CDT]]></pubDate>
			<guid isPermaLink="true">http://idn.interspire.com/blogs/11/Introducing-Interspires-CMS-Website-Publisher.html</guid>
		</item>
	</channel>
</rss>