Posting in the Magento forums has been disabled pending the implementation of a new and improved forum solution which should better serve the community.

For new questions please post at magento.stackexchange.com, the community-run support site for the Magento community. We will be providing updates on the new forum solution soon. For questions or concerns please email community@magento.com.

Magento Forum

Page 1 of 3
TROVAPREZZI - export catalogo automatico
 
heelux
Jr. Member
 
Avatar
Total Posts:  13
Joined:  2008-07-06
Bologna, Italy
 

Adattamento da un altro post per una procedura automatica di export del catalogo per Trovaprezzi / Shoppydoo testasto su 1.1.6
Se lo provate su 1.2.0.2 fate sapere se funziona e/o modifiche necessarie.

* Codice per export di tutti i prodotti trovaprezzi.php, va messo nella documentroot di magento. Nella stessa directory create una subdirectory temp con diritti 777.

* Eseguite l’export con il comando
1) curl http://vostronomesito/trovaprezzi.php

Note:
1. Dovete avere gli attributi “manufacturer” e “sku_orig” (per il codice di prodotto originale del produttore) da valorizzare per ogni prodotto
2. Il codice estrae la sottocategoria in cui si trova il prodotto, per cui deve essere abbastanza significativa per poter essere allocata nella gerarchia giusta di Trovaprezzi. In alternativa potete aggiungere un attributo categoriatp per ogni prodotto e definire la gerarchia di categorie così come definite da Trovaprezzi, per esempio Informatica,Computer,Notebook ogni voce separata da virgola, chiaramente da valorizzare per ogni prodotto....
In questo caso commentate il codice tra --->START e --->STOP e scommentate la riga
//$product_data[’categoria’]=$product->getResource()->getAttribute(’categoriatp’)->getFrontend()->getValue($product);

3. Infine per la descrizione ho usato il campo meta keyword. Se avete un campo descrizione pulito (senza tag html) potete commentare
$product_data[’description’]=$product->getMetaKeyword();
e scommentare
//$product_data[’description’]=strip_tags($product->getDescription());
x trovaprezzi deve essere al max di 255 char.

<?php
    define
('SAVE_FEED_LOCATION','temp/pretrovaprezzi.txt');//you can set a new folder and file if you want, don't forget to chmod the folder to 777

    // make sure we don't time out
    
set_time_limit(0);    

    require_once 
'app/Mage.php';
        
Mage::app('default');
        
    
try{
        $handle 
fopen(SAVE_FEED_LOCATION'w');

        
        
$heading = array('prodotto','marca','descrizione','prezzo','sku','link','disponibilita','categoria','image url','spese spediione','codice produttore');
        
$feed_line=implode("\t"$heading)."\r\n";
        
fwrite($handle$feed_line);
        
        
//---------------------- GET THE PRODUCTS    
        
$products Mage::getModel('catalog/product')->getCollection();
        
$products->addAttributeToFilter('status'1);//enabled
        
$products->addAttributeToFilter('visibility'4);//catalog, search
        
$products->addAttributeToSelect('*');
        
$prodIds=$products->getAllIds();
        
        
//echo 'Product filter: '.memory_get_usage(false).'<br>';
        //flush();
        
        
$product Mage::getModel('catalog/product');
        
        foreach(
$prodIds as $productId{
            
//echo '. ';
            //flush();
            //echo 'Loop start: '.memory_get_usage(false).'<br>';
            //flush();
    
            //$product = Mage::getModel('catalog/product');
            
$product->load($productId);
            
            
$product_data = array();    
            
$product_data['name']=$product->getName();
                    
$product_data['brand']=$product->getResource()->getAttribute('manufacturer')->getFrontend()->getValue($product);
            
$product_data['description']=$product->getMetaKeyword();
            
//$product_data['description']=strip_tags($product->getDescription());
            
$product_data['price']=$product->getPrice();
            
$product_data['sku']=$product->getSku();    
            
$product_data['link']=$product->getProductUrl();
            
$product_data['isinstock']=$product->getStockItem()->getIsInStock();
                    
// get trovaprezzi category
            //$product_data['categoria']=$product->getResource()->getAttribute('categoriatp')->getFrontend()->getValue($product);    
            //get magento category                    
                    //  --->START
                    
$product_data['product_type''';  
                    foreach(
$product->getCategoryIds() as $_categoryId){
            $category 
Mage::getModel('catalog/category')->load($_categoryId);
            
$product_data['product_type'].=$category->getName().', ';
            
}
            $product_data[
'product_type']=rtrim($product_data['product_type'],', ');        
                    
//  --->STOP
            
$product_data['image_link']=Mage::getBaseUrl(Mage_Core_Model_Store::URL_TYPE_MEDIA).'catalog/product'.$product->getImage();
            
$product_data['shippingcost']=$product->getSpesespedizionetp();
            
$product_data['codice produttore']=$product->getSkuOrig();
          
            
//echo 'Product load: '.memory_get_usage(false).'<br>';
            //flush();        
          

            //echo 'Category load: '.(memory_get_usage(false)).'<br>';            
            
            //sanitize data    
            
foreach($product_data as $k=>$val){
            $bad
=array('"',"\r\n","\n","\r","\t");
            
$good=array(""," "," "," ","");
            
$product_data[$k] '"'.str_replace($bad,$good,$val).'"';
            
}
            

            $feed_line 
implode("\t"$product_data)."\r\n";
            
fwrite($handle$feed_line);
            
fflush($handle);
            
            
//echo 'Loop end: '.memory_get_usage(false).'<br>';
            //flush();
        
}

        
//---------------------- WRITE THE FEED    
        
fclose($handle);
        
    
}
    
catch(Exception $e){
        
die($e->getMessage());
    
}

POSTPROCESSING

Il seguente script perl adatta l’export al formato Trovaprezzi post-trovap.pl

#!/usr/bin/perl

my $inumLine=0;
my @fields;
my $field;
my @price;

while (<>)  
{
    
if ($numLine++) {
       
@fields=split /\t/, $_;
           
#rimuovi gli apici da tutti i campi
       
s/\"//g foreach (@fields);
       # modifica il prezzo fomato xxxx.dd
           @price=split /\./,
$fields[3];
           substr(
$price[1],2) = "";
       
$fields[3]=join(".", @price);
           # campo spese di spedizione non disponibile
           
$fields[9] = "-1";
           # aggiungi <endrecord> all fine dell'ultimo campo
           chomp(
$fields[10]);
           
$fields[10] =~ tr/\cM//d;
           
$fields[10]=$fields[10]."<endrecord>";
           # converto campo 6 - disponibilità
           if ( 
$fields[6] == 1 ) {
               
$fields[6]="disponibile";
           }
           else {
               
$fields[6]="non disponibile";
           }
       #stampa
         print join("
\|", (@fields)[0,1,2,3,4,5,6,7,8,9,10]),"\n";
    }
    else {
           #print;
    }
}

Da lanciare con il comando

2) cat temp/pretrovaprezzi.txt | post-trovap.pl > trovaprezzi.txt

Inserite i 2 due comandi 1) e 2) in uno script generatrovaprezzi da lanciare con cron per esempio:

20 0 * * * /vostropathmagento/generatrovaprezzi

eseguito ogni giorno alle 00:20

 
Magento Community Magento Community
Magento Community
Magento Community
 
patrecord
Guru
 
Avatar
Total Posts:  461
Joined:  2008-06-01
 

Per prima cosa grazie per aver condiviso il codice:)

Ho fatto una prova in locale dove ho solo due prodotti in croce.....noto una cosa che non mi convince.

Il link assoluto al prodotto è in questo formato: http://localhost:8888/magento12/trovaprezzi.php/kit-ricamo.html
In pratica c’è quel trovaprezzi.php che non c’entra una ciufola.

Inoltre...non ho ancora guardato il codice.....si può utilizzare il campo descrizione invece che meta description? Inoltre se il campo fornitore è vuoto si può lasciare il valore vuoto anzichè mettere NO

Grazie

 
Magento Community Magento Community
Magento Community
Magento Community
 
patrecord
Guru
 
Avatar
Total Posts:  461
Joined:  2008-06-01
 

Dimenticavo....come si comporta lo script con i prodotti configurabili? Esporta sia l’articolo padre che le varianti?

 
Magento Community Magento Community
Magento Community
Magento Community
 
heelux
Jr. Member
 
Avatar
Total Posts:  13
Joined:  2008-07-06
Bologna, Italy
 

Per il primo problema non saprei, mi viene da chiederti se l’hai provato su una versione diversa da 1.1.6, ma direi di si, adesso vedo magento12 nel path.... nel mio caso i path sono corretti.

Potresti provare a sostituire la linea di codice:

$product_data['link']=$product->getProductUrl();

con

$product_data['link']=$product->getUrlKey();

che ritorna solo la url key senza path e senza .html finale e aggiustare il tutto nel post processing, aggiungendo nello script perl, per il tuo caso

$fields[5]="http://localhost:8888/magento12/".$fields[5].".html";

Per le altre due domande:

1) si, puoi usare il campo descrizione, nel codice c’e’ una linea commentata

//$product_data['description']=strip_tags($product->getDescription());

e rimuovi quella relativa ai meta keywords

$product_data['description']=$product->getMetaKeyword();

tieni solo presente il limite massimo di 255 caratteri imposto da trovaprezzi.

2) trovaprezzi non richiede il campo Marca (Fornitore) obbligatoriamente per cui lo puoi lasciare vuoto, comunque per essere sicuro devi chiedere a loro

 
Magento Community Magento Community
Magento Community
Magento Community
 
patrecord
Guru
 
Avatar
Total Posts:  461
Joined:  2008-06-01
 

sì...sto provando con la 1.2.0.1

una cosa...questo

$fields[5]="http://localhost:8888/magento12/”.$fields[5].".html";

non si può integrare direttamente qui:

$product_data[’link’]=$product->getUrlKey();

Non avendo un VPS non posso applicare la procedura alla lettera:)

Inoltre riguardo a questo avete info?

Dimenticavo....come si comporta lo script con i prodotti configurabili? Esporta sia l’articolo padre che le varianti?

Sarebbe utile eliminare gli articoli “figli” in quanto NON hanno categoria nè immagini;)

 
Magento Community Magento Community
Magento Community
Magento Community
 
heelux
Jr. Member
 
Avatar
Total Posts:  13
Joined:  2008-07-06
Bologna, Italy
 

Si, puoi sostituire con

$product_data[’link’]='http://localhost:8888/magento12/'.$product->getUrlKey().'.html';

Per i configurabili, mi dispiace ma non ho info.

 
Magento Community Magento Community
Magento Community
Magento Community
 
Stefy
Member
 
Avatar
Total Posts:  36
Joined:  2009-03-30
 

Ciao,
sto impazzendo :(

come faccio a lanciare

cat temp/pretrovaprezzi.txt | post-trovap.pl > trovaprezzi.txt

Mi aiuti please?
Grazie

 
Magento Community Magento Community
Magento Community
Magento Community
 
alexbn
Sr. Member
 
Avatar
Total Posts:  167
Joined:  2009-04-22
Milano
 

UHmmmm,
lo script perl non ha una vera utilità! Domattina vi posto una mia versione modificata dello script PHP che non necessita d’altro per elaborare il file trovaprezzi. Purtroppo non ho molto tempo per perfezionarlo anche per le opzioni e i configurabili… tra qualche settimana forse.

Ale

 
Magento Community Magento Community
Magento Community
Magento Community
 
alexbn
Sr. Member
 
Avatar
Total Posts:  167
Joined:  2009-04-22
Milano
 

Ecco quì come promesso.
Lo script va messo sotto una cartella “scripts” creata nella root di magento cioè per es. http://www.miosito/magento/scripts.

Lo script scrive un file e contemporaneamente fa l’echo sul browser di ciò che estrae. Attualmente trovaprezzi sul mio sito non preleva il file ma esegue direttamente lo script da remoto catturando l’output, motivo per cui ho aggiunto l’echo.
Ho rimosso la riga di intestazione perchè con l’echo non è necessaria e quindi anche sul file non c’è… spero non serva altrimenti va decommentata la riga dell’intestazione e va messa a posto perchè le colonne sono tutte sbagliate.

Bisogna creare una cartella “temp” sempre sotto la root di magento con permessi 777 perchè è lì che viene creato il file..

IMPORTANTE: Non ho ancora avuto modo di provare il file estratto con questo scripts mandandolo a trovaprezzi perchè l’ho eseguito sul mio negozio di TEST ad ogni modo l’ho confrontato con quello che ho attualmente in produzione con oscommerce e sembra OK.

Ciao
Ale

File Attachments
trovaprezzi.php  (File Size: 6KB - Downloads: 335)
 
Magento Community Magento Community
Magento Community
Magento Community
 
patrecord
Guru
 
Avatar
Total Posts:  461
Joined:  2008-06-01
 

stavo provando lo script e mi restituisce questo errore:

Fatal error: Allowed memory size of 33554432 bytes exhausted (tried to allocate 4864 bytes) in /home/XXXXXXX/domains/XXXXXXXXXX.it/public_html/app/code/core/Mage/Catalog/Model/Product/Type/Configurable.php on line 237

se mi risolvi questo problema ti pago una birra virtuale!....ci sto diventando pazzo con questo script di esportazione per trovaprezzi:(

 
Magento Community Magento Community
Magento Community
Magento Community
 
alexbn
Sr. Member
 
Avatar
Total Posts:  167
Joined:  2009-04-22
Milano
 

In genere è un problema legato al limite di memoria imposto a PHP. All’interno del file .htaccess sotto magento dovresti avere qualcosa del genere:

php_value memory_limit 64M

prova a portarlo a 96M o addirittura a 128M.

Se non usi un file .htaccess puoi modificare lo stesso parametro nel file di inizializzazione di PHP.

Ale

 
Magento Community Magento Community
Magento Community
Magento Community
 
patrecord
Guru
 
Avatar
Total Posts:  461
Joined:  2008-06-01
 

purtroppo il mio host non permette di fare questa modifica:(

altre soluzioni?

 
Magento Community Magento Community
Magento Community
Magento Community
 
alexbn
Sr. Member
 
Avatar
Total Posts:  167
Joined:  2009-04-22
Milano
 

No se la causa è quella :(

 
Magento Community Magento Community
Magento Community
Magento Community
 
tommyx_x
Member
 
Total Posts:  34
Joined:  2009-04-27
 

Ciao a tutti ragazzi ho provato ad inserire il file trovarezzi.php nella cartella /magento/scripts

ma non appena vado sul mio sito a questo indirizzo www.cartuccecartucce.it/magento/scripts/trovaprezzi.php

mi viene restituito questo errore:

Warning: require_once(app/Mage.php) [function.require-once]: failed to open stream: No such file or directory in /home/cartucce/public_html/magento/scripts/trovaprezzi.php on line 7

Fatal error: require_once() [function.require]: Failed opening required ‘app/Mage.php’ (include_path=’.:/usr/lib/php:/usr/local/lib/php’) in /home/cartucce/public_html/magento/scripts/trovaprezzi.php on line 7

la mia versione di magento è la 1.3.2.1

qualcuna sa dove sbaglio? :(

Grazie a tutti per l’aiuto

tommyx_x

 
Magento Community Magento Community
Magento Community
Magento Community
 
alexbn
Sr. Member
 
Avatar
Total Posts:  167
Joined:  2009-04-22
Milano
 
tommyx_x - 25 July 2009 06:38 AM

ma non appena vado sul mio sito a questo indirizzo www.cartuccecartucce.it/magento/scripts/trovaprezzi.php

mi viene restituito questo errore:

Warning: require_once(app/Mage.php) [function.require-once]: failed to open stream: No such file or directory in /home/cartucce/public_html/magento/scripts/trovaprezzi.php on line 7

ma quale script stai usando? il mio?

non trova il file Mage.php che è sotto magento/app… hai verificato sulla tua installazione se è tutto ok?

magento/app/Mage.php
magento/scripts/trovaprezzi.php

questa è la posizione dei files.

Ale

 
Magento Community Magento Community
Magento Community
Magento Community
 
tommyx_x
Member
 
Total Posts:  34
Joined:  2009-04-27
 

Ciao Ale,
scusami ma come avrai capito ho fatto un po di confusione sui percorsi dei file.
Mettendo i file nelle posizioni esatte mi viene generato un file trovaprezzi.txt nella cartella /temp con gli articoli che però si ferma al 73esimo articolo su 94 presenti restituendo questo codice errore.

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 943 bytes) in /home/cartucce/public_html/lib/Zend/Db/Statement.php on line 187

sai a cosa potrebbe essere dovuto?

grazie mille per la pazienza e la disponibilità

Salvo

 
Magento Community Magento Community
Magento Community
Magento Community
Magento Community
Magento Community
Back to top
Page 1 of 3