Magento, chiamare un metodo di un block da un template

Da un template, per chiamare un metodo definito nel Block corrispondente è sufficiente utilizzare la parola chiave $this.

Per esempio nel block: Page/Block/Html/Header.php è definito il metodo getWelcome(). Dalla relativa view: template/page/html/header.phtml è possibile invocare il metodo con l’istruzione:

<?php echo $this->getWelcome()?>

Per invocare quello stesso metodo da un file template differente è possibile ricorrere all’utilizzo di getBlockClassName().

Dal file template istanziare il blocco:

$className = Mage::getConfig()->getBlockClassName('page/html_header');
$block = new $className();

In questo modo è possibile chiamare il metodo getWelcome sull’oggetto $block:

<?php echo $block->getWelcome()?>
Annunci

Magento, cambiare lo stato degli ordini

Esigenza: cambiare lo stato di un ordine in Magento.

Caso specifico: cambiare lo stato di un ordine da “canceled” a “processing“.

Dal pannello di amministrazione non è possbile in quanto per un ordine in stato canceled non esiste l’azione per un cambio di stato “processing”.

L’idea è quella di fare questo cambio di stato da codice.

Ovviamente non è possibile cambiare il valore dell’attributo status sul model Sales. Questo perchè il cambio di stato di un ordine implica anche altre operazioni. Per fare questo quindi occorre

  • individuare l’ordine su cui modificare lo stato;
  • se l’ordine esiste ed è nello stato che ci si aspetta possiamo procedere con la modifica
  • per la modifica utilizzare il metodo setState e NON setStatus.

Ecco il codice

<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
require_once(dirname(__FILE__) . '/../app/Mage.php');
Mage::app(0);
ini_set('display_errors', 1);
error_reporting(E_ALL);
//configurazione
define("_LOG_TARGET", 1); // 0 disabilitato, 1 echo, 2 log di magento;
define("_LOG_FILE", "updateOrder.log"); // file di log;
/*
 * stati disponibili
 * Mage_Sales_Model_Order::STATE_NEW         = 'new';
 * Mage_Sales_Model_Order::STATE_PROCESSING  = 'processing';
 * Mage_Sales_Model_Order::STATE_COMPLETE    = 'complete';
 * Mage_Sales_Model_Order::STATE_CLOSED      = 'closed';
 * Mage_Sales_Model_Order::STATE_CANCELED    = 'canceled';
 * Mage_Sales_Model_Order::STATE_HOLDED      = 'holded';
 */
define("_STATUS_FROM", Mage_Sales_Model_Order::STATE_CANCELED); // stato 
define("_STATUS_TO", Mage_Sales_Model_Order::STATE_PROCESSING); // stato target
define("_REALLY_UPDATE", false); // stato di parenza

$idOrdine = "123456";

function mylog($message) {
 if (_LOG_TARGET == 1) {
 echo "$message\n";
 } else if (_LOG_TARGET == 2) {
 Mage::log($message, null, _LOG_FILE);
 }
}

mylog("Inizio");
mylog("Carico ID ORDINE:".$idOrdine);
try {
$ordine = Mage::getModel('sales/order')->load($idOrdine);
if ($ordine && $ordine->getIncrementId() != "") {
 mylog("Caricato ORDINE :".$ordine->getIncrementId());
 mylog("         STATO  :".$ordine->getStatus());
 mylog("         CREATO :".$ordine->getCreatedAt());

 mylog("CONTROLLI STATO :");
 mylog("         CHECK  :controllo se stato è uguale a :"._STATUS_FROM);
 if ($ordine->getStatus() == _STATUS_FROM) {
 mylog("         CHECK  :stato ordine (".$ordine->getStatus().") uguale a ". _STATUS_FROM);
 if (_REALLY_UPDATE) {
 mylog("MODIFICA ORDINE :");
 mylog("         UPDATE :Procedo alla modifica. Stato destinazione: ". _STATUS_TO);
 $ordine->setState(_STATUS_TO, true)->save();
 } else {
 mylog("MODIFICA ORDINE :non effettuata per via della configurazione _REALLY_UPDATE");

 }
 } else {
 mylog("stato ordine (".$ordine->getStatus().") DIVERSO da ". _STATUS_FROM);

 }

} else {
 mylog("Ordine non trovato");

}
} catch (Exception $e) {
 myLog("Errore, ".$e->getMessage());
}

mylog("Fine");

?>
%d blogger hanno fatto clic su Mi Piace per questo: