Magento presenta al suo interno la funzionalità per installare automaticamente i moduli aggiuntivi per il vostro negozio online. Sostanzialmente, tutto quello di cui avete bisogno è l'extension code dopo di che lo script installerà l'estensione in pochi click. Con questo tutorial mostreremo nel dettaglio come installare moduli ed estensioni aggiuntivi di Magento attraverso Magento Connect. Inoltre, vi forniremo le instruzioni per aggiornare i moduli e le estensioni di Magento già esistenti.
Prima di tutto dovete accedere all'area di amministrazione di Magento. Successivamente andate a Sistema > Magento Connect > Magento Connect Manager
Magento Connect Manager si aprirà in una nuova pagina, dove vi verranno richieste nuovamente le credenziali di accesso. Userete la stessa username e password che avete utilizzato per accedere alla backend
Dopo aver effettuato l'accesso, vi troverete davanti due sezioni: Extensions e Settings. Si raccomanda, per prima cosa, di verificare le opzioni scelte nella sezione Settings
Recentemente abbiamo installato la versione 1.4.1.1 di Magento in una sottodirectory e abbiamo ottenuto l'errore che segue:
“Fatal error: Call to a member function toHtml() on a non-object in /var/www/vhosts/xxx/httpdocs/shop/app/code/core/Mage/Core/Model/Layout.php on line 529"
La causa principale di questo errore è molto semplice ed è qualcosa di molto simile ad un bug. Non c'è bisogno di andare nel file php in questione, non c'è nulla da modificare lì.
Nelle nuove versioni di Magento è stato cambiato il modo in cui childHtml e quindi i blocchi vengono richiamati. Essi richiedono un nome. Quando viene installato, Magento usa il tema default/default.
Ed ecco dove viene fuori l'errore.
Nel vostro file default/default/layout/page.xml troverete una riga (probabilmente la 91) che appare così:
<block type=”core/profiler” output=”toHtml” />
In reatà dovrebbe essere così:
<block type=”core/profiler” output=”toHtml” name=”core_profiler” />
Con l'aggiunta del nome dell'attributo, tutto funziona bene. Dopo la modifica, pulite la cache e vedrete che la vostra nuova installazione di Magento funzionerà alla perfezione
Recentemente ci siamo imbattuti in un problema con un nostro cliente, il quale ha creato meticolosamente ogni attributo possibile per ognuno dei suoi prodotti. Il risultato è stato un ecommerce molto userfriendly ma, di contralto, un flat catalougue non funzionante!
L'errore che potreste incontrare in Magento è molto vago: "Can't initialize indexer process"
In MySql, ogni tabella ha un limite di 65535 bites per quanto riguarda la lunghezza di ogni riga; quando si inseriscono una moltitudine di attributi (nello specifico dropdown/selezioni multiple/testo/immagine), c'è un limite di 255 caratteri. A partire dalla versione 1.3 di Magento i prodotti inseriti nel catalogo con la modalità "flat" soffrono di queste limitazioni, in base al numero e alla combinazione di attributi di prodotto che partecipano all'indicizzazione del prodotto flat.
A seconda di cosa i nostri clienti vogliono fare, sarebbe utile avere un estensione per bypassare questo problema e permettere di modificare i parametri di SQL, con il risultato di abbattere il limite di 85 campi di testo/selezione multipla/immagini.
Una veloce soluzione (ma non necessariamente quella perfetta) consiste nell'intaccare (o meglio estendere) alcune funzionalità core e sovrascriverle.
In Mage_Catalog_Model_Resource_Eav_Mysql4_Product_Flat_Indexer
# ~530
if (!$this->_isFlatTableExists($store)) {
$sql = "CREATE TABLE {$tableNameQuote} (\n";
foreach ($columns as $field => $fieldProp) {
+ if
Scenario:
Hai creato un modulo personalizzato, hai inserito alcuni dati nel tuo database e hai bisogno di mostrarli random, in maniera casuale.
Soluzione:
La funzione rand() in MySQL serve ad andare a prendere i dati in maniera casuale. All'interno di Magento, si possono selezionare le righe da mostrare in maniera random dalla tabella MySQL utilizzando Zend_Db_Expr(‘RAND()’).
Per fare ciò devi creare una nuova funzione nella classe del tuo modulo (NomedelloSpazio/NomeModulo/Model/Mysql4/NomeModulo/Collection.php)
public function setRandomOrder()
{
$this->getSelect()->order(new Zend_Db_Expr('RAND()'));
return $this;
}
Ora puoi andare a prendere i dati dalla tabella in maniera random utilizzando la funzione setRandomOrder appena creata. Il codice che segue può essere inserito in un blocco o nel file template del tuo modulo (.phtml)
Nel mio articolo precedente, vi avevo parlato di come cambiare il simbolo della valuta attraverso alcune piccole modifiche sul file Zend (lib/Zend/Locale/Data/en.xml).
Rimane il metodo più semplice ma, l'effetto collaterale maggiore che si ha con questo metodo è che tutto scompare ad ogni aggiornamento di Magento.
Allora, il metodo migliore consiste nel sovrascrivere le classi dei modelli di Magento che sono responsabili del cambiamento del simbolo della valuta.
Scenario
Avete bisogno di cambiare il simbolo della valuta delle Rupie Nepalesi (da Nrs a Rs). Il simbolo standard delle Rupie Nepalesi è Nrs.
Soluzione
Create un nuovo modulo e sovrascrivete due classi di modello
1) Mage_Core_Model_Locale_Currency
2) Mage_Core_Model_Locale
Il file Config del mio modulo
(MyNamespace/MyModule/etc/config.xml)
MyNamespace_MyModule_Model_Locale_Currency Classe del mio modulo
(MyNamespace/MyModule/Model/Locale/Currency.php)
In questa classe ho modificato il simbolo della valuta da Nrs a Rs
class MyNamespace_MyModule_Model_Locale_Currency extends Mage_Core_Model_Locale_Currency
{
/**
* Creates a currency instance. Every supressed parameter is used from the actual or the given locale.
*
* @param string $currency OPTIONAL currency short name
* @param string|Zend_Locale $locale OPTIONAL locale name
* @throws Zend_Currency_Exception When currency
Dopo quello che sembrava essere stato un aggiornamento perferttamento riuscito da Magento 1.3.4.2 a Magento 1.4.1.0, eseguito atttraverso la command line, mi era impossibile accedere all'area log in. Invece della classica interfaccia per inserire le credenziali di accesso, visualizzavo il seguente errore:
Questo lungo messaggio comunicava che la versione di Zend distribuita con la versione 1.4.1.0 di Magento non necessita della directory app/code/core/Zend/Cache. Inizialmente l'ho rinominata in Cache.orig. Poi, dopo aver visto che in questo modo l'errore era risolto, l'ho cancellata completamente.
Spero vi sia d'aiuto.
Fonte: Screencastworld.com
Il prodotto configurabile è quel particolare tipo di prodotto cui si possono associare altri prodotti.
Con il codice che segue si possono individuare tutti i prodotti che sono stati associati ad un dato prodotto configurabile.
Ecco il Codice:
/**
* Load product by product id
*/
$product = Mage::getModel('catalog/product')
->load(YOUR_PRODUCT_ID);
/**
* Get child products id (only ids)
$childIds = Mage::getModel('catalog/product_type_configurable')
->getChildrenIds($product->getId());
/**
* Get children products (all associated children products data)
*/
$childProducts = Mage::getModel('catalog/product_type_configurable')
->getUsedProducts(null,$product);
Qualche mese fa, vi abbiamo mostrato come aggiungere il captcha alla form di contatto sul vostro negozio Magento, installando un estensione
Oggi, invece, mostreremo come aggiungere il recaptcha a qualunque pagina del vostro Magento, utilizzando il codice.
Per aggiungere il Recaptcha è sufficiente aggiungere il codice che segue nel posto in cui desiderate farlo comparire.
require_once ‘lib/recaptcha/recaptchalib.php’;
$publickey = “xxxxxxxxxxxxxxxxxxxxxxxxxxx’”; // la key si ottiene dalla pagina di iscrizione
# the response from reCAPTCHA
$resp = null;
# the error code from reCAPTCHA, if any
$error = null;
echo recaptcha_get_html($publickey, $error);
———————————————
app/code/core/Mage/Customer/controllers/AccountController.php
Go to createPostAction function
if ($this->getRequest()->isPost()) {
$errors = array();
—————————————————-
/***** start code for recaptcha ***/
require_once ‘lib/recaptcha/recaptchalib.php’;
$privatekey = ‘xxxxxxxxxxxxxxxxxxxxxxxxxxx’;
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$this->getRequest()->getParam(‘recaptcha_challenge_field’),
$this->getRequest()->getParam(‘recaptcha_response_field’));
if ($resp->is_valid) {
// take no action
} else {
# set the error code so that we can display it
$errors[] = $resp->error;
}
/*** end of recaptcha option ****/
——————————————————————-
if (!$customer = Mage::registry(’current_customer’)) {
$customer = Mage::getModel(’customer/customer’)->setId(null);
}
Provatelo!
Magento è la piattaforma per l'ecommerce più potente in circolazione, in quanto copre egregiamente tutte le funzioni necessarie per un efficace negozio online. Tuttavia, essendo un progetto open source, alcune funzioni non sono ancora state sviluppate. Tra le funzioni che sono presenti nella roadmap, c'è anche l'implementazione di un comando che permetta di cambiareare l'ordine di default dei prodotti.
Nell'attesa che anche questo particolare venga sistemato, se volete modificare il criterio con cui vengono ordinati di default i prodotti, potete utilizzare questa semplice soluzione.
Cercate il file toolbar.php all'interno di app/code/core/Mage/Catalog/Block/Product/ListCreate la cartella in Locale
Create la stessa struttura di cartelle in locale. In questo modo tutti gli aggiornamenti che farete non avranno alcun effetto sulle vostre modifiche.
La struttura dovrebbe essere così:
/app/code/local/Mage/Catalog/Block/Product/ListModificate la Toolbar
adesso bisogna modificare una riga. Trovate la riga seguente
Come per qualunque altro sito, anche nei siti di ecommerce fatti con Magento è fondamentale avere delle ottime landing page.
La landing page è la pagina web su cui "atterrano" i visitatore del vostro sito, di solito dopo aver cliccato su un link o su un banner. E' il primo punto di contatto tra voi e i vostri visitatori, quindi è fondamentale che sia costruita per bene e che abbia un buon design.
Questo video (in inglese), mostra con molta precisione come creare al meglio una landing page:
Landing Pages from dan iavorszky on Vimeo.