Vipktor Posted February 19, 2014 Share Posted February 19, 2014 Mam pytanko do kolegów. Może ktoś wie. W PS 1.4.4.1 w katalogu /mails są szablony z których korzysta presta do wysyłania powiadomień np o złożonym zamówieniu. Pytanko: Gdzie w preście definiowane są dane (zmienne) które następnie podstawiane są w szablonach /mails i wysyłane do klienta ? Który plik ? klasa ? odpowiada w PS za wysyłanie tych powiadomień? Będę wdzięczny za podpowiedź. Link to comment Share on other sites More sharing options...
0 vekia Posted February 20, 2014 Share Posted February 20, 2014 wszystko zależy od maila jaki jest wysyłany, niektóre z modułów mają swoje kontrolery odpowiedzialne za wysyłanie maili sprecyzuj o który mail chodzi 1 Link to comment Share on other sites More sharing options...
0 Vipktor Posted February 20, 2014 Author Share Posted February 20, 2014 wszystko zależy od maila jaki jest wysyłany, niektóre z modułów mają swoje kontrolery odpowiedzialne za wysyłanie maili sprecyzuj o który mail chodzi Witam MIło że jest ktoś to może mi pomoże. Chodzi mi o kontroler który przygotowuje dane pod szablon /mails/pl/order_conf.html mail z potwierdzeniem złożenia zamówienia wysyłany do klienta. Tam są zmienne m.in {total_products}, {total_discounts}, ... {total_paid} i inne Gdzie te zmienne sa przygotowywane ? Może koledzy wiedzą też który kontroler jest odpowiedzialny za złożenie zamówienia w sklepie. Chodzi mi o końcową fazę tzn moment kiedy kontroler zapisuje dane do tabeli 'oreders', 'order_detail', ' order_histry' itd. Próbuje obejść jedną żecz. A mianowicie nie wiem jak zrobić aby koszty wysyłki były wliczane w ceny produktów netto. I zrobiłem jak gdyby połowę. Dopisałem do tabeli order_history rtigger który po złożeniu zamówienia zmioenia mi dane w tabelach ordes i orders_detail. Przelicza cene dostawy i wlicza w ceny produktów. Wszystko fajnie bo na stronie po złożeniu zamówienia ładnie wszystko jest wyliczone. W historii zamówień też 'bajka', problem z tym że do klienta trafa zamówienie maile w starej formie. Znalazłem kontroler odpowiedzialny za wysyłanie maila jak klient płaci przelewem i spoko tam tez mogę pozmieniać wyliczenia ale nie mogę teraz znaleść kontrolera który poprostu wysyła potwierdzenie złożenia zamówienia. I tak klient na stronie ma co innego a w mailu co innego i ty mam problem. Wiem że takie obejście problemu jest mało prof. ale bardzie znam się na bazach danych niż na samej prescie. Może ktoś ma pomysł. Będę wdzieczny za każdą pomoc lub wskazówkę. (ps. ktoś się może dziwić po co wliczać koszty przesyłki w produkty ? Hmmm niestety większość o tym nie wie ale jak sporzy się na ustawę o VAT to wyraźnie jest napisane że nie można sprzedawać np książek z VAT 5% i dodawać wysyłkę z 23% VAT. Do pierwszej kontroli US jest ok a później trzeb zmienić sposób wystawiania faktur. - po to to wszystko) Dziekuje, pozdrawiam Link to comment Share on other sites More sharing options...
0 vekia Posted February 20, 2014 Share Posted February 20, 2014 chodzi o klasę PaymentModule.php jest tam taki kod: // Send an e-mail to customer (one order = one email) if ($id_order_state != Configuration::get('PS_OS_ERROR') && $id_order_state != Configuration::get('PS_OS_CANCELED') && $this->context->customer->id) { $invoice = new Address($order->id_address_invoice); $delivery = new Address($order->id_address_delivery); $delivery_state = $delivery->id_state ? new State($delivery->id_state) : false; $invoice_state = $invoice->id_state ? new State($invoice->id_state) : false; $data = array( '{firstname}' => $this->context->customer->firstname, '{lastname}' => $this->context->customer->lastname, '{email}' => $this->context->customer->email, '{delivery_block_txt}' => $this->_getFormatedAddress($delivery, "\n"), '{invoice_block_txt}' => $this->_getFormatedAddress($invoice, "\n"), '{delivery_block_html}' => $this->_getFormatedAddress($delivery, '<br />', array( 'firstname' => '<span style="font-weight:bold;">%s</span>', 'lastname' => '<span style="font-weight:bold;">%s</span>' )), '{invoice_block_html}' => $this->_getFormatedAddress($invoice, '<br />', array( 'firstname' => '<span style="font-weight:bold;">%s</span>', 'lastname' => '<span style="font-weight:bold;">%s</span>' )), '{delivery_company}' => $delivery->company, '{delivery_firstname}' => $delivery->firstname, '{delivery_lastname}' => $delivery->lastname, '{delivery_address1}' => $delivery->address1, '{delivery_address2}' => $delivery->address2, '{delivery_city}' => $delivery->city, '{delivery_postal_code}' => $delivery->postcode, '{delivery_country}' => $delivery->country, '{delivery_state}' => $delivery->id_state ? $delivery_state->name : '', '{delivery_phone}' => ($delivery->phone) ? $delivery->phone : $delivery->phone_mobile, '{delivery_other}' => $delivery->other, '{invoice_company}' => $invoice->company, '{invoice_vat_number}' => $invoice->vat_number, '{invoice_firstname}' => $invoice->firstname, '{invoice_lastname}' => $invoice->lastname, '{invoice_address2}' => $invoice->address2, '{invoice_address1}' => $invoice->address1, '{invoice_city}' => $invoice->city, '{invoice_postal_code}' => $invoice->postcode, '{invoice_country}' => $invoice->country, '{invoice_state}' => $invoice->id_state ? $invoice_state->name : '', '{invoice_phone}' => ($invoice->phone) ? $invoice->phone : $invoice->phone_mobile, '{invoice_other}' => $invoice->other, '{order_name}' => $order->getUniqReference(), '{date}' => Tools::displayDate(date('Y-m-d H:i:s'),null , 1), '{carrier}' => $virtual_product ? Tools::displayError('No carrier') : $carrier->name, '{payment}' => Tools::substr($order->payment, 0, 32), '{products}' => $this->formatProductAndVoucherForEmail($products_list), '{discounts}' => $this->formatProductAndVoucherForEmail($cart_rules_list), '{total_paid}' => Tools::displayPrice($order->total_paid, $this->context->currency, false), '{total_products}' => Tools::displayPrice($order->total_paid - $order->total_shipping - $order->total_wrapping + $order->total_discounts, $this->context->currency, false), '{total_discounts}' => Tools::displayPrice($order->total_discounts, $this->context->currency, false), '{total_shipping}' => Tools::displayPrice($order->total_shipping, $this->context->currency, false), '{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $this->context->currency, false), '{total_tax_paid}' => Tools::displayPrice(($order->total_products_wt - $order->total_products) + ($order->total_shipping_tax_incl - $order->total_shipping_tax_excl), $this->context->currency, false)); if (is_array($extra_vars)) $data = array_merge($data, $extra_vars); // Join PDF invoice if ((int)Configuration::get('PS_INVOICE') && $order_status->invoice && $order->invoice_number) { $pdf = new PDF($order->getInvoicesCollection(), PDF::TEMPLATE_INVOICE, $this->context->smarty); $file_attachement['content'] = $pdf->render(false); $file_attachement['name'] = Configuration::get('PS_INVOICE_PREFIX', (int)$order->id_lang, null, $order->id_shop).sprintf('%06d', $order->invoice_number).'.pdf'; $file_attachement['mime'] = 'application/pdf'; } else $file_attachement = null; if (Validate::isEmail($this->context->customer->email)) Mail::Send( (int)$order->id_lang, 'order_conf', Mail::l('Order confirmation', (int)$order->id_lang), $data, $this->context->customer->email, $this->context->customer->firstname.' '.$this->context->customer->lastname, null, null, $file_attachement, null, _PS_MAIL_DIR_, false, (int)$order->id_shop ); } listę zmiennych chyba widać dobrze Link to comment Share on other sites More sharing options...
0 Vipktor Posted February 20, 2014 Author Share Posted February 20, 2014 chodzi o klasę PaymentModule.php jest tam taki kod: // Send an e-mail to customer (one order = one email) if ($id_order_state != Configuration::get('PS_OS_ERROR') && $id_order_state != Configuration::get('PS_OS_CANCELED') && $this->context->customer->id) { $invoice = new Address($order->id_address_invoice); $delivery = new Address($order->id_address_delivery); $delivery_state = $delivery->id_state ? new State($delivery->id_state) : false; $invoice_state = $invoice->id_state ? new State($invoice->id_state) : false; $data = array( '{firstname}' => $this->context->customer->firstname, '{lastname}' => $this->context->customer->lastname, '{email}' => $this->context->customer->email, '{delivery_block_txt}' => $this->_getFormatedAddress($delivery, "\n"), '{invoice_block_txt}' => $this->_getFormatedAddress($invoice, "\n"), '{delivery_block_html}' => $this->_getFormatedAddress($delivery, '<br />', array( 'firstname' => '<span style="font-weight:bold;">%s</span>', 'lastname' => '<span style="font-weight:bold;">%s</span>' )), '{invoice_block_html}' => $this->_getFormatedAddress($invoice, '<br />', array( 'firstname' => '<span style="font-weight:bold;">%s</span>', 'lastname' => '<span style="font-weight:bold;">%s</span>' )), '{delivery_company}' => $delivery->company, '{delivery_firstname}' => $delivery->firstname, '{delivery_lastname}' => $delivery->lastname, '{delivery_address1}' => $delivery->address1, '{delivery_address2}' => $delivery->address2, '{delivery_city}' => $delivery->city, '{delivery_postal_code}' => $delivery->postcode, '{delivery_country}' => $delivery->country, '{delivery_state}' => $delivery->id_state ? $delivery_state->name : '', '{delivery_phone}' => ($delivery->phone) ? $delivery->phone : $delivery->phone_mobile, '{delivery_other}' => $delivery->other, '{invoice_company}' => $invoice->company, '{invoice_vat_number}' => $invoice->vat_number, '{invoice_firstname}' => $invoice->firstname, '{invoice_lastname}' => $invoice->lastname, '{invoice_address2}' => $invoice->address2, '{invoice_address1}' => $invoice->address1, '{invoice_city}' => $invoice->city, '{invoice_postal_code}' => $invoice->postcode, '{invoice_country}' => $invoice->country, '{invoice_state}' => $invoice->id_state ? $invoice_state->name : '', '{invoice_phone}' => ($invoice->phone) ? $invoice->phone : $invoice->phone_mobile, '{invoice_other}' => $invoice->other, '{order_name}' => $order->getUniqReference(), '{date}' => Tools::displayDate(date('Y-m-d H:i:s'),null , 1), '{carrier}' => $virtual_product ? Tools::displayError('No carrier') : $carrier->name, '{payment}' => Tools::substr($order->payment, 0, 32), '{products}' => $this->formatProductAndVoucherForEmail($products_list), '{discounts}' => $this->formatProductAndVoucherForEmail($cart_rules_list), '{total_paid}' => Tools::displayPrice($order->total_paid, $this->context->currency, false), '{total_products}' => Tools::displayPrice($order->total_paid - $order->total_shipping - $order->total_wrapping + $order->total_discounts, $this->context->currency, false), '{total_discounts}' => Tools::displayPrice($order->total_discounts, $this->context->currency, false), '{total_shipping}' => Tools::displayPrice($order->total_shipping, $this->context->currency, false), '{total_wrapping}' => Tools::displayPrice($order->total_wrapping, $this->context->currency, false), '{total_tax_paid}' => Tools::displayPrice(($order->total_products_wt - $order->total_products) + ($order->total_shipping_tax_incl - $order->total_shipping_tax_excl), $this->context->currency, false)); if (is_array($extra_vars)) $data = array_merge($data, $extra_vars); // Join PDF invoice if ((int)Configuration::get('PS_INVOICE') && $order_status->invoice && $order->invoice_number) { $pdf = new PDF($order->getInvoicesCollection(), PDF::TEMPLATE_INVOICE, $this->context->smarty); $file_attachement['content'] = $pdf->render(false); $file_attachement['name'] = Configuration::get('PS_INVOICE_PREFIX', (int)$order->id_lang, null, $order->id_shop).sprintf('%06d', $order->invoice_number).'.pdf'; $file_attachement['mime'] = 'application/pdf'; } else $file_attachement = null; if (Validate::isEmail($this->context->customer->email)) Mail::Send( (int)$order->id_lang, 'order_conf', Mail::l('Order confirmation', (int)$order->id_lang), $data, $this->context->customer->email, $this->context->customer->firstname.' '.$this->context->customer->lastname, null, null, $file_attachement, null, _PS_MAIL_DIR_, false, (int)$order->id_shop ); } listę zmiennych chyba widać dobrze Witam Dziekuje za szybką podpowiedź. rozumiem, że jest to klasa odpowiedzialna za przygotowanie zmiennych do wysyłki maila, nie zaś za zapis danych zamówienia do bazy. Czytałem kilka postów kolegi (m.in i pobieraniu danych z bazy dopisując funkcję we frontcontroler) i wpadłem tez na pomysł, że aby tego (tej klasy powyżej) nie modyfikować można by we frontcontrolerze dopisać funkcję, która pobierałaby z bazy dane zamówienia (czyli z bazy orders i order_detail, bo tam trigger już wszystko ładnie powyliczał) i odnosić się do niej w szablonach maili. Co kolega o tym sądzi ? Troche to partyzantka, ale sam modułu nie napisze, który mógłby zapisywać koszty do towarów. Dziękuje i pozdrawaim. (PS jak się uporam z tematem to chętnie przekaże innym chetnym) Link to comment Share on other sites More sharing options...
0 vekia Posted February 20, 2014 Share Posted February 20, 2014 Czytałem kilka postów kolegi (m.in i pobieraniu danych z bazy dopisując funkcję we frontcontroler) i wpadłem tez na pomysł, że aby tego (tej klasy powyżej) nie modyfikować można by we frontcontrolerze dopisać funkcję, która pobierałaby z bazy dane zamówienia (czyli z bazy orders i order_detail, bo tam trigger już wszystko ładnie powyliczał) i odnosić się do niej w szablonach maili. myślę, że może być, ale na jedno wyjdzie czy zmodyfikujemy front controller, czy klasę paymentmodule a nie lepiej mieć wszystko w jednym miejscu? Link to comment Share on other sites More sharing options...
0 Vipktor Posted February 20, 2014 Author Share Posted February 20, 2014 myślę, że może być, ale na jedno wyjdzie czy zmodyfikujemy front controller, czy klasę paymentmodule a nie lepiej mieć wszystko w jednym miejscu? I tu sie z kolegą zgodzę. Najlepiej mieć wszystko w jednym miejscu. Zauważyłem że w klasie paymentmodule jest kod odpowiedzialny za przepisanie koszyka do order_detail .... hmmm prowokuje mnie to do usunięcia triggera i ingerencji w ten kod. Dziękuje za pomoc. Zamkne post jak napiszę rozwiązanie. Pozdrawiam Link to comment Share on other sites More sharing options...
0 Vipktor Posted February 20, 2014 Author Share Posted February 20, 2014 I tu sie z kolegą zgodzę. Najlepiej mieć wszystko w jednym miejscu. Zauważyłem że w klasie paymentmodule jest kod odpowiedzialny za przepisanie koszyka do order_detail .... hmmm prowokuje mnie to do usunięcia triggera i ingerencji w ten kod. Dziękuje za pomoc. Zamkne post jak napiszę rozwiązanie. Pozdrawiam Posze jeszcze o podpowiedź: Jak zmienić wartość: $cart->getOrderTotal(true, Cart::ONLY_PRODUCTS); ??? Pozdrawiam P.S. Utknąłem przez to Link to comment Share on other sites More sharing options...
0 vekia Posted February 21, 2014 Share Posted February 21, 2014 można np. podstawić ją do zmiennej $value=$cart->getOrderTotal(true, Cart::ONLY_PRODUCTS); wtedy możesz robić co chcesz na zmiennej $value ale coś mi mówi, że nie o to pytasz... Link to comment Share on other sites More sharing options...
0 Vipktor Posted February 21, 2014 Author Share Posted February 21, 2014 można np. podstawić ją do zmiennej $value=$cart->getOrderTotal(true, Cart::ONLY_PRODUCTS); wtedy możesz robić co chcesz na zmiennej $value ale coś mi mówi, że nie o to pytasz... Tak. Kolego. To potrafię. Ale w takim wypadku $value dostępne jest od momentu przypisania i tym kodzie. Natomiast gdyby była możliwość : $cart->getOrderTotal(true, Cart::ONLY_PRODUCTS) = "jakas nowa wartość"; To byloby to czego potrzebuję. Pytanie tylko jak ? Czy się da ? Pozdrawiam Link to comment Share on other sites More sharing options...
0 vekia Posted February 21, 2014 Share Posted February 21, 2014 nie ma innej rady na to jak zmodyfikowanie funkcji getOrderTotal w klasie Cart Link to comment Share on other sites More sharing options...
0 Vipktor Posted February 21, 2014 Author Share Posted February 21, 2014 nie ma innej rady na to jak zmodyfikowanie funkcji getOrderTotal w klasie Cart Tego się obawiałem. Podpowiesz jak ? Bo ja nie potrafię. Jeśli nie to trudno. I tak bardzo Ci dziękuje za pomoc. Pozdrawiam Vi Link to comment Share on other sites More sharing options...
0 vekia Posted February 21, 2014 Share Posted February 21, 2014 w classes/Cart.php jest funkcja getOrderTotal (jest ona dość spora więc jej tu nie wkleję, sądzę jednak, że wiesz o co chodzi, więc nie ma potrzeby wklejania jej tutaj w całości) generalnie, najprościej rzecz ujmując, całość najistotniejszych operacji odbywa się na zmiennej $order_total i to ona jest zwracana. i to na niej musiałbyś wykonać odpowiednie operacje Link to comment Share on other sites More sharing options...
0 Vipktor Posted February 21, 2014 Author Share Posted February 21, 2014 Dziekuje. Będę działał przez weeckend. Życzę miłego weckendu i jeszcze raz dziękuje. Pozdrawiam Vi Link to comment Share on other sites More sharing options...
0 Vipktor Posted February 28, 2014 Author Share Posted February 28, 2014 Witam kolege ponownie. Ugrzązłem w Cart.php. Już prawie wszytskoł ładnie chodzi ale napotkałem problem z którym nie potrafię sobie poradzić. Otóż. Aby móc dodac cenę przesyłki do towaru to biorę koszty wysyłki ($przesylka) i dziele je na ilość towaru w koszytku (nbProducts()), po czym dodaje to co wyjedzie ($dolicz) do każdej sztuki towaru. $przesylka = $this->getOrderShippingCost(); lub$przesylka = $this->getOrderTotal(true, Cart::ONLY_SHIPPING); $dolicz = $przesylka / $this->nbProducts(); Ładnie chodzi ale przy pobieraniu kosztów wysyłki (linia wyboldowana poniżej) : ................................................. Cerd.php (public function getProducts) od linii 370: i dalej: // Thus you can avoid one query per product, because there will be only one query for all the products of the cart Product::cacheProductsFeatures($productsIds); self::cacheSomeAttributesLists($paIds, $this->id_lang); $this->_products = array(); if (empty($result)) return array(); $przesylka = $this->getOrderShippingCost(); lub $przesylka = $this->getOrderTotal(true, Cart::ONLY_SHIPPING); foreach ($result AS $row) { if (isset($row['ecotax_attr']) AND $row['ecotax_attr'] > 0) $row['ecotax'] = (float)($row['ecotax_attr']); $row['stock_quantity'] = (int)($row['quantity']);........................................................................................ wystarczy ze którąś z tych lini włącze i pojawia się problem z dodawaniem rabatów. Nie działa dodawanie rabatów ani ilościowych ani kosztwoych, żadnych. Czy Kolega mógłby zerknąć i może naprowadzi mnie gdzie moze być bład. Wkońcu przypisanie do zmiennej wartości funkcji nie powinno blokować niczego. Stoje już 3 dzień i nie mogę soebie z tym poradzić. Bardzo rposze o pomoc. Pozdrawiam Viktor Link to comment Share on other sites More sharing options...
Question
Vipktor
Mam pytanko do kolegów. Może ktoś wie.
W PS 1.4.4.1 w katalogu /mails są szablony z których korzysta presta do wysyłania powiadomień np o złożonym zamówieniu.
Pytanko:
Gdzie w preście definiowane są dane (zmienne) które następnie podstawiane są w szablonach /mails i wysyłane do klienta ?
Który plik ? klasa ? odpowiada w PS za wysyłanie tych powiadomień?
Będę wdzięczny za podpowiedź.
Link to comment
Share on other sites
14 answers to this question
Recommended Posts
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 accountSign in
Already have an account? Sign in here.
Sign In Now