Joomla.it Forum
Joomla! 2.5 (versione con supporto terminato) => Joomla! 1.6/1.7/2.5 => : 71^sec.design 19 Jun 2014, 17:51:02
-
Devo esportare i prodotti da un e-commerce multilingua (ita e eng) realizzato con wordpress e woocommerce in virtuemart.
Ho trovato un servizio, shopping-cart-migration che però non esporta i prodotti in lingua inglese, solo la lingua principale.
A questo punto mi chiedevo come procedere.
Csv Free?
Grazie per i suggerimenti.
-
Nessuna risposta?
-
esporti da wordpress in xml con l'apposito tool e reimporti in phpmyadmin o usi un tools che trovi nella jed
-
Molto gentile.
Esportando in xml da wordpress, se non sbaglio, poi non posso importare lo stesso file xml in un mysql.
Non lo accetterebbe.
-
in linea di massima, e vado a memoria:
semplifichiamo la faccenda per capire lo schema del file xml:
< ?xml version="1.0" encoding="UTF-8"?>
< dataroot xmlns:od="urn:schemas-microsoft-com:officedata" generated="2012-07-17T12:34:02">
< nome_tabella>
< campo1>testo1< /campo1>
< campo2>testo2< /campo2>
< campo3>testo3< /campo3>
< /nome_tabella>
< nome_tabella>
< campo1>testo1< /campo1>
< campo2>testo2< /campo2>
< campo3>testo3< /campo3>
< /nome_tabella>
< /dataroot>
Vediamo cosa vogliono dire i tag XML per capire meglio cosa stiamo facendo:
- < ?xml : Iniziamo dicendo che il documento che stiamo aprendo è un file in formato XML, versione 1.0 codificato in UTF-8.
- <dataroot> : Tutto quello che scriviamo dovrà essere inserito all'interno di questo tag, altrimenti non riusciremo a recuperare i valori in PHP.
- <nome_tabella> : Questo tag definisce il nome di una proprietà, con all'interno dei dati. Nel nostro caso sarà il nome della tabella di riferimento, con i campi di quella tabella.
- <campo> : Qui decidiamo i campi che definiscono quella determinata proprietà. Sarebbe corretto avere lo stesso numero di campi con lo stesso nome, per ogni proprietà.
adesso, mettiamo che tu abbia una tabella nel database così composta:
- id: identificativo univoco dell'utente (non segnato nell'XML perché creato in automatico)
- nome
- cognome
- indirizzo
- mail
- telefono
Creiamo un form in una pagina html per fare l'upload del file, quindi con un enctype "multipart/form-data".
Creeremo 2 file, il primo upload.html, ed il secondo importa_xml.php
codice del file upload.html
< html>
< head>
< title>Upload ed importazione XML< /title>
< /head>
< body>
< form enctype="multipart/form-data" method="post" action="importa_xml.php">
File XML: < input type="file" name="filexml" value="" />
< input type="submit" name="" value="Upload" />
< /form>
< /body>
< /html>
Upload ed importazione in MySQL del file XML in PHP
Ora dobbiamo creare la pagina per logica del programma, e quindi nel nostro caso per l'upload del file e del caricamento dei dati in MySQL nella tabella utenti
Nome file: importa_xml.php
// Apro la connessione al DB
// ------
// ------
// Recupero il file
$file = $_FILES['filexml'];
// Controllo che il file sia stato inserito
if ( $file['tmp_name'] != '' ) {
// Carica il file in una variabile $xml
$xml = simplexml_load_file( $file['tmp_name'] );
// Controllo tutti i tag "utenti"
foreach( $xml->utenti as $value ) {
// Recupero tutti i campi da ogni tag "utenti"
$nome = $value->NOME;
$cognome = $value->COGNOME;
$indirizzo = $value->INDIRIZZO;
$mail = $value->MAIL;
$telefono = $value->TELEFONO;
// Creo una query di inserimento e la eseguo
$sql = "
INSERT INTO utenti SET
nome = '$nome',
cognome = '$cognome',
indirizzo = '$indirizzo',
mail = '$mail',
telefono = '$telefono'
";
$rssql = mysql_query( $sql );
// Controllo che l'importazione sia avvenuta con successo
echo ( $rssql ) ? "Importazione avvenuta con successo" : "Errore nella query o connessione al DB mancante";
}
}
else
echo "Nessun file inserito";
ti consiglio di fare delle prove di importazione prima, magari su un database vuoto con questa tabella che crerai direttamente in phpmyadmin:
CREATE TABLE IF NOT EXISTS `utenti` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`nome` varchar(255) NOT NULL,
`cognome` varchar(255) NOT NULL,
`indirizzo` varchar(255) NOT NULL,
`mail` varchar(255) NOT NULL,
`telefono` varchar(100) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
capito e verificato il funzinamento con l'esempio, lo potrai implementare a secondo del contenuto del file generato da wordpress.
-
Grazie della guida.
Sembra tutto chiaro, ora vediamo come applico il tutto.
-
solo un paio di cosette:
1. non passate le stringhe al sql cosi come sono ma usate mysql_real_escape_string() altrimenti avrete il programma bloccato al primo apostrofo...
2. la linea
echo ( $rssql ) ? "Importazione avvenuta con successo" : "Errore nella query o connessione al DB mancante";
occhio alla parentesi, meglio
echo ( $rssql ? "Importazione avvenuta con successo" : "Errore nella query o connessione al DB mancante");
ciao