Categorie
Blog

Ottenere la lista di prodotti di un bundle

Un prodotto bundle, è un prodotto composto da un insieme di altri prodotti. Capita a volte di volere stampare la lista dei prodotti all’interno dei prodotti bundle per costruire delle promozioni, delle liste di prodotti, o solamente per visualizzare al meglio il prodotto bundle.
Per ottenere la lista di prodotti di cui un bundle è composto è possibile utilizzare il seguente codice:
[sourcecode language=”php”]
//$bundle_product è il nostro prodotto bundle

$selectionCollection = $bundle_product->getTypeInstance(true)->getSelectionsCollection(
$bundle_product->getTypeInstance(true)->getOptionsIds($bundle_product), $bundle_product
);

$bundled_items = array();
foreach($selectionCollection as $option)
{
$bundled_items[] = $option->product_id;
}

var_dump($bundled_items);
[/sourcecode]

Categorie
Blog

Impostare un layout personalizzato per una categoria

Capita molto spesso di dover impostare un template personalizzato solamente per un categoria di prodotti.

Tutti i prodotti della categoria che vogliamo mostrare in modo differente possono avere delle esigenze particolari, tipo una grafica ad-hoc, dei blocchi particolari e chi più ne ha più ne metta.

Quale è la soluzione che ci viene subito alla mente?

Creare un nuovo template uguale al precedente ed customizzare il list.phtml ed il view.phtml inserendo li tutte le modifiche che vogliamo. Questa soluzione funziona ma non è delle più corrette perchè in futuro dovremo portarci tutte le modifiche in due posti, il template originale e quello della nuova categoria.

La soluzione corretta è quindi quella copiare il file
[sourcecode language=”php”]
/app/design/frontend/default/il-tuo-tema/template/page/list.phtml

nel nuovo file

/app/design/frontend/default/il-tuo-tema/template/page/list-new.phtml
[/sourcecode]

Poi accediamo al magento, nell’amministrazione: Catalogo > Gestione Categorie, clicchiamo sulla categoria della quale vogliamo impostare il nuovo template, andiamo nel tab Design Personalizzato, selezioniamo il tema sotto il quale abbiamo creato il list-new.phtml e dentro Custom Layout Update inseriamo il seguente codice:

[sourcecode language=”xml”]
<reference name="product_list">
<action method="setTemplate">
<template>catalog/product/list-new.phtml</template>
</action>
</reference>
[/sourcecode]

Questo è tutto. La nostra categoria avrà un nuovo design senza dover creare un nuovo tema!

Categorie
Blog

Modificare il numero di fattura e la generazione dei numeri di fattura

Come in tutte le attività imprenditoriali, prima o poi, chi realizza un e-commerce deve scontrarsi nella fatturazione, ovvero la generazione dei documenti fiscali che provano le vendite/acquisti.

Capita che ogni cliente abbia una propria storia e delle personali esigenze, e di conseguenza capita che ogni cliente mi chieda delle personalizzazioni nella creazione di fatture ed in particolare nel numero di queste (ecco un po’ di esempi):

  • C’è chi vuole che il numero di fattura parta da un determinato numero
  • C’è colui che vuole partire da zero
  • C’è il cliente che vuole poter saltare alcuni numeri
  • C’è chi vuole inserire il numero della prossima fattura da poter generare

Come è possibile che si debba rispondere a tutte queste esigenze ben diverse?

La soluzione è conoscere come vengono generati i numeri di fattura a partire dal database di magento.

I numeri di fattura vengono salvati nella tabella `eav_entity_store`, precisamente nel campo `increment_last_id` che appunto indica l’ultimo numero utilizzato per la fattura, ordine, nota di credito e spedzione.
Per capire quale riga andare a modificare basterà controllare l’id della colonna entity_type_id ,che nel mio caso è 6 ed indica la fattura (invoice).
Modificando il campo increment_last_id andremo a modificare il prossimo numero di fattura che verrà generato.
Di default Magento crea un numero di fattura per ogni store, del tipo: tutte le fattura dello store con id 1 hanno come prefisso il numreo 1, quelle dello store due utilizza 2 come prefisso. E’ cosa buona solitamente andare ad unificare queste numerazioni diverse. Per farlo dovremo andare a modificare la tabella `eav_entity_type` , ed esattamente il campo increment_per_store impostandolo a 0 da 1 che è si default.
Lo zero indica che la numerazione delle fattura è unica per tutti gli store!

Per qualunque domanda o chiarimento contattatemi!

Categorie
Blog

Programmazione magento – Sovrascrivere un controller dell’amministrazione

In che modo si può sovrascrivere un controller dell’amministrazione?
Capita a volte di dovere sovrascrivere alcuni controllers dell’amministrazione, ad esempio, come è capitato oggi a me per dovere creare le fatture con un numero a scelta da parte dell’amministratore.
Per sovrascrivere sono necesari 3 passi:

  1. Creare un modulo
  2. Configurare il modulo nel suo config.xml in modo da dirgli di sovrascrivere un determinato controller
  3. Creare un controller che estende un altro controller, ovvero quello che si vuole riscrivere

Il punto 1 ed il punto 2 si risolvono creando un file di configurazione come il seguente:

[sourcecode language=”xml”]
<?xml version="1.0" encoding="utf-8"?>
<config>
<modules>
<Iacopop_Adminhtml>
<version>0.2.0</version>
</Iacopop_Adminhtml>
</modules>
<admin>
<routers>
<adminhtml>
<args>
<modules>
<Iacopop_Adminhtml before="Mage_Adminhtml">Iacopop_Adminhtml</Iacopop_Adminhtml>
</modules>
</args>
</adminhtml>
</routers>
</admin>
</config>
[/sourcecode]

Come si può notare nel file sto indicando che nella sezione routers dell’amministrazione magento (adminhtml) venga caricato prima il modulo Iacopop_Adminhtml (prima di Mage_Adminhtml).
Avendo indicato a Magento di caricare prima il mio modulo non dovrò fare altro che creare un controller che estende il controller che mi interessa. Nel mio caso volevo sovrascrivere il controller che genera la fattura per andare a modificare il numero di fattura prima della sua creazione. Andiamo a vedere come creare il nuovo controller:
[sourcecode language=”php”]
<?php

include_once("Mage/Adminhtml/controllers/Sales/Order/InvoiceController.php");

class Iacopop_Adminhtml_Sales_Order_InvoiceController extends Mage_Adminhtml_Sales_Order_InvoiceController {
/**
* Save invoice
* We can save only new invoice. Existing invoices are not editable
*/
public function saveAction()
{
//questo è il codice originale di magento della action save del controller Mage_Adminhtml_Sales_Order_InvoiceController
//possiamo inserire qua tutto il codice che ci permettere di sovrascrivere il metodo originale
codice ……..

}
}

?>
[/sourcecode]
Includendo il controller originale e estendendolo è possibile sovrascrivere tutti le funzioni e metodi di questo facendo in modo che tutte le azioni passino per il nuovo controller.