/ / Як оновлювати нові завантажувані додатки для розміщених замовлень в magento - magento, download, magento-1.7

Як оновити новий приклад файл для завантаження для розміщених замовлень у magento - magento, завантажити, magento-1.7

У мене є завантажувані продукти в моєму магазині magento. Мої завантажувані продукти - це платні програмні засоби. Ми оновлюємо ці завантажувані програмні засоби на основі змін у кожній версії та розширюємо нові можливості програмних засобів.

Програмний пакет готовий до завантаження, коли клієнти виконують кожну успішну платіжну операцію.

Мій питання:

Version - 1:

Клієнти будуть купувати та використовувати Version - 1 пакети для order id #101.

Version - 2:

Коли ми оновлюємо Version - 2 в адміністративній панелі для відповідних продуктів. ми повинні розмістити Version - 2 завантажити пакет для order id #101 замість id Version - 1.

Чи можливий цей варіант в magento CE 1.7.0.0?

Наразі ідентифікатор замовлення № 101 має тільки версію -1 для завантаження на сторінці для завантаження.

Але нам потрібно пакувати файл для кожного придбаного замовлення?

Порадьте, будь ласка.

Відповіді:

6 за відповідь № 1

Я розміщую наступний код у .php скрипті в корені Magento. Ви можете зателефонувати за допомогою CRON або веб-браузера.

<?php

require("app/Mage.php");
umask(0);
Mage::app();

$select = getDb()->select()
->from(getTable("downloadable/link"), array("link_id", "link_file", "product_id"));

if (($links = getDb()->fetchAll($select)) !== false) {
foreach($links as $link) {
$linkId = $link["link_id"];
$productId = $link["product_id"];
$file = $link["link_file"];

$select = getDb()->select()
->from(getTable("downloadable/link_title"), "title")
->where("link_id=?", $linkId)
->limit(1);

$title = getDb()->fetchOne($select);

echo sprintf("Updating %s to %s<br />", $file, $title);

$cond = getDb()->quoteInto("product_id=?", $productId);

getDb()->update(getTable("downloadable/link_purchased_item"), array("link_id" =>$linkId,"link_title"=>$title,"link_file"=>$file), $cond);
}
}

function getDb($conn = "core_read") {
return Mage::getSingleton("core/resource")->getConnection($conn);
}

function getTable($table) {
return Mage::getSingleton("core/resource")->getTableName($table);
}

2 для відповіді № 2

Хоча старий пост, з прийнятою відповіддю, я розміщу ще одну відповідь як альтернативне рішення.

Щоб вирішити проблему, я створив розширення, яке оновлюватиме попередні замовлення на будь-які зміни, зроблені в інформації, що завантажується в продукт.

Це включає:

  1. просто оновлення існуючого запису, що завантажується (таким чином, змінюється назва посилання та файл для завантаження)
  2. додавання нових файлів до списку для завантаження (наприклад, додавання файлів виправлення з часом)
  3. видалення існуючих записів

Будь-яке попереднє замовлення, яке має продукт, який ви налаштовуєте, як придбаний товар, потім оновить список завантажуваних продуктів на те, що ви редагували.

доступний через github: https://github.com/ProxiBlue/UpdateDownloadLinks


1 для відповіді № 3

Рішення, надане proxiblue, є нормальним, але не повне.

Алгоритм має також помилку, вона завжди приймає всіпосилання на продукт і видалити старі. Таким чином, посилання завжди оновлюються, а статистика завантаження втрачається. Щоб виправити це, додайте наступний код:

$currentPurchasedItemsT = $linkPurchasedItems->getItems();
$currentPurchasedItems=array();
foreach( $currentPurchasedItemsT as $c){
$currentPurchasedItems[$c["link_id"]] = $c;
}

Ще одна незручність полягає в тому, що всі нові посилання єдодано до всіх замовлень, навіть якщо оплачено чи ні. Це не нормально, що платні посилання додаються за замовчуванням до всіх замовлень, події, якщо клієнти не заплатили за них.

$data = $newFile->getData();
if ($linkPurchased->getOrderItemId() && $data["price"]=="0.0000") {

Повний код:

class ProxiBlue_UpdateDownloadLinks_Model_Observer {
public function catalog_product_save_after($observer) {
$product = $observer->getEvent()->getProduct();
$product = $observer->getProduct();
return;
if ($product->getTypeId() == Mage_Downloadable_Model_Product_Type::TYPE_DOWNLOADABLE) {
// get all the purchased items that match the product
$linkPurchasedItems = Mage::getModel("downloadable/link_purchased_item")->getCollection()
->addFieldToFilter("product_id", $product->getId())->load();
$currentPurchasedItemsT = $linkPurchasedItems->getItems();
$currentPurchasedItems=array();
foreach( $currentPurchasedItemsT as $c){
$currentPurchasedItems[$c["link_id"]] = $c;
}
$files = $product->getTypeInstance(true)->getLinks($product);
//build a list of purchase objects (orders) that were used to buy this product
$productId = $product->getId();
$collection = Mage::getResourceModel("sales/order_item_collection")
->addAttributeToFilter("product_id", array("eq" => $productId))
->load();
$purchaseObjects = array();
foreach($collection as $orderItem) {
$purchaseObject = mage::getModel("downloadable/link_purchased")->load($orderItem->getOrderId(),"order_id");
if($purchaseObject->getId()) {
$purchaseObjects[$purchaseObject->getId()] = $purchaseObject;
}
}
//determine and add any new files to the orders that have the product

$newFiles = array_diff_key($files, $currentPurchasedItems);


foreach ($newFiles as $newFile) {
//attach each new file to the purchase

foreach ($purchaseObjects as $linkPurchased) {
$data = $newFile->getData();

if ($linkPurchased->getOrderItemId() && $data["price"]=="0.0000") {

$linkHash = strtr(base64_encode(microtime() . $linkPurchased->getId() . $linkPurchased->getOrderItemId()
. $product->getId()), "+/=", "-_,");
$linkPurchasedItem = Mage::getModel("downloadable/link_purchased_item");
$linkPurchasedItem->setData($newFile->getData());
$linkPurchasedItem->unsItemId();
$linkPurchasedItem->setPurchasedId($linkPurchased->getId())
->setOrderItemId($linkPurchased->getOrderItemId())
->setLinkHash($linkHash)
->setLinkTitle($newFile->getTitle())
->setStatus(Mage_Downloadable_Model_Link_Purchased_Item::LINK_STATUS_AVAILABLE);
//->setUpdatedAt(now())
$linkPurchasedItem->save();
}
}
//exit;
}

// determine what is no longer attached as files and remove from the download links
$noLongerAttachedAsFiles = array_diff_key($currentPurchasedItems,$files);

//var_dump(array_diff_key($currentPurchasedItems,$files));
//echo "<br/><br/>";
//exit;
foreach ($noLongerAttachedAsFiles as $purchasedLink) {
//$purchasedLink->delete();
}

}
}

}