seeds.rb * ou via web onde simplesmente vai aparecer o resultado * * PS: * $ rake db:seed vai demorar uma eternidade.. não desesperem :D * * @author Luís Lopes * @version 1.0.1 (05/12/2011 20:54) */ define('XMLPATH', '/media/Data/Dropbox/T1 DaWeb/t2/public/products.xml'); // Nome dos modelos/scaffolds define('SCF_PRODUCT', 'product'); // campos: name, description, price, category_id define('SCF_CATEGORIES', 'category'); // campos: name define('SCF_PHOTOS', 'photo'); // campos: product_id, path define('SCF_RELATED', 'Similar_Product'); // campos: product_id, similar_product_id /********************************* Let the show begin *********************************/ // Passar XML para arrays em PHP $categorias = array(); $produtos = array(); $fotos = array(); $relacionados = array(); $doc = new DOMDocument(); $doc->load(XMLPATH); $xPath = new DOMXPath($doc); $produtosXML = $xPath->query('//products/product'); // Categorias > Produtos (Fotos > Relacionados) foreach ($produtosXML as $p) { //name, price, category, description //photos & related_list $prod = array( 'name' => $p->getElementsByTagName('name')->item(0)->textContent, 'price' => $p->getElementsByTagName('price')->item(0)->textContent, 'category' => $p->getElementsByTagName('category')->item(0)->textContent, 'description' => $p->getElementsByTagName('description')->item(0)->textContent); if (!in_array($prod['category'], $categorias)) $categorias[] = $prod['category']; $produtos[$prod['name']] = $prod; $fotos[$prod['name']] = array($p->getElementsByTagName('main_photo')->item(0)->textContent); $prodRelacionados = array(); foreach ($p->getElementsByTagName('related_list')->item(0)->getElementsByTagName('related') as $r) { $prodRelacionados[] = $r->getElementsByTagName('name')->item(0)->textContent; } $relacionados[$prod['name']] = $prodRelacionados; //exit; } // Vamos limpar os produtos relacionados que não existem $relacionados2 = array(); foreach ($relacionados as $prodNome => $listaRelacionados) foreach ($listaRelacionados as $prodRelacionado) if (isset($produtos[$prodRelacionado])) $relacionados2[$prodNome][] = $prodRelacionado; $relacionados = $relacionados2; unset($relacionados2); /* debugging stuff: var_dump($categorias); var_dump($produtos); var_dump($fotos); var_dump($relacionados);*/ /** * Esta secção do código passa os arrays para rails, * pode ter de ser alterada consoante as estruturas/modelos de cada um */ $output = ""; $output .= "# Categorias \n"; $output .= SCF_CATEGORIES.".delete_all\n"; foreach ($categorias as $v) { $output .= SCF_CATEGORIES.".create(:name => %{{$v}})\n"; } $output .= "\n# Produtos\n"; $output .= SCF_PRODUCT.".delete_all\n"; foreach ($produtos as $v) { $output .= SCF_PRODUCT.".create(:name => %{{$v['name']}}, \n"; $output .= " :description => %{{$v['description']}}, \n"; $output .= " :price => {$v['price']}, \n"; $output .= " :category_id => ".SCF_CATEGORIES.".find_by_name(\"{$v['category']}\").id) \n"; } $output .= "\n# Photos\n"; $output .= SCF_PHOTOS.".delete_all\n"; foreach ($fotos as $k => $v) { $output .= SCF_PHOTOS.".create(:path => \"{$v[0]}\", \n"; $output .= " :product_id => ".SCF_PRODUCT.".find_by_name(%{{$k}}).id )\n"; } $output .= "\n# Produtos relacionados\n"; $output .= SCF_RELATED.".delete_all\n"; foreach ($relacionados as $k => $v) { foreach ($v as $pr) { $output .= SCF_RELATED.".create(:product_id => ".SCF_PRODUCT.".find_by_name(%{{$k}}).id, \n"; $output .= " :similar_product_id => ".SCF_PRODUCT.".find_by_name(%{{$pr}}).id )\n"; } } // Acabou a festa! if (!isset($_SERVER['HTTP_USER_AGENT'])) die($output); die("
{$output}
"); ?>