markguinn/silverstripe-shop-downloadable

Silverstripe Shop 模块的下载产品

1.1.1 2016-05-18 17:14 UTC

This package is not auto-updated.

Last update: 2024-09-23 15:25:51 UTC


README

适用于 Silverstripe Shop

允许产品或产品变体(或两者)具有客户购买后可以下载的文件。这些文件在用户的账户页面上保持可用。

要求

  • Silverstripe 3.1+(可能与3.0兼容,但未经过测试)
  • Shop 模块 1.0 或 master 分支
  • ZipArchive必须在php中启用以实现完全功能

功能

  • 可应用于产品、产品变体或两者
    • 如果购买变体,则变体和主产品的所有文件均可下载(可以在CMS中覆盖)。
  • 可以将任何数量和类型的文件与产品关联
  • 如果通过信用卡支付,则下载立即可在收件屏幕上获得
  • 在订单历史记录中可获得下载
  • 所有历史下载均可在账户区域的中央屏幕上获得
  • 可以单独下载文件或以任何组合方式在zip存档中下载
    • 我们应该保留zip文件几天,这样我们就不需要不断地重新创建它们
    • 定时任务以删除旧文件
  • 下载链接不应可猜测
  • 对于同一文件,每个客户/订单的下载链接应不同
  • 应记录下载
  • 与 markguinn/silverstripe-cloudassets 模块兼容,用于在CDN上存储下载

安装

  1. composer require markguinn/silverstripe-shop-downloadable dev-master
  2. 将可下载扩展添加到产品和/或产品变体或仅添加到某些子类。
  3. 运行 dev/build?flush
  4. 在CMS中添加一些文件(每个产品都有一个“文件”选项卡)

YML示例

Product:
  extensions:
    - Downloadable
ProductVariation:
  extensions:
    - Downloadable

文件下载过程

  1. 一旦订单付款,文件就会显示在订单屏幕上。链接由产品上的可下载扩展生成。
  2. 用户点击的链接类似于 "http://example.com/downloads/FILE-HASH",这将调用DownloadController。
    • 给定订单ID和文件ID,哈希可重复(因此它也可以在电子邮件中使用)
    • 此步骤还可以包括包含多个文件的表单提交。
  3. DownloadController记录下载。如果仅为单个文件且文件较小(默认100M,但可通过yml配置),则将仅输出MIME类型并使用readfile立即启动下载。如果有多个文件或文件较大,则将显示一个临时的“请等待”页面,在文件复制和/或压缩(如果有多个文件)时显示。
    • 临时文件将以一种方式缓存,以便可以重用,直到由定时任务删除。
    • 临时页面的文本可以通过yml配置从CMS中的任何页面获取
    • 如果想要完全禁用“传递”行为,则可以很容易地通过将small_file_size设置为0来实现。
    • 支持具有X-Sendfile的服务器。在这种情况下,可以将small_file_size设置得非常高,因为文件永远不会在内存中。
  4. 如果显示临时页面,它将立即重定向到另一个URL,该URL将启动复制/压缩任务
  5. 当复制/压缩任务完成时,它将重定向到临时文件的实际URL

配置(可下载类的YML选项)

  • tab_name: CMS中文件选项卡的名称(默认:下载)
  • 源文件夹:这些文件在cms中默认上传到何处(默认:product-files)
  • zip文件夹:临时zip文件和大文件副本的位置(默认:temp-order-files)
  • download_link_base:链接URL段 - 例如 http://example.com/downloads/filekey(默认:downloads)
  • small_file_size:低于此大小的任何文件将通过readfile或x-sendfile直接传输,不创建临时文件(默认:100M)
  • use_xsendfile:使用X-Sendfile头代替readfile,必须已安装mod_xsendfile(或等效)模块(默认:false)
  • crunching_page:复制/压缩文件时显示的页面的URL段/路径,而不是默认页面
  • crunching_zombie_window:在zip文件上重启压缩之前多少分钟(默认:5)
  • delete_temp_files_after:在删除临时文件之前多少小时是合适的(默认:48)

待办事项

  • 测试

很好,但我近期没有打算自己完成这项工作

  • 可翻译
  • 下载时间限制

开发者

欢迎通过pull request和/或错误报告贡献。请遵循Silverstripe代码标准。

许可协议(MIT)

版权所有(c)2013 Mark Guinn

特此免费授予任何获得本软件及其相关文档副本(“软件”)的人权,在不受限制的情况下处理软件,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或出售软件副本的权利,以及允许向软件提供的人使用上述权利,但应遵守以下条件

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何形式的保证,无论是明示的、暗示的,还是关于适销性、特定目的适用性或不侵犯的保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论是基于合同、侵权或其他法律行为,无论是源于、因之或与此软件或软件的使用或其他交易有关。