Prodej projektu Duchod.cz - cena 665 tis Kč. Dále MojeFinance.cz, DuchodovaReforma.cz
Zobrazují se odpovědi 1 až 12 z 12

OpenCart - Vyvolání notifikace o objednávce pomocí PHP

  1. Řeším tu takový problémek - mám u zákazníka starý OpenCart 2, a mám tu importní můstek na objednávky z jiného systému - přímo do SQL, to je OK.

    Nicméně bych potřeboval vyvolat PHPčkem proces notifikace, tj. jako kdyby přišla nová objednávka. Moje představa je, že to pustím přes nějaký controller a ID objednávky, něco jako

    Kód:
    $order = new Order(2142); // vyhledání objednávky
    $order->notify(); // vyvolání notifikace
    Ale tak hluboko OpenCart neznám, nevíte někdo? Případně i zaplatím

  2. Co se právě děje na Webtrhu?
  3. A co myslíte tou notifikací? Odeslat email obsluze o přijetí objednávky?

    Prakticky, při importu nové objednávky by jste měl využít model: catalog/model/checkout/order.php

    Tam je funkce addOrder pro přidání objednávky do databáze. A pak funkce addOrderHistory, která přidá objednávce nějaký konkrétní stav a odešle příslušné notifikační emaily.

    Alternativně, pokud nepoužíváte ten model, tak prostě pošlete email pomoci: system/library/mail.php. Např v té funkci addOrderHistory uvidíte vzor jak se s knihovnou mail zachází.

  4. Díky za odpověď, jsou tam 2 e-mail - obsluze i zákazníkovi. Pokud importuje napřímo do SQL, tak používám tabulky order, order_item, order_option, order_total a order_history. Takže teoreticky stačí nevyplnit order_history a vyvolat addOrderHistory i bez importu objednávky přes ten model?

  5. Citace Původně odeslal Nabytkar Zobrazit příspěvek
    Řeším tu takový problémek - mám u zákazníka starý OpenCart 2, a mám tu importní můstek na objednávky z jiného systému - přímo do SQL, to je OK.

    Nicméně bych potřeboval vyvolat PHPčkem proces notifikace, tj. jako kdyby přišla nová objednávka. Moje představa je, že to pustím přes nějaký controller a ID objednávky, něco jako

    Kód:
    $order = new Order(2142); // vyhledání objednávky
    $order->notify(); // vyvolání notifikace
    Ale tak hluboko OpenCart neznám, nevíte někdo? Případně i zaplatím
    Je potrebne zavolat controller/api/order/addorder tahle funkce vloží novou obj. a také změní stavy včetně notifikace klientovi,
    kbydy něco napište PM

  6. @peterniznik
    addOrder emaily neodesílá, to dělá až funkce addOrderHistory.

    @Nabytkar
    Ano, pokud je objednávka už v databázi, tak by mělo stačit zavolat addOrderHistory($order_id, $order_status_id).
    Kde $order_status_id je id stavu buď Processing 2, nebo Pending 1, nejsem si teď úplně jistý, tak vyzkoušejte jedničku i dvojku. Nebo se podívejte jaké id eshop používa pro stav "Objednávka přijata".

  7. @P8j6
    jo má chyba psal jsem to z hlavy, správně je to controller/api/order/add kde tahle funkce má v sobě voláni addOrder a také addOrderHistory

  8. Díky oběma.

    Díval, že /api/order/si stejně volá
    Kód:
    $this->model_checkout_order->addOrderHistory()
    tedy metoda addOrderHistory není přímo v order, ale až v metodě add, kterou volat nemůžu, protože nemám data objednávky.

    Tak jednodušše, tohle je verze 2.0.1.0, a netuším vůbec, co musím všechno inicializovat. Předpokládám, že pojedu podle index.php a v určité části ještě před dispatcherem to zaseknu a zavolám si addOrderHistory.
    Ale netuším, co všechno OC vyžaduje (třeba Request a Response se mi zdají už zbytečné, ale neznám závislosti).

    Můžu tedy mít poslední dotaz - před jakou inicializací v index.php můžu zavolat addOrderHistory a jak vytvořím objekt, ze kterého ji můžu volat?

  9. Psal jste že už máte hotový skript který vkládá objednávky do databáze. Kde ten skript sídlí? Je to klasický opencartovský controller. Nebo nějaký úplně nezávislý skript který není v controlleru ani v modelu?

  10. Právě že úplně nezávislý, OC obchází přímým přístupem do DB. U Prestashopu to znám, tam načtu config a init a mám rovnou inicializované prostředí, tak jsem vedle.

  11. Kdyby jste měl verzi 2.3.0.2. tak můžete použít startup.php podobně jak to děláte v prestě. Ale ve 2.0. to ještě vše jde přes index.

    Vy stejně jen potřebujete odeslat email ne? Takže buď úplně jednoduše, ten mail prostě pošlete přes php, jak jste zvyklý, třeba pomoci funkce mail.

    Nebo si udělejte v catalogu jednoduchý controller, např: catalog/controller/tool/utils.php

    A do něho přijde něco v tomhle stylu (píšu to z hlavy, takže to asi nebude 100% funkční, ale pro představu):


    PHP kód:

    <?php
    class ControllerToolUtils extends Controller {

        public function 
    notify() {
            
    $this->load->model('checkout/order');
        
            if (isset(
    $this->request->get['order_id'])) {
                
    $order_id intval($this->request->get['order_id']);
            } else {
                
    $order_id 0;
            }

            if (
    $order_$id 0) {
                
    $this->model_checkout_order->addOrderHistory($order_id1);
            }
        }
    }
    A potom z vašeho skriptu můžete volat url adresu: index.php?route=tool/utils/notify&order_id=123

    Ještě bych to samozřejmě celé zabezpečil nějakým tokenem, aby to nemohl z internetu zavolat žádný zaškodník.

  12. Super, tak je to funkční, bylo nutné ještě nastavit původní status objednávky na 0, jinak se přeposílal jenom info e-mail.

  13. Ano, tohle musí být první status co k objednávce příjde. Tím se odešlou všechny ty emaily o potvrzení objednávky, atd..
    Super, hlavně že se povedlo.

Hostujeme u Server powered by TELE3