Jump to content

pomoc Úprava cronu na nový systém


jAk3r

Recommended Posts

Čau kluci,

mám takový pro náš nový internetový obchod děláme nový systém ale potřeboval bych pomoci s úpravou cronu pro nový systém... dle struktury...

product

Pro produkty vytvoříme tabulku product. Bude obsahovat následující sloupce:

product_id (int) - Id produktu, primární klíč, autoincrement
code (varchar 255) - Kód produktu pro obchodníka (např. EAN nebo cokoli jiného)
url (varchar 255) - URL adresa produktu (např. zeleny-kvetinac-ella) pro lepší SEO optimalizaci
title (varchar 255) - Titulek produktu
short_description (varchar 255) - Krátký popisek do HTML meta tagu
description (text) - Delší popisek pro detail produktu, může obsahovat HTML formátování
price (decimal(10,1)) - Cena produktu
old_price (decimal(10,1)) - Stará cena produktu (pokud je zlevněný)
rating_sum (int) - Součet hodnocení produktu (celkový počet udělených hvězdiček uživateli)
ratings (int) - Počet hodnocení produktu
stock (int) - Počet kusů produktu na skladu
images_count (int) - Počet obrázků u produktu
hidden (tinyint) - Označuje zda je produkt skrytý (1/0), viz dále.

Přidejme tabulku category s následujícími sloupci:

category_id (int) - Id kategorie, primární klíč, autoincrement
url (varchar 255) - URL adresa odkazu
title (varchar 255) - Titulek
order_no (int) - Určuje pořadí položek
hidden (tinyint) - Určuje, zda je položka skrytá (můžeme tak skrýt nějaké systémové kategorie, viz dále)
parent_catego­ry_id (int, nullový) - Id rodičovské položky (pod kterou má být položka zařazena) nebo NULL, cizí klíč

řidáme tabulku product_category s následujícími sloupci:

product_catego­ry_id (int) - Id vazebního řádku, primární klíč, autoincrement
product_id (int) - Id produktu, cizí klíč
category_id (int) - Id kategorie, do které produkt patří, cizí klíč

Zde mám již upravený cron ve kterém mi dělají problémy obrázky.

<?php

/**
 * Description of Import
 *
 * @author David Skála <[email protected]>
 */
class Import {

    CONST URL = 'http://navratws:[email protected]/i6ws/Default.asmx/GetResult?resultType=X-StoItemBaseComplEl';

    private $slozka;
    private $slozkaDb;

    /** @var DibiConnection */
    private $dibi;

    public function __construct($dibi) {
        $this->log('init');

        $this->dibi = $dibi;
        $this->slozka = __DIR__ . '/../images/products/';
        $this->slozkaDb = 'images/products/';

        /*
          $cdir = scandir($this->slozka);
          foreach ($cdir as $value) {
          if (intval($value) > 112)
          $this->rrmdir($this->slozka . $value);
          }
          exit;
         */
    }

    private function rrmdir($dir) {
        if (is_dir($dir)) {
            $objects = scandir($dir);
            foreach ($objects as $object) {
                if ($object != "." && $object != "..") {
                    if (is_dir($dir . "/" . $object))
                        $this->rrmdir($dir . "/" . $object);
                    else
                        unlink($dir . "/" . $object);
                }
            }
            rmdir($dir);
        }
    }

    /**
     * 
     * @param string $message
     */
    private function log($message) {
        echo sprintf('<span style="color: #CCC;">bellugio:</span> %s<br>', $message);
    }

    /**
     * 
     * @return type
     */
    public function getXml() {
        $this->log('getXml: ' . self::URL);
        return file_get_contents(self::URL);
    }

    public function zpracujXmlKategorie($xml) {

        $poleLevel1 = [
            'Míčové a společenské sporty' => 2,
            'Fitness a posilovna' => 2,
            'Vodní sporty' => 2,
            'Skating' => 2,
            'Bojové sporty' => 2,
            'Tenis a badminton' => 2,
            'Outdoor' => 3,
            'Sport. obuv a nazouváky' => 4,
            'Termoprádlo' => 4,
            'Funkční oblečení' => 4
        ];

        foreach ($xml->StoItem as $item) {
            $tmp1 = explode(' ', $item->SPresentTree->Level1);
            unset($tmp1[0]);
            $level1 = trim(implode(' ', $tmp1));
            $idLevel0 = isset($poleLevel1[$level1]) ? $poleLevel1[$level1] : 'false';

            /* level 1 */
            if ($idLevel0) {
                $data = $this->vratDataProKategorii($idLevel0, $level1);
                $kategorieId_1 = $this->dibi->query(sprintf('SELECT category_id FROM [category] WHERE [url] = "%s" LIMIT 1', $data['url']))->fetchSingle();
                if (!$kategorieId_1) {
                    $this->dibi->query('INSERT INTO [category]', $data);
                    $this->log(sprintf('Vytvořena kategorie úrovně %d s názvem %s', 1, $level1));
                    $kategorieId_1 = $this->dibi->getInsertId();
                }

                /* level 2 */
                $tmp2 = explode(' ', $item->SPresentTree->Level2);
                unset($tmp2[0]);
                $level2 = trim(implode(' ', $tmp2));
                if ($level2) {
                    $data = $this->vratDataProKategorii($kategorieId_1, $level2);
                    $kategorieId_2 = $this->dibi->query(sprintf('SELECT category_id FROM [category] WHERE [url] = "%s" LIMIT 1', $data['url']))->fetchSingle();
                    if (!$kategorieId_2) {
                        $this->dibi->query('INSERT INTO [category]', $data);
                        $this->log(sprintf('Vytvořena kategorie úrovně %d s názvem %s', 2, $level2));
                        $kategorieId_2 = $this->dibi->getInsertId();
                    }

                    /* level 3 */
                    $tmp3 = explode(' ', $item->SPresentTree->Level3);
                    unset($tmp3[0]);
                    $level3 = trim(implode(' ', $tmp3));
                    if ($level3) {
                        $data = $this->vratDataProKategorii($kategorieId_2, $level3);
                        $kategorieId_3 = $this->dibi->query(sprintf('SELECT category_id FROM [category] WHERE [url] = "%s" LIMIT 1', $data['url']))->fetchSingle();
                        if (!$kategorieId_3) {
                            $this->dibi->query('INSERT INTO [category]', $data);
                            $this->log(sprintf('Vytvořena kategorie úrovně %d s názvem %s', 3, $level3));
                        }
                    }
                }
            }
        }
    }

    private function vratDataProKategorii($parentId, $jmeno) {
         $orderid = $this->dibi->query("SELECT max(category.order_no) AS order_nos FROM [category]")->fetchSingle() + 1;
        return [
            'url' => $this->webalize($jmeno),
            'title' => $jmeno,
            'order_no' => $orderid++,
            'hidden' => 0,
            'parent_category_id' => $parentId
        ];
    }

    /**
     * 
     * @param type $xml
     */
    public function zpracujXmlZbozi($xml) {

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

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

                if ($item->SisName == 'Výprodej')
                    $action = 1;
                if ($item->SisName == 'Novinka')
                    $news = 1;

                $dataCatalog = [
                    'product_id' => intval($item->Id),
                    'code' => (string) ($item->Code),
                    'url' => $this->webalize($item->Name),
                    'title' => (string) $item->Name,
                    'shortname' => (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' => 1,                   	
                    'images_count' => 0,
                    'hidden' => 0                    
                ];

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

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

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

                $idFotky = $this->dibi->getInsertId();

                /* obrazky */
                if (!file_exists($this->slozka))
                    mkdir($this->slozka, 0777, true);

                copy($item->ImgUrl, $this->slozka . $this->intval($item->Id) . '.jpg');

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

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

    private
            function webalize($string) {
        $url = preg_replace('~[^\\pL0-9_]+~u', '-', $url);
        $url = trim($url, "-");
        $url = iconv("utf-8", "us-ascii//TRANSLIT", $url);
        $url = strtolower($url);
        $url = preg_replace('~[^-a-z0-9_]+~', '', $url);
        return $url;
    }

}

Ale mám problém s ukládáním obrázku...

Mám složku images/product ve které se obrázky ukládají tak ze IdProduktu_kolikatyObrazekToJe.jpg

To znamená mám obrázek s ID 1 a u nej mám 3 obrázky a ve složce mám 1_0.jpg,1_1.jpg,1_2.jpg a v Db product ve sloupci images_count se mi vytvoří argument kolik těch obrázku to dané ID ma v tomto případě 3 a pokud nějaký smažu odstraní se ze složky a v Db se aktualizuje na počet 2

Mohl by mi někdo poradit nebo pomoci abych dospěl k funkčnosti cronu?

Díky všem :)

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
×
×
  • Create New...