Úprava xml feedu – PHP – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu

Úprava xml feedu – PHP – Fórum – Programujte.comÚprava xml feedu – PHP – Fórum – Programujte.com

 

jAkErCZ0
Stálý člen
13. 3. 2018   #1
-
0
-

Zdravím, mám model který pracuje s feedem dodavatele.

    public function zpracujXmlZbozi($xml) {

        foreach ($xml->StoItem as $item) {
            $idKat = $this->connection->query(sprintf("SELECT product_id FROM product WHERE code = '%s' LIMIT 1", $item->Code))->fetch();
            $nazev = $idKat ? $this->connection->query(sprintf("SELECT title FROM product WHERE product_id = %s LIMIT 1", $idKat->product_id))->fetch() : false;

            if (!$nazev) {
                Debugger::log($item->Id . ': ' . $item->Name, 'import');

                $dataCatalog = [
                    'product_id' => intval($item->Id),
                    'code' => (string) ($item->Code),
                    'url' => Strings::webalize($item->Name),
                    'title' => (string) $item->Name,
                    'short_description' => (string) $item->Note,
                    'description' => (string) $item->Note,
                    'price' => intval($item->PriceEU),
                    'old_price' => intval($item->PriceDea),
                    'rating_sum' => 0,
                    'ratings' => 0,
                    'stock' => intval($item->QtyFree),
                    'images_count' => 1,
                    'hidden' => 0                    
                ];

                $this->connection->query('INSERT INTO product', $dataCatalog);
                
                $lastId = $this->connection->getInsertId();

                /* katerogie */
                foreach (['Level1', 'Level2', 'Level3'] AS $_level) {
                    $tmp = explode(' ', $item->SPresentTree->{$_level});
                    unset($tmp[0]);
                    $level = implode(' ', $tmp);

                    $kategorieId = $this->connection->query(sprintf('SELECT category_id FROM category WHERE title = "%s" LIMIT 1', $level))->fetch();
                    if ($kategorieId) {
                        $dataKat = [
                            'product_id' => $lastId,
                            'category_id' => $kategorieId->category_id
                        ];
                        $this->connection->query('INSERT INTO product_category', $dataKat);
                    }
                }

                if ($item->ImgUrl) {
                    $count = count(\Nette\Utils\Finder::findFiles(intval($item->Id) . '_*.jpg')->in($this->slozka));



                    $imageId = preg_replace("/(.*)stiid=(.*)/", "$2", (string) $item->ImgUrl);
                    $filename = intval($item->Id) . '_1.jpg';
                    if (!file_exists($this->slozka . '/' .$filename)) {
                        $components = $this->slozka . '/' . $lastId;
                        mkdir($components, 0777, true);
                        copy($item->ImgUrl, $this->slozka . $lastId . '/' . $filename);
                        $count++;
                        $this->connection->query('UPDATE product SET images_count= ' . $count . ' WHERE product_id = ' . $lastId);
                    }

                    $this->createThumb($item->Id, $this->slozka . $lastId . '/' . $filename);

                }
            } else {
                $lastId = $this->connection->query(sprintf("SELECT product_id FROM product WHERE product_id = %s LIMIT 1", $idKat->product_id))->fetch()->product_id;
                foreach (['Level1', 'Level2', 'Level3'] AS $_level) {
                    $tmp = explode(' ', $item->SPresentTree->{$_level});
                    unset($tmp[0]);
                    $level = implode(' ', $tmp);

                    if ($level) {
                        $kategorieId = $this->connection->query(sprintf('SELECT category_id FROM category WHERE title = "%s" LIMIT 1', $level))->fetch();
                        if ($kategorieId) {
                            $bindCat = $this->connection->query(sprintf("SELECT product_id FROM product_category WHERE product_id = %s AND category_id = %s LIMIT 1", $lastId, $kategorieId->category_id))->fetch();
                            if (!$bindCat) {
                                $dataKat = [
                                    'product_id' => $lastId,
                                    'category_id' => $kategorieId->category_id
                                ];
                                $this->connection->query('INSERT INTO product_category', $dataKat);
                            }
                        }
                    }
                }

                /* UPDATE */


                $this->connection->query(sprintf('UPDATE product SET stock = %s WHERE product_id = %s',intval($item->QtyFree), $lastId));

            }
        }
    }

A mám tam udělaný i update skladových zásob ale všiml jsem si že můj dodavatel už některé produkty které já v databízi mám již nemá... Potřeboval bych tedy poradit jak udělat kontrolu že pokud není produkt v xml feedu tak se z db vymaže.. jelikož tam mám pak problém že mi haprujou Idčka a hádají se...

Nebo nějaký jiný nápad?

Díky všem za pomoc 

Nahlásit jako SPAM
IP: 89.24.243.–
jAkErCZ0
Stálý člen
13. 3. 2018   #2
-
0
-

Tak problém není že neexistuje ve feedu ale že byl změněn tudíž v db už neodpovídá produkt tomu který je ve xml feedu... 

Nahlásit jako SPAM
IP: 89.24.243.–
Kit+15
Guru
13. 3. 2018   #3
-
0
-

#1 jAkErCZ
Data nacpi do TEMPORARY TABLE, pak s ní udělej UPDATE a DELETE na hlavní tabulce.

BTW: V zájmu zachování vlastního duševního zdraví se zbav toho sprintf() a nauč se používat prepared statements.

Nahlásit jako SPAM
IP: 194.228.68.–
Komentáře označují místa, kde programátor udělal chybu nebo něco nedodělal.
peter
~ Anonymní uživatel
3981 příspěvků
16. 3. 2018   #4
-
0
-

Asi bych si lokalne udelal 2 db. Do kazde to naimportoval a porovnal radek po radku podle id z jedne tabulky. A zacal vypisovat ty id, kde by to nesedelo.
Nebo to exportuj do csv a linuxovy diff ti umi najit rozdilne radky. Podobny program jsem nedavno delal, vystup do html, smazane, pridane radky. Nejsem v praci, takze bohuzel nemam pristup ke zdrojaku. ten diff by to umel udelat i na xml, ale nevybere ti pak cely produkt, jen rozdilne radky. Proto to csv.

Nahlásit jako SPAM
IP: 193.84.204.–
peter
~ Anonymní uživatel
3981 příspěvků
16. 3. 2018   #5
-
0
-

Tady by mel byt zaklad
http://programujte.com/…iff-pro-win/

$command = "UnxUtils\\usr\\local\\wbin\\diff.exe -U0 $file1_name $file2_name";	// win diff (UnxUtils.zip) - seznam zmen smazano, pridano
$output  = array();
$status  = 0;
exec($command, $output, $status);
var_dump('command',$command);
var_dump('output',$output);
var_dump('status',$status);

// takhle nejak to pak vypada
"--- ./data_old/zas_20170526091704.csv	Mon Feb 26 15:12:22 2018"
"+++ ./data/zas.csv	Wed May 17 14:18:26 2017"
"@@ -12 +12 @@"
"-1;peter test zmena;Gia/b;;;;free;;;;501;;;;;;;;;"
"+1;sw120 - Cisco Catalyst 4506;Gia/b;;;;free;;;;501;;;;;;;;;"
"@@ -22 +22 @@"
"-1;sw120 - Cisco Catalyst 4506;Gic/d;;;;free;;;peter-test-zmena2;501;;;;;;;;;"
"+1;sw120 - Cisco Catalyst 4506;Gic/d;;;;free;;;;501;;;;;;;;;"
Nahlásit jako SPAM
IP: 193.84.204.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 4 hosté

Podobná vlákna

Uprava dat v xml — založil Zuben

Úprava XML kodu — založil MaxDJs

Generovaní RSS feedu — založil Michal115

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032024 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý