/ / Ako aktualizovať novú prílohu produktu na stiahnutie pre zadané objednávky v magento - magento, download, magento-1.7

Ako aktualizovať novú prílohu na stiahnutie pre objednávky v magento - magento, download, magento - 1.7

Mám výrobky na stiahnutie v mojom obchode Magento. Moje produkty na stiahnutie sú platené softvérové ​​nástroje. Aktualizovali sme tieto softvérové ​​nástroje na stiahnutie na základe každej zmeny verzie a vylepšenia nových funkcií softvérových nástrojov.

Softvérový balík je pripravený na stiahnutie, keď zákazníci dokončia každú úspešnú platobnú transakciu.

Moja otázka je:

Version - 1:

Zákazníci si budú kupovať a používať internet Version - 1 balíky pre order id #101.

Version - 2:

Keď aktualizujeme Version - 2 v správcovskom paneli pre príslušné produkty. musíme to umiestniť Version - 2 stiahnuť balík pre order id #101 namiesto toho id Version - 1.

Je táto možnosť možná v magento CE 1.7.0.0?

Momentálne má objednávka č. 101 k dispozícii iba balík verzie -1 na stiahnutie na stránke, ktorú si môžu zákazníci stiahnuť.

Potrebujeme však zabaliť súbor pre každú zakúpenú objednávku?

Prosím poraď.

odpovede:

6 pre odpoveď č. 1

Nasledujúci kód umiestnim do skriptu .php v koreňovom adresári Magento. Môžete ju zavolať cez CRON alebo pomocou webového prehliadača.

<?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 pre odpoveď č. 2

Aj keď je to starý príspevok s prijatou odpoveďou, ako alternatívne riešenie uverejním ďalšiu odpoveď.

Na vyriešenie môjho problému som vytvoril rozšírenie, ktoré aktualizuje minulé objednávky na akékoľvek zmeny vykonané v informáciách o produkte na stiahnutie.

Toto zahŕňa:

  1. iba aktualizácia existujúceho záznamu na stiahnutie (čím sa zmení názov odkazu a súboru na stiahnutie)
  2. pridanie akýchkoľvek nových súborov do zoznamu na stiahnutie (napríklad pridávanie opravných súborov v priebehu času)
  3. odstránenie existujúcich položiek

Akákoľvek minulá objednávka, ktorá obsahuje produkt, ktorý upravujete ako zakúpenú položku, potom aktualizuje svoj zoznam produktov na stiahnutie na akýkoľvek produkt, ktorý ste upravili.

dostupné cez github: https://github.com/ProxiBlue/UpdateDownloadLinks


1 pre odpoveď č. 3

Riešenie poskytované proxiblue je v poriadku, ale nie je úplné.

Algoritmus má tiež chybu, vždy berie všetkoodkazy na produkt a vymažte staré. Týmto spôsobom sa odkazy vždy obnovia a štatistika sťahovania sa stratí. Ak to chcete opraviť, mali by ste pridať nasledujúci kód:

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

Ďalšou nepríjemnosťou je, že sú to všetky nové odkazypridané ku všetkým objednávkam, aj keď sú zaplatené alebo nie. Nie je v poriadku, že platené odkazy sa štandardne pridávajú ku všetkým objednávkam, ak ich zákazníci nezaplatili.

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

Celý kód je:

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();
}

}
}

}