Forums / Developer / Webshop - downloadable products

Webshop - downloadable products

Author Message

Michal Slocinski

Tuesday 28 April 2009 11:07:30 am

Hi all,

I would like to setup a site with webshop and downloadable products. After making a payment, user should be allowed to download particular file.

I've been looking into the documentation and forum as well, but information I found is quite old so maybe there are already easier ways of achieving such result. In general, authors recommend one of below approaches:
a) "hide" URL without protecting it
b) develop custom extension and create single roles for each of products, extension would then assign user to particular role after successful payment

Is there any other approach you would recommend in order to implement described functionality?

Michal

Mark Marsiglio

Tuesday 05 May 2009 8:44:15 am

We did this by creating an operator that allows the product template to access a logged-in users purchase history. If the product ID was part of a successful order, then that user would see a different version of the product template that had no "add to cart" button, and instead displayed up to 3 file attributes for that product (though in practice you could have as many as you needed).

I will see if I can gather it up as a contribution.

http://www.thinkcreative.com
Turning Ideas Into Strategic Solutions

Bård Farstad

Tuesday 05 May 2009 9:31:19 am

One way of doing this is to use permissions with the following setup:
* Create a product which is dedicated to a specific download (or a subscription)
* Write a workflow event for the checkout process that checks (after payment) if the specific product for a download was bought. If that is the case then assign the user to an additional user group "product x download access"
* Create the actual download files in a location which is restricted (e.g. assign it to a new section)
* Define the roles for the user group "product x download access" so that the user has permission to download the specified file(s)

This is a very clean way of enabling downloads and you basically only have to write a new workflow event to assign the user group after payment, the rest is configuration you can do via the admin GUI.

Hope this helps,

-bård

Documentation: http://ez.no/doc

Hakim Bouras

Wednesday 06 May 2009 2:21:41 am

Hi all,

Thank you for sharing your solution. I also have a similar need.

@ Mark

With your solution, does anyone who knows the URL of the file to download can potentially download it even if the product was not bought (although it will require the user to be logged in).

@ Bård

If I understand properly your solution, it might not be easy to use as soon as there are hundreds or even thousands of different downloadable products. Would you suggest in that case to automatically create the sections and roles as soon as we create a product ?

Thanks for your help,
Hakim

Łukasz Serwatka

Wednesday 06 May 2009 5:02:19 am

Hi,

You might also look on the examples in solutions category:
http://ez.no/developer/contribs/solutions

For example:
http://ez.no/developer/contribs/solutions/ib_paid_download_link

Personal website -> http://serwatka.net
Blog (about eZ Publish) -> http://serwatka.net/blog

Mark Marsiglio

Wednesday 06 May 2009 12:57:16 pm

@Hakim -

That is a good question. We did not test that as our use case was low-traffic (and low budget!). The download links might not require permissions because it is only a template switch that prevents them from being exposed normally, not a permissions-based rule.

Also, the download link for the extension is now posted in the projects section:
http://projects.ez.no/tc_mypurchases/downloads

http://www.thinkcreative.com
Turning Ideas Into Strategic Solutions

Hakim Bouras

Thursday 07 May 2009 3:34:48 am

Thanks Mark for sharing your operator.

The solution pointed by Lukasz also looks very interesting.

Cheers,
Hakim

eZ debug

Timing: Jan 29 2025 13:43:08
Script start
Timing: Jan 29 2025 13:43:08
Module start 'content'
Timing: Jan 29 2025 13:43:08
Module end 'content'
Timing: Jan 29 2025 13:43:08
Script end

Main resources:

Total runtime0.1492 sec
Peak memory usage2,048.0000 KB
Database Queries141

Timing points:

CheckpointStart (sec)Duration (sec)Memory at start (KB)Memory used (KB)
Script start 0.00000.0051 587.9297180.8359
Module start 'content' 0.00510.0140 768.7656101.8672
Module end 'content' 0.01910.1301 870.6328530.5234
Script end 0.1491  1,401.1563 

Time accumulators:

 Accumulator Duration (sec) Duration (%) Count Average (sec)
Ini load
Load cache0.00302.0295200.0002
Check MTime0.00120.8013200.0001
Mysql Total
Database connection0.00080.531510.0008
Mysqli_queries0.091661.40201410.0006
Looping result0.00090.62171390.0000
Template Total0.129686.910.1296
Template load0.00070.493910.0007
Template processing0.128986.391610.1289
Override
Cache load0.00050.353110.0005
Sytem overhead
Fetch class attribute can translate value0.00050.353110.0005
XML
Image XML parsing0.00030.187810.0003
General
dbfile0.021714.5347200.0011
String conversion0.00000.002730.0000
Note: percentages do not add up to 100% because some accumulators overlap

CSS/JS files loaded with "ezjscPacker" during request:

CacheTypePacklevelSourceFiles
CSS0extension/community/design/community/stylesheets/ext/jquery.autocomplete.css
extension/community_design/design/suncana/stylesheets/scrollbars.css
extension/community_design/design/suncana/stylesheets/tabs.css
extension/community_design/design/suncana/stylesheets/roadmap.css
extension/community_design/design/suncana/stylesheets/content.css
extension/community_design/design/suncana/stylesheets/star-rating.css
extension/community_design/design/suncana/stylesheets/syntax_and_custom_tags.css
extension/community_design/design/suncana/stylesheets/buttons.css
extension/community_design/design/suncana/stylesheets/tweetbox.css
extension/community_design/design/suncana/stylesheets/jquery.fancybox-1.3.4.css
extension/bcsmoothgallery/design/standard/stylesheets/magnific-popup.css
extension/sevenx/design/simple/stylesheets/star_rating.css
extension/sevenx/design/simple/stylesheets/libs/fontawesome/css/all.min.css
extension/sevenx/design/simple/stylesheets/main.v02.css
extension/sevenx/design/simple/stylesheets/main.v02.res.css
JS0extension/ezjscore/design/standard/lib/yui/3.17.2/build/yui/yui-min.js
extension/ezjscore/design/standard/javascript/jquery-3.7.0.min.js
extension/community_design/design/suncana/javascript/jquery.ui.core.min.js
extension/community_design/design/suncana/javascript/jquery.ui.widget.min.js
extension/community_design/design/suncana/javascript/jquery.easing.1.3.js
extension/community_design/design/suncana/javascript/jquery.ui.tabs.js
extension/community_design/design/suncana/javascript/jquery.hoverIntent.min.js
extension/community_design/design/suncana/javascript/jquery.popmenu.js
extension/community_design/design/suncana/javascript/jScrollPane.js
extension/community_design/design/suncana/javascript/jquery.mousewheel.js
extension/community_design/design/suncana/javascript/jquery.cycle.all.js
extension/sevenx/design/simple/javascript/jquery.scrollTo.js
extension/community_design/design/suncana/javascript/jquery.cookie.js
extension/community_design/design/suncana/javascript/ezstarrating_jquery.js
extension/community_design/design/suncana/javascript/jquery.initboxes.js
extension/community_design/design/suncana/javascript/app.js
extension/community_design/design/suncana/javascript/twitterwidget.js
extension/community_design/design/suncana/javascript/community.js
extension/community_design/design/suncana/javascript/roadmap.js
extension/community_design/design/suncana/javascript/ez.js
extension/community_design/design/suncana/javascript/ezshareevents.js
extension/sevenx/design/simple/javascript/main.js

Templates used to render the page:

UsageRequested templateTemplateTemplate loadedEditOverride
1pagelayout.tpl<No override>extension/sevenx/design/simple/templates/pagelayout.tplEdit templateOverride template
 Number of times templates used: 1
 Number of unique templates used: 1

Time used to render debug report: 0.0001 secs