Silverstripe Commerce
Downloadable Product Module
Add downloadable product type to the Silverstripe Commerce module that
allows users to attach a file to a product that can only be downloaded
when the user is logged in and has bought it., (*1)
Dependancies
- SilverStripe Framework 3.1.x
- Silverstripe Commerce
Installation
Install this module either by downloading and adding to:, (*2)
[silverstripe-root]/commerce-downloadableproducts
Then run: dev/build/?flush=all, (*3)
Or alternativly add use composer:, (*4)
i-lateral/silverstripe-commerce-downloadableproduct
Usage
By default this module adds a "Downloadable Product" postage amount and
sets up the mechanisams needed to buy and download products., (*5)
You will also need to do some additional tasks to ensure that users get
the best experience and you keep your files secure., (*6)
NOTE: You will need to perform the following additional steps
manually in order to gain the most from this module., (*7)
Restrict the downloads folder (using Apache or IIS 7)
The file downloads section of your Silverstripe install will need to be
restricted (otherwise users could share the download links). You can
do this in your .htaccess or web.config by adding the following:, (*8)
RewriteEngine On
RewriteCond %{REQUEST_URI} ^(.*)$
RewriteRule assets/downloadable/* $frameworkDir/main.php?url=%1 [QSA]
Or alternativley, if you use web.config, add the following:, (*9)
<rewrite>
<rules>
<rule name="Silverstripe downloadable products" stopProcessing="true">
<match url="^assets/downloadable/(.*)$" />
<action type="Rewrite" url="$frameworkDir/main.php?url={R:1}" appendQueryString="true" />
</rule>
</rules>
</rewrite>
NOTE: The IIS script above should work, but has not been tested,
some tweaking may be required., (*10)
Add download link to orders pannel and emails
When you have access to a product in either the orders panel or an email
then you can call $DownloadLink to render the download URL into the
template. For example, in the order paid email you can add something,ike
this:, (*11)
OrderNotificationEmail_Customer.ss
<tbody><% loop $Items %>
<tr>
<td>
{$Title}
<% if $DownloadLink %> <small>(<a href="$DownloadLink">Download</a>)</small><% end_if %>
<% if $StockID %>($StockID)<% end_if %><br/>
<em>$CustomisationHTML</em>
</td>
<td style="text-align: right">{$Quantity}</td>
<td style="text-align: right">{$Price.Nice}</td>
</tr>
<% end_loop %></tbody>
#