[英]Magento Adding to Customers Available Downloadable Products
背景
我正在工作的网站出售与可下载产品(书籍)相关联的网络广播。 用户可以购买该书,也可以购买网络广播并免费获得该书。
书籍本身就是手册,每当对最近购买书籍(1年+1个月)的用户进行更新时,都需要通知该更新,以便他们可以重新下载该书籍。 可以了
问题
可下载产品的更新方式是添加了新链接。 基本文件本身永远不会改变,而是添加了新文件,其中包括有关人们整理该书如何组装的说明(这是因为它们是一家绿色公司,他们不希望人们每次都完全打印掉这1000页手册)他们添加一个页面)。 如果进行了新修订并通知了用户,则他们没有下载更改的链接,因为在最初下订单时该更改不存在。 他们所看到的都是指向他们最初下订单时存在的文件的链接,因为这就是downloadable_link_purchased_item
表中存在的downloadable_link_purchased_item
。
我需要的是一种允许客户下载已购买产品的所有修订版本(请阅读:所有可用链接)的方法。
我已经尝试了$productModel->getLinks()
和$productModel->getDownloadableLinks()
,但是都返回null:
$purchased = Mage::getResourceModel('downloadable/link_purchased_collection')
->addFieldToFilter('customer_id', $session->getCustomerId())
->addOrder('created_at', 'desc');
if(count($purchased)) {
$this->setPurchased($purchased);
$purchasedIds = array();
foreach ($purchased as $_item) {
$purchasedIds[] = $_item->getId();
$order = Mage::getModel('sales/order')->load($_item->getOrderId());
$items = $order->getAllItems();
foreach($items as $item) {
if('downloadable' == $item->getProductType()) {
$product = Mage::getModel('catalog/product')->load($item->getProductId());
echo('Links: <pre>');
var_dump($product->getLinks());
echo('</pre>');
die;
}
}
}
}
我还认为,也许我可以为每当进行更新时购买了更新书籍的每个客户在downloadable_link_purchased_item
表中添加一个新条目,并为每个条目生成一个新的链接哈希。 但是,我认为这真的不是一个好主意(他们当时并没有真正购买它,我必须生成自己的link_hash,我对此并不感到很自在,实际上我会就像在不影响数据的情况下为他们提供访问权限)。
我被困了半天,试图弄清楚如何解决这个问题,非常感谢您提供的任何帮助或在正确/不太错误的方向上提出/建议。 我对可下载产品或其网址的工作方式没有太多经验。 提前致谢。
更新资料
我尝试使用在观察者中使用以下代码的将链接插入到downloadable_link_purchased_item
表中的路线,该路线在每次通过admin更新产品时都会触发:
$product = $observer->getProduct();
echo('<pre>');
if('downloadable' == $product->getTypeId()) {
foreach($_POST['downloadable']['link'] as $link) {
if('0' == $link['link_id']) {
// This is a new file being added. Insert a record into
// downloadable_link_purchased_item for each customer
// that has purchased this item.
$file = json_decode($link['file']);
$orderItems = Mage::getModel('sales/order_item')->getCollection()
->addFieldToFilter('product_id', $product->getId());
foreach($orderItems as $orderItem) {
$order = Mage::getModel('sales/order')->getCollection()
->addFieldToFilter('entity_id', $orderItem->getOrderId())
->getFirstItem();
$downloadPurchase = Mage::getModel('downloadable/link_purchased')
->setOrderId($orderItem->getOrderId())
->setOrderIncrementId($order->getIncrementId())
->setOrderItemId($orderItem->getId())
->setCreatedAt(date('Y-m-d H:i:s'))
->setUpdatedAt(date('Y-m-d H:i:s'))
->setCustomerId($order->getCustomerId())
->setProductName($product->getName())
->setProductSku($product->getSku())
->setLinkSectionTitle('Click here to download');
var_dump($downloadPurchase->save());
// I got this line from /app/code/core/Mage/Downloadable/sql/downloadable_setup/mysql4-upgrade-0.1.12-0.1.13.php
$linkHash = strtr(base64_encode(microtime() . $downloadPurchase->getId() . $orderItem->getId() . $product->getId()), '+/=', '-_,');
$downloadItem = Mage::getModel('downloadable/link_purchased_item')
->setProductId($product->getId())
->setNumberOfDownloadsBought(0)
->setNumberOfDownloadsUsed(0)
->setLinkTitle($link['title'])
->setIsShareable($link['is_shareable'])
->setLinkFile($file[0]->file)
->setLinkType('file')
->setStatus('available')
->setCreatedAt(date('Y-m-d H:i:s'))
->setUpdatedAt(date('Y-m-d H:i:s'))
->setLinkHash($linkHash)
->setOrderItemId($orderItem->getId())
->setPurchasedId($downloadPurchase->getId());
var_dump($downloadItem->save());
echo('Download Purchase ID: ' . $downloadPurchase->getId() . '<br>');
echo('Download Item ID: ' . $downloadItem->getId() . '<br>');
}
}
}
}
echo('</pre>');
die;
现在的问题是,它的行为就像是将模型保存在数据库中一样(我得到了ID以及这两个模型的所有信息),但实际上没有人保存。 我很确定$downloadItem
可能不保存的原因是因为我没有指定链接ID(即使在观察者中尚不存在链接之后,即使我正在使用事件catalog_product_save_after
,仍在尝试找出一个以及)。 但是,我不知道为什么$downloadPurchase
模型不能保存。
原来我的die
声明阻止了模型数据的保存。 当我取出时,指向可下载产品的链接已正确放置,购买了可下载产品的客户可以从其帐户屏幕上立即看到新版本。
我不确定为什么会这样,我想我调用save()
的那一刻将是发生数据库插入的时间,但是显然这不是Magento上议院的看法。
就数据完整性而言,我仍然有一些问题。 就像我在上面说过的那样,在调用观察者时不会创建download_link
条目,但是至少用户现在可以在其帐户中看到链接。
这是一个伟大的免费开源解决方案,用于更新可下载产品的版本,它也是自定义和添加额外链接的良好基础-https: //github.com/ProxiBlue/UpdateDownloadLinks
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.