martedì 2 settembre 2014

Verificare in Magento se un modulo è installato e attivo

Come verificare su Magento la presenza di un modulo?

In alcuni casi può essere utile, su Magento, controllare se è stato installato oppure no un modulo.

Ad esempio potrebbe essere utile far comportare il proprio tema in un modo o in un altro nel caso sia installato un modulo.

Immaginate di avere installato un modulo aggiuntivo che sostituisce il checkout, ma quando viene aggiunto un prodotto al carrello, il redirect di default rimanda l'utente al checkout normale.

Naturalmente potreste modificare il comportamente del tasto ADDTOCART, ma potrebbero esserci in giro dei link che avete creato in precedenza. Con questo codice è possibile intercettare l'installazione del modulo Magestore_onestepcheckout e redirezionare l'utente alla giusta pagina.

Il codice da usare a questo scopo è questo:

$modules = Mage::getConfig()->getNode('modules')->children();
$modulesArray = (array)$modules;

if(isset($modulesArray['Magestore_onestepcheckout '])) {
    $url=$this->getCheckoutUrl();
    Mage::app()->getFrontController()->getResponse()->setRedirect($url);

}   
Oppure:
if( $modules->Magestore_Onestepcheckout->active==true ) {
    $url=$this->getCheckoutUrl();
    Mage::app()->getFrontController()->getResponse()->setRedirect($url);
}   
Sostanzialmente la stessa cosa.

Verifica del modulo installato attraverso il framework di Magento

In realtà è anche disponibile una soluzione migliore, usando però il metodo isModuleEnabled dell'helper della classe Mage:

Mage::helper('core')->isModuleEnabled('Magestore_onestepcheckout ');

In questo questo post di Stackoverflow potete trovare ulteriori alternative:

http://stackoverflow.com/questions/4307407/magento-checking-if-a-module-is-installed


lunedì 1 settembre 2014

Cosa fare se avete gli indici bloccati su Magento

Come sbloccare gli indici su Magento

Cosa fare se in un sito Magento quando ricostruite gli indici non vanno in stato PRONTO?

Le cause possono essere varie, in generale il timeout dello script causato da tempi di elaborazione troppo lunghi. Questo problema a sua volta può essere causato da risorse insufficienti nel momento in cui viene effettuata l'operazione, specie se nel sito ci sono molti prodotti.

Nel caso in cui il le risorse del server su cui è pubblicato il vostro sito siano sufficienti per l'ordinaria amministrazione potrebbe succedere abbastanza raramente, ma nel caso in cui l'operazione venga eseguita in contemporanea con un'altra che sta già impegnando una quantità importante di risorse gli indici potrebbero restare bloccati in fase di elaborazione come nella seguente schermata:


A questo punto nel momento in cui tentiate di ricostruirli nuovamente l'operazione potrebbe non andare a buon fine a causa del fatto che una parte degli indici resta BLOCCATA.

Sbloccare gli indici di Magento

A parte aumentare i tempi di timeout di PHP nel php.ini, una soluzione manuale potrebbe essere la seguente procedura:

1) cancellate gli indici svuotando la cartella /var/locks (solo il contenuto, non cancellate la cartella);
2) andate database e cercate la tabella index_process, modificate quindi i valori del campo status in che non sono pending in stato pending
3) a questo punto ricostruite nuovamente gli indici

Ricostruire gli indici del database di Magento da riga di comando

Se il problema non è risolto potete tentare di ricostruire gli indici dala riga di comando (dovete però avere accesso al terminale).

Per avviare l'operazione potete andare nella cartella /shell del sito web, troverete un file indexer.php che può essere eseguito da riga di comando tramite la classe Mage_Shell_Compiler.

Il file shell/indexer.php accetta come argomento il nome dell'indice. Potete scegliere di ricostruire un indice alla volta oppure tutti gli 8 indici insieme. Naturalmente se avete risorse abbondanti potete scegliere la seconda ipotesi, ma in questo caso non dovreste essere arrivati a questo articolo!

Quindi per risparmiare risorse e rendere il procedimento di ricostruzione più veloce e meno accidentato vi consiglio di ricostruirne uno alla volta tramite questa istruzione:
php -f indexer.php -- -reindex catalog_url
I nomi degli indici sono quelli che trovate nel campo index_process.indexer_code.

Oppure potete scegliere di ricostruire tutto, in questo modo:
php -f indexer.php -- -reindexall
Per ogni indice ricostruito riceverete un messaggio di conferma.



L'elenco completo


Approfondimenti

Per un ulteriore approfondimento potete andare su questo link http://inchoo.net/ecommerce/magento/executing-magento-indexer-from-shell/