Categorie
Blog

Homepage personalizzata in magento

A tutti voi sarà capitato di dover creare una homepage personalizzata in magento, con il vincolo di inserire nella vostra pagina codice html e javascript. Il metodo che vi sto per mostrare è utile anche per creare landing pages per il vostro e-commerce.

Per fare questo vi sono due metodi:

  1. Creare la pagina all’interno del CMS di magento
  2. Creare la pagina come un file .phtml (template magento) ed associarla ad un blocco

1) Come creare la nostra homepage attraverso il cms di magento

Per creare una nuova homepage è necessario loggarsi all’interno dell’amministrazione, andare nel menu CMS ->Pages e cliccare su Aggiungi nuova pagina.

Dopoo avere impostato un titolo, una ulr ed un contenuto attraverso l’editor di magento salvatela con il nome che preferite, ad esempio nuova_homepage

Andiamo adesso in Sistema -> Configurazione -> Generale -> Web ed andiamo a selezionare la nostra nuova pagina nella tendina che appare in Pagine di Default  -> Home Page CMS come nella immagine sottostante:

Salvate ed avrete la vostra homepage personalizzata funzionante.

2) Creare la pagina come un file .phtml (template magento) ed associarla ad un blocco

A volte capita di volere salvare una pagina personalizzata come file .phtml, o perchè abbiamo bisogno di mantenere la pagina in svn/cvs oppure perchè la pagina contiene del codice javascript che va testato in maniera veloce (il cms non permettere di farlo poichè la pagina va salvata ad ogni modifica).

Per questo a volte è preferibile (e consigliato) creare una pagina da associare ad un blocco.

I passi sono i seguenti:

  1. Creare una pagina .phtml
  2. Creare un blocco associato al template del punto 1
  3. Creare una pagina di cms ed inserire al suo interno il blocco creato al punto 2

Facciamo un esempio pratico.

1) Creiamo un file .phtml con il contenuto che vogliamo:

[sourcecode language=”xml”]
magento/app/design/frontend/default/default/template/page/html/nuova_homepage.phtml
[/sourcecode]

2) Creiamo il blocco e colleghiamolo al template

inseriamo all’interno come contenuto del blocco il seguente codice creando il blocco con il nome nuova_homepage (questo nome sarà il block id ):

[sourcecode language=”xml”]
{{block type="page/html" template="page/html/nuova_homepage.phtml"}}
[/sourcecode]


Salviamo il blocco e come ultima cosa creiamo la nostra homepage dal cms di magento e colleghiamo questa nuova pagina al blocco precedentemente creato, inserendo nel contenuto della pagina il seguente codice:

[sourcecode language=”xml”]
{{block type="cms/block" block_id="nuova_homepage"}}
[/sourcecode]

Andiamo poi nell’amministrazione e impostiamo la nuova pagina come homepage come mostrato nel macro punto 1 di questo articolo (sistema -> configurazione -> generale -> web -> Pagine di Default  -> home page CMS)

Et voilà!! Il gioco è fatto.

Questo metodo può essere utilizzato anche per creare landing pages per le campagne pubblicitarie del vostro ecommerce.

Ciao, alla prossima.

Iacopo

Categorie
Blog

Cancellare tutte le url rewrite dei prodotti e categorie

Vi sarà capitato di rinominare delle categorie o prodotti e non fare caso al checkbox che sta sotto l’url key del prodotto o categoria che dice:

 

 

Il checkbox create permanent Redirect for old url crea dei redirect 301 quando si cambia la url di una categoria o un prodotto, in modo che gli spider ed i visitatori riescano a raggiungere la categoria ed il prodotto anche quando la url cambia.

Questa è una ottima cosa per i siti in produzioni che sono già stati indicizzati da google, ma se si vuole assegnare un nome ad una categoria che è stato precedentemente utilizzato a volte magento internviene nelle url inserendo un -1, -1 alla url, ad esempio facendo riferimento alla url della immagine soprastante quel design mi veniva trasformato in design-1.html

La domanda quindi è: Come posso cancellare tutte le url rewrite in modo da ripartire da zero con delle url pulite pulite?

La soluzione è cancellare la tabella core_url_rewrite con la seguente query:

[sourcecode language=”sql”]
delete FROM `core_url_rewrite`
[/sourcecode]

La tabella viene così svuotata. Voi non dovrete fare altro che loggarvi di nuovo nella amministrazione del vostro magento e reindicizzare le url delle categoria e prodotti:

Categorie
Blog

Aggiornamento prezzi dei prodotti in magento

  1. A quanti di voi sarà capitato di chiedersi: Come posso aggiornare i prezzi dei prodotti in modo che questi siano diversi da una store view all’altra?.

Molti clienti hanno la necessità di offrere un catalogo con prezzi personalizzati a seconda della lingua; questo può accadere perchè questi vogliono mantenere delle politiche di marketing al di fuori dell’italia o perchè vogliono fare in modo che il prezzo dei prodotti sia allineato a quello che viene fatto agli agenti per quel territorio così da non avere problematiche relative al fatto che nell’ecommerce i prezzi sono più bassi o alti.
Vi farò un esempio: il prodotto A viene venduto a 100 euro in tutta la comunità europea, mentre in america viene venduto in dollari ma con un sovrapprezzo di 10 euro; questo significa che il prezzo in dollari americani non è $ 141,8951 (come il cambio di 100 euro in dollari ci dice) ma bensi di $ 156,0846.

Chiaramente per prima cosa dovremo impostare il nostro magento in modo da avere due vetrine:

  • Vetrina italiana – lingua italian – valuta euro
  • Vetrina usa – lingua usa – valuta dollari

Non entrerò nel merito di come si può fare ad impostare lingue e valute, perchè la cosa è già stata affrontata in alcuni post precedenti, ma vi mostrerò come aggiorare i prezzi in modo che voi possiate applicare un prezzo custom ad una qualunque vetrina.

La tabella che andreamo ad aggiornare con una query SQL sarà la tabella catalog_product_entity_decimal perchè il prezzo viene salvato in questa. Prima di poter eseguire la query è però necessario andare a trovare l’ID dell’attributo prezzo.

Questo lo si fa accedendo al database del nostro magento (con un client mysql oppure con phpmyadmin) per cercare l’attributo con attribute_code uguale a  “price“:
[sourcecode language=”sql”]
select * from eav_attribute where attribute_code =’price’
[/sourcecode]

Con la precedente query abbiamo scoperto che il risulta è 64, ovvero che almeno in magento 1.4.2 il prezzo ha id (attribute_id) uguale a 64.
L’ultima cosa di cui abbiamo bisogno per poter effettuare l’aggiornamento è l’id dello store che lo andiamo a trovare nella tabella core_store con la query:
[sourcecode language=”sql”]
select * from core_store
[/sourcecode]

Se vogliamo aggiornare i prezzi per tutti gli store andremo a prendere lo store Admin (che ha store_id = 0) altrimenti scegliete quello che vi interessa e eseguite la seguente query di aggiornamento prezzi:

[sourcecode language=”sql”]
update `catalog_product_entity_decimal` prezzi, `catalog_product_entity` prodotti set prezzi.value= WHERE attribute_id =64 and store_id=0 and prezzi.entity_id=prodotti.entity_id
[/sourcecode]

Se poi volete aggiornare solamente alcuni prodotti identificati da un certo sku:
[sourcecode language=”sql”]
update `catalog_product_entity_decimal` prezzi, `catalog_product_entity` prodotti set prezzi.value= WHERE attribute_id =64 and store_id=0 and prezzi.entity_id=prodotti.entity_id and prodotti.sku=”
[/sourcecode]

 

Categorie
Blog

Traduzioni in Magento – Parte 3 – Tradurre una estensione

Ciao a tutti,
dopo avere visto come traddurre tradurre inline e come inserire i file di lingua (in formato csv) andiamo a vedere come sia possibile tradurre una estensione sviluppata in proprio.
Il prerequisito per fare in modo che una estensione possa essere tradotta è fare in modo che tutte le parole che intendiamo poi tradurre siano inserite nel nostro codice nel seguente formato:

[sourcecode language=”php”]
< ?php echo $this->__(‘parole da tradurre’) ?>
[/sourcecode]

dove i trattini bassi (underscores) stanno a significare la funzione per internazionalizzare le parole.

Dopo avere internazionalizzato la nostra estensione personalizzata andiamo a vedere come questa possa utilizzare il proprio file csv in cui inserire le traduzioni.

 

Apriamo il file di configurazione config.xml del nostro modulo che chiameremo “Traduzioni“:
[sourcecode language=”shell”]
app/code/local/Traduzioni/etc/config.xml
[/sourcecode]

Al suo interno troveremo la definizione del modulo attraverso il file Traduzioni.csv che si trova nella directory app/locale/it_IT (per l’italiano):
[sourcecode language=”xml”]
< ?xml version="1.0" encoding="utf-8"?>
<config>
<modules>
<traduzioni>
<version>1.0.0</version>
</traduzioni>
</modules>

<frontend>
<translate>
<modules>
<traduzioni>
<files>
<default>Traduzioni.csv</default>
</files>
</traduzioni>
</modules>
</translate>
</frontend>
<adminhtml>
<translate>
<modules>
<traduzioni>
<files>
<default>Traduzioni.csv</default>
</files>
</traduzioni>
</modules>
</translate>
</adminhtml>
</config>
[/sourcecode]

Quello che vi serve sarà poi tradurre il vostro modulo all’interno di tutte le cartelle app/locale/ inserendo un file Traduzioni.csv per ogni lingua.
Per rendere il modulo e le traduzioni attive andiamo sul file di configurazione app/etc/modules/Traduzioni.xml ed attiviamo il modulo impostando a true il campo active
[sourcecode language=”xml”]
< ?xml version="1.0"?>
<config>
<modules>
<traduzioni>
<active>true</active>
<codepool>local</codepool>
</traduzioni>
</modules>
</config>
[/sourcecode]

Buona traduzione a tutti!

Categorie
Blog

Traduzioni in magento – Parte 2 – Pacchetti di lingua

Ciao a tutti,

dopo avere imparato a tradurre magento attraverso le traduzioni inline, impareremo a tradurre il nostro ecommerce in tutte le lingue del mondo semplicemente aggiungendo al nostro ecommerce i file di lingua scaricabili su sito magentocommerce.com.

Quindi per prima cosa andate sul sito e scaricate la lingua che vi interessa dal seguente indirizzo http://www.magentocommerce.com/translations

Dopo avere cliccato sulla lingua scelta scaricate lo zip della lingua cliccando su download nella colonna package.

Scompattate lo zip e potrete vedere che al suo interno c’è una struttura a cartelle che parte da app. A questo punto copiate il contenuto dello zip sulla directory principale del vostro magento fino ad ottenere una struttura di lingua come nella immagine:

All’interno dello zip ci sono anche altri file di traduzione, che servono a tradurre il template, ma i files principali sono quelli all’interno della directory app/code/locale.

Tutti i files all’interno della cartella della lingua sono nel formato Mage_Modulo.csv e servono a tradurre i corrispettivi moduli.

Qua andranno tutte le traduzioni.

Quello che vi manda di fare adesso sono i seguenti passi:

 

 

 

  1. Andare nell’amministrazione del magento in System -> Configuration -> General
  2. Selezionare lo store view al quale volete associare la lingua
  3. Selezionare la lingue in Locale Options

Dopo avere salvato, appena entrerete nello store view prescelto tutte le parole all’interno del magento verranno tradotte con i file che avete appena uplodato.
 

Categorie
Blog

Traduzioni in magento – Parte 1 – Inline

Questo articolo vi mostrerà come tradurre Magento in tutte le lingue che volete semplicemente navigando nel sito e traducendo direttamente sul frontend tutte le parole non tradotte.
Questo metodo di traduzione prende il nome di Traduzione Inline.
Per abilitare le traduzioni inline è necessario seguire i seguenti passi:

  1. Andate su Sistem -> Configuration -> Developer
  2. Selezionate “Default store view” nel riquadro Current Configuration Scope
  3. Selezionate “Yes”  nel riquadro centrale translate inline – > Enabled for Frontend

Dopo averla abilitata andate sul frontend, scegliendo la lingue che vi interesa tradurre. Come potrete notare vedrete che passando il mouse sopra ad ogni stringa apparirà accanto l’icona di un libro; cliccando su questo libro si aprirà una finestra che vi permetterà di tradurre la stringa direttamente dal frontend.

Come potete vedere nell’immagine della traduzione inline:

Cliccando su submit la traduzione verrà inserita nella tabella:

[sourcecode language=”sql”]

core_translate

[/sourcecode]

Questa tabella conterrà tutte le parole tradotte inline. Come potete vedere dall’immagine precedente, c’è un checkbox che potete abilitare prima del submit; questo checkbox fa si che la traduzione valga per uno specifico store view. Il mio consiglio personale è di lasciare il checkbox a false, in modo che la traduzione valga per tutte le viste con una certa lingue. Nella immagine successiva potrete vedere uno screenshot fatto su phpmyadmin della tabella core_translate che dovrete salvare ed esportare per poterare da un magento all’altro le traduzioni.

Categorie
Blog

Cancellare gli ordini in magento

Per azzerare gli ordini prima di andare in produzione è possibile eseguire la seguente query per azzerare ordini, fatture, spedizioni e note di credito (senza cancellare i clienti).
Per magento 1.4.2 la seguente query è funzionante (si consiglia di fare un backup).
[sourcecode language=”sql”]
— TRUNCATE TABLES
TRUNCATE `sales_flat_order`;
TRUNCATE `sales_billing_agreement`;
TRUNCATE `sales_billing_agreement_order`;
TRUNCATE `sales_flat_order_status_history`;
TRUNCATE `sales_flat_order_payment`;
TRUNCATE `sales_flat_quote`;
TRUNCATE `sales_flat_quote_address`;
TRUNCATE `sales_flat_quote_address_item`;
TRUNCATE `sales_flat_quote_payment`;
TRUNCATE `sales_flat_quote_shipping_rate`;
TRUNCATE `sales_flat_shipment`;
TRUNCATE `sales_flat_shipment_comment`;
TRUNCATE `sales_flat_shipment_grid`;
TRUNCATE `sales_flat_shipment_item`;
TRUNCATE `sales_flat_shipment_track`;
TRUNCATE `sales_flat_quote_item`;
TRUNCATE `sales_flat_quote_item_option`;
TRUNCATE `sales_flat_order_grid`;
TRUNCATE `sales_flat_order_item`;
TRUNCATE `sales_flat_order_address`;
TRUNCATE `sales_flat_invoice`;
TRUNCATE `sales_flat_invoice_grid`;
TRUNCATE `sales_flat_invoice_item`;
TRUNCATE `sales_flat_invoice_comment`;
TRUNCATE `sales_invoiced_aggregated`;
TRUNCATE `sales_invoiced_aggregated_order`;
TRUNCATE `sales_order_aggregated_created`;
TRUNCATE `sales_order_tax`;
TRUNCATE `sales_flat_creditmemo`;
TRUNCATE `sales_flat_creditmemo_comment`;
TRUNCATE `sales_flat_creditmemo_grid`;
TRUNCATE `sales_flat_creditmemo_item`;
TRUNCATE `sales_payment_transaction`;
TRUNCATE `sales_recurring_profile`;
TRUNCATE `sales_recurring_profile_order`;
TRUNCATE `sales_refunded_aggregated`;
TRUNCATE `sales_refunded_aggregated_order`;
TRUNCATE `sales_shipping_aggregated`;
TRUNCATE `sales_shipping_aggregated_order`;
TRUNCATE `sales_bestsellers_aggregated_daily`;
TRUNCATE `sales_bestsellers_aggregated_monthly`;
TRUNCATE `sales_bestsellers_aggregated_yearly`;
TRUNCATE `sendfriend_log`;
TRUNCATE `tag`;
TRUNCATE `tag_relation`;
TRUNCATE `tag_summary`;
TRUNCATE `wishlist`;
TRUNCATE `log_quote`;
TRUNCATE `report_event`;

— RESET AUTOINCREMENT TO 1
ALTER TABLE `sales_flat_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_billing_agreement` AUTO_INCREMENT=1;
ALTER TABLE `sales_billing_agreement_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_status_history` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_address_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_payment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_shipping_rate` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_shipment_track` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_quote_item_option` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_order_address` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_invoice_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated` AUTO_INCREMENT=1;
ALTER TABLE `sales_invoiced_aggregated_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_aggregated_created` AUTO_INCREMENT=1;
ALTER TABLE `sales_order_tax` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_comment` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_grid` AUTO_INCREMENT=1;
ALTER TABLE `sales_flat_creditmemo_item` AUTO_INCREMENT=1;
ALTER TABLE `sales_payment_transaction` AUTO_INCREMENT=1;
ALTER TABLE `sales_recurring_profile` AUTO_INCREMENT=1;
ALTER TABLE `sales_recurring_profile_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_refunded_aggregated` AUTO_INCREMENT=1;
ALTER TABLE `sales_refunded_aggregated_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_shipping_aggregated` AUTO_INCREMENT=1;
ALTER TABLE `sales_shipping_aggregated_order` AUTO_INCREMENT=1;
ALTER TABLE `sales_bestsellers_aggregated_daily` AUTO_INCREMENT=1;
ALTER TABLE `sales_bestsellers_aggregated_monthly` AUTO_INCREMENT=1;
ALTER TABLE `sales_bestsellers_aggregated_yearly` AUTO_INCREMENT=1;
ALTER TABLE `sendfriend_log` AUTO_INCREMENT=1;
ALTER TABLE `tag` AUTO_INCREMENT=1;
ALTER TABLE `tag_relation` AUTO_INCREMENT=1;
ALTER TABLE `tag_summary` AUTO_INCREMENT=1;
ALTER TABLE `wishlist` AUTO_INCREMENT=1;
ALTER TABLE `log_quote` AUTO_INCREMENT=1;
ALTER TABLE `report_event` AUTO_INCREMENT=1;

— RESET STORE ID COUNTERS
TRUNCATE `eav_entity_store`;
ALTER TABLE `eav_entity_store` AUTO_INCREMENT=1;
[/sourcecode]

Per ulteriori dettagli potete seguire l’interminabile thread sul forum ufficiale di magento.

http://www.magentocommerce.com/boards/viewthread/1680/P405/

Categorie
Blog

Duplicare spese di spedizione a tasso fisso

Le spese di spedizione sono un rompicapo sia per i programmatori sia per gli esercenti che sono alla continua ricerca di un fornitore di spedizioni che sia adatti alle esigenze aziendali, sia economiche ma anche di flussi di lavoro.

E’ per questo che molte a volte, quando il mio cliente non ha ancora valutato accordi commerciali con spedizionieri, o è nuovo del settore degli ecommerce, io propongo, per semplificare la vita allo sviluppatore, alle pratiche amministrative ed al calcolo del denaro richiesto per le spedizioni due modalità di spedizioni:

  1. Spedizione ordinaria – tasso fisso con arrivo in n-giorni lavorativi (l’esempio del pacco ordinario di Poste Italiane che arriva in 5 giorni lavorativi al costo di 7 euro)
  2. Spedizione prioritaria – tasso fisso con arrivo in 1 giorno lavorativo dopo quello di consegna (questo è l’esempio del pacco celere 1 al costo di 12 euro)

Magento permette di impostare una spedizione a tasso fisso, chiamata “flat rate” che permette di impostare un prezzo per le spedizioni; questo è un caso assai semplice e viene usato per semplificare le modalità di spedizione. E’ chiaro che per poter applicare delle tariffe flat è necessario che i prodotti siano entro un certo range di peso e volume e che le spedizioni siano relegate dentro il territorio nazionale. Molte volte però questo metodo viene usato anche come semplificazione, facendo una media delle spese di spedizione sugli acquisti.

Altre volte è necessaio impostare 2 tipi di spedizioni flat e per questo è necesarrio duplicare le spedizioni flat rate di magento. Andremo adesso a mostrarvi come fare.

Come duplicare le spedizioni flat rate

La procedura è molto semplice e consiste in 4 passi. Chiameremo la nostra seconda modalità di spedizionie flatrate2

  1. Creare il file app/code/core/Mage/AdminHtml/Model/System/Config/Source/Shipping/Flatrate2.php con il seguente contenuto (ho duplicato il file Flatrate.php e sostituito Flatrate con Flatrate2, questa azione sarà fatta anche nei seguenti file creati da uno preesistente)
  2. [sourcecode language=”php”]
    class Mage_Adminhtml_Model_System_Config_Source_Shipping_Flatrate2
    {
    public function toOptionArray()
    {
    return array(
    array(‘value’=>”, ‘label’=> Mage::helper(‘adminhtml’)->__(‘None’)),
    array(‘value’=>’O’, ‘label’=>Mage::helper(‘adminhtml’)->__(‘Per Order’)),
    array(‘value’=>’I’, ‘label’=>Mage::helper(‘adminhtml’)->__(‘Per Item’)),
    );
    }
    }
    [/sourcecode]

  3. Creare il file app/code/core/Mage/AdminHtml/Model/System/Config/Source/Shipping/Flatrate2.php con il seguente contenuto (ho duplicato il file Flatrate.php e sostituito Flatrate con Flatrate2)
  4. [sourcecode language=”php”]
    class Mage_Shipping_Model_Carrier_Flatrate2
    extends Mage_Shipping_Model_Carrier_Abstract
    implements Mage_Shipping_Model_Carrier_Interface
    {

    protected $_code = ‘flatrate2’;
    protected $_isFixed = true;

    /**
    * Enter description here…
    *
    * @param Mage_Shipping_Model_Rate_Request $data
    * @return Mage_Shipping_Model_Rate_Result
    */
    public function collectRates(Mage_Shipping_Model_Rate_Request $request)
    {
    if (!$this->getConfigFlag(‘active’)) {
    return false;
    }

    $freeBoxes = 0;
    if ($request->getAllItems()) {
    foreach ($request->getAllItems() as $item) {

    if ($item->getProduct()->isVirtual() || $item->getParentItem()) {
    continue;
    }

    if ($item->getHasChildren() && $item->isShipSeparately()) {
    foreach ($item->getChildren() as $child) {
    if ($child->getFreeShipping() && !$child->getProduct()->isVirtual()) {
    $freeBoxes += $item->getQty() * $child->getQty();
    }
    }
    } elseif ($item->getFreeShipping()) {
    $freeBoxes += $item->getQty();
    }
    }
    }
    $this->setFreeBoxes($freeBoxes);

    $result = Mage::getModel(‘shipping/rate_result’);
    if ($this->getConfigData(‘type’) == ‘O’) { // per order
    $shippingPrice = $this->getConfigData(‘price’);
    } elseif ($this->getConfigData(‘type’) == ‘I’) { // per item
    $shippingPrice = ($request->getPackageQty() * $this->getConfigData(‘price’)) – ($this->getFreeBoxes() * $this->getConfigData(‘price’));
    } else {
    $shippingPrice = false;
    }

    $shippingPrice = $this->getFinalPriceWithHandlingFee($shippingPrice);

    if ($shippingPrice !== false) {
    $method = Mage::getModel(‘shipping/rate_result_method’);

    $method->setCarrier(‘flatrate2’);
    $method->setCarrierTitle($this->getConfigData(‘title’));

    $method->setMethod(‘flatrate2’);
    $method->setMethodTitle($this->getConfigData(‘name’));

    if ($request->getFreeShipping() === true || $request->getPackageQty() == $this->getFreeBoxes()) {
    $shippingPrice = ‘0.00’;
    }

    $method->setPrice($shippingPrice);
    $method->setCost($shippingPrice);

    $result->append($method);
    }

    return $result;
    }

    public function getAllowedMethods()
    {
    return array(‘flatrate2’=>$this->getConfigData(‘name’));
    }

    }
    [/sourcecode]

  5. Modificare il file app/code/core/Mage/Shipping/etc/System.xm aggiungendo il seguente codice subito dopo la chiusura del tag flatrate all’interno di (carriers/groups)
  6. [sourcecode language=”xml”]
    <flatrate2 translate="label">
    <label>Flat Rate</label>
    <frontend_type>text</frontend_type>
    <sort_order>2</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
    <fields>
    <active translate="label">
    <label>Enabled</label>
    <frontend_type>select</frontend_type>
    <source_model>adminhtml/system_config_source_yesno</source_model>
    <sort_order>1</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
    </active>
    <name translate="label">
    <label>Method Name</label>
    <frontend_type>text</frontend_type>
    <sort_order>3</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
    </name>
    <price translate="label">
    <label>Price</label>
    <frontend_type>text</frontend_type>
    <sort_order>5</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
    </price>
    <handling_type translate="label">
    <label>Calculate Handling Fee</label>
    <frontend_type>select</frontend_type>
    <source_model>shipping/source_handlingType</source_model>
    <sort_order>7</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
    </handling_type>
    <handling_fee translate="label">
    <label>Handling Fee</label>
    <frontend_type>text</frontend_type>
    <sort_order>8</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
    </handling_fee>
    <sort_order translate="label">
    <label>Sort Order</label>
    <frontend_type>text</frontend_type>
    <sort_order>100</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
    </sort_order>
    <title translate="label">
    <label>Title</label>
    <frontend_type>text</frontend_type>
    <sort_order>2</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
    </title>
    <type translate="label">
    <label>Type</label>
    <frontend_type>select</frontend_type>
    <source_model>adminhtml/system_config_source_shipping_flatrate2</source_model>
    <sort_order>4</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
    </type>
    <sallowspecific translate="label">
    <label>Ship to Applicable Countries</label>
    <frontend_type>select</frontend_type>
    <sort_order>90</sort_order>
    <frontend_class>shipping-applicable-country</frontend_class>
    <source_model>adminhtml/system_config_source_shipping_allspecificcountries</source_model>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
    </sallowspecific>
    <specificcountry translate="label">
    <label>Ship to Specific Countries</label>
    <frontend_type>multiselect</frontend_type>
    <sort_order>91</sort_order>
    <source_model>adminhtml/system_config_source_country</source_model>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
    <can_be_empty>1</can_be_empty>
    </specificcountry>
    <showmethod translate="label">
    <label>Show Method if Not Applicable</label>
    <frontend_type>select</frontend_type>
    <sort_order>92</sort_order>
    <source_model>adminhtml/system_config_source_yesno</source_model>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>0</show_in_store>
    </showmethod>
    <specificerrmsg translate="label">
    <label>Displayed Error Message</label>
    <frontend_type>textarea</frontend_type>
    <sort_order>80</sort_order>
    <show_in_default>1</show_in_default>
    <show_in_website>1</show_in_website>
    <show_in_store>1</show_in_store>
    </specificerrmsg>
    </fields>
    </flatrate2>
    [/sourcecode]

  7. Modificare il file xml file app/code/core/Mage/Shipping/etc/config.xml aggiungendo il seguente codice all’interno di default/carriers subito dopo la definizione di flatrate:
  8. [sourcecode language=”xml”]
    <flatrate2>
    <active>1</active>
    <sallowspecific>0</sallowspecific>
    <model>shipping/carrier_flatrate2</model>
    <name>Fixed</name>
    <price>5.00</price>
    <title>Flat Rate 2</title>
    <type>I</type>
    <specificerrmsg>This shipping method is currently unavailable. If you would like to ship using this shipping method, please contact us.</specificerrmsg>
    <handling_type>F</handling_type>
    </flatrate2>
    [/sourcecode]

Cancellate la cache, andate in sistem->configuration->shipping methods e trovere due spedizioni flat rate che potrete configurare come spedizione ordinaria e prioritaria.

Categorie
Blog

Carta di credito con Verified by Visa

Tutti coloro che acquistano online avranno potuto notare che da un anno circa è attivo sui sistemi di pagamento del circuito visa il nuovo sistema di sicurezza chiamato Verified By Visa.

Quando si parla di sicurezza, e in particolare di aumentare la sicurezza tutti ci troviamo d’accordo, ma dobbiamo stare attenti al fatto che a volte dietro una aumento della sicurezza non si possa nascondere qualcosa di diverso, tipo un doppio fine quale un profitto sull’ignoranza.

Tutte quelle che sto per scrivere non sono certezze, ma sensazioni di un professionista che lavora con clienti che vogliono vendere prodotti online e che si trova a lavorare con sistemi di pagamento disparati.

Ma in cosa consiste il sistema “Verified by visa”?

Al titolare di una carta che sottoscrive il verified by visa (pagando un quantità maggiore di denaro) viene richiesta una password di verifica ad ogni acquisto che effettua online con questa (quando l’esercente ha stipulato anche lui l’accordo; ad esempio banca sella con gestpay e banca unicredit con pagonline sono compatibili con il verified by visa, mentre paypal no).
Dopo avere inserito il numero di carta di credito il cliente viene rediretto in una pagina nella quale inserisce la sua password stabilita nel contratto verified by visa. Se la password è valida l’acquisto va a buon fine.

Questa può sembra una cosa ottima, in quanto aumenta la sicurezza e protegge i titolari di carta da frodi causate dalla perdita della carta, ma non è tutto bello come lo si fa sembrare.  Farò un elenco dei vantaggi e degli svantaggi che questo verified by visa sta portando.

Vantaggi

  • i possessori di carta si sentono più sicuri
  • frodi ridotte; per rubare la carta di credito si deve rubare anche la password

Svantaggi

  • Non tutti i sistemi di pagamento chiedono la password del verified by visa, ad esempio paypal non la chiede (penso perchè non sia convenzionato)
  • Molte carte di credito abilitano il verified by visa in automatico ma la password o non arriva o deve essere generata, capita quindi che l’utente sia redirezionato all’inserimento della password e non sappia cosa fare.
  • Gli acquisti ultimati ed andati a buon fine sonodiminuiti perchè le password vengono smarrite con facilità e la procedura di recupero è difficoltosa
  • Il costo è maggiore, pernsare che banca sella chiede circa il doppio fra attivazione e costo gestione annuale

Concludendo, voglio dire che se da un lato la sicurezza è maggiore per il cliente, gli acquisti sono “certi” per gli esercenti perchè i titolari di carta possono difficilmente contestare un acquisto con il sistema verified by visa e la percezione di sicurezza globale è migliorata, guardando le statistiche si può notare che le vendite sono diminuite, poichè questo procedimento causa molti pagamenti non portati a termine a causa delle smarrimento o non conoscenza della propria password.

Per quello che ne so, se fossi un esercente non attiverei il verified by visa, ma questa è solo la mia opinione 😉

Per informazioni potete andare sul sito di visa:

http://www.visaitalia.com/it/stampa__media/note_informative/verified_by_visa__febbraio_20.aspx

Categorie
Blog

Come controllare se un modulo è attivo?

Ciao,
questo è il primo di alcuni post veloci e sintetici nel quale do una soluzione a dei problematiche tecniche.

Tutti sappiamo che per attivare o disattivare un proprio modulo basta andare nella directory
[sourcecode language=”bash”]
app/etc/modules
[/sourcecode]

aprire trovare il proprio modulo chiamato Nome_Modulo.xml e impostare il tag a true o false come nel seguente caso:

[sourcecode language=”xml”]
<config>
<modules>
<Nome_Modulo>
<active>true</active>
<codePool>local</codePool>
</Nome_Modulo>
</modules>
</config>
[/sourcecode]

Quando si attiva un modulo vengono richiamati tutti i file delle cartelle del modulo ed in caso sovrascritti i file di core.
Ma se volessimo in un template utilizzare del codice solamente in base allo stato attivo o inattivo di un modulo?
Basta utilizzare la seguente porzione di codice:

[sourcecode language=”php”]
if(Mage::getConfig()->getModuleConfig(‘Nome_Modulo’)->is(‘active’, ‘true’)){
//codice eseguito nel caso di modulo attivo
}else{
//codice eseguito nel caso di modulo non attivo
}
[/sourcecode]
Ciao! Alla prossima