Skocz do zawartości
ircykk

[Moduł] ShipToPay (ship2pay) dla PrestaShop 1.6

Rekomendowane odpowiedzi

Brakuje styli css, a co jeśli wyłączysz moduł bez odinstalowywania lub wyłączysz nadpisywania w ustawieniach wydajności?

 

Jeśli go po prostu wyłączę to tornado pozostaje :)

Nadpisywanie mam wyłączone, znaczy ustawione na nie

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Nadpisywania na nie czyli są włączone tak? Jeśli zmieni się na tak to się je wyłącza i co wtedy się dzieje?

Dzięki umiejętność czytania przydaję się w życiu szczególnie ze zrozumieniem.

 

Wyłączyłem i jest wszystko w porządku dzięki za świetny moduł.

 

I za łopatologie :)  

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Moduł nie będzie działał jeśli to wyłączysz :) i inne moduły też przy okazji. Chodziło tylko o sprawdzenie problemu.

Musi być coś skopane ale bez grzebania w kodzie nie bardzo będzie można ustalić skąd te problemy.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Moduł nie będzie działał jeśli to wyłączysz :) i inne moduły też przy okazji. Chodziło tylko o sprawdzenie problemu.

Musi być coś skopane ale bez grzebania w kodzie nie bardzo będzie można ustalić skąd te problemy.

Tak właśnie teraz sprawdzałem :) i analizowałem temat od początku co jeszcze źle jest ustawione :) 

czyli muszę pogrzebać w kodzie, a gdzie dokładnie.

Mówiłeś że niema css czyli muszę w szablonie zobaczyć.  Tylko gdzie zacząć jak rozsypuje się head to pewnie hooks.css lub global.css

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Hej mam rozwiązanie jak by ktoś miał kiedyś ten problem tzn. Tornado w head :)

 

to należy podmienić zawartość pliku override/classes/Hook.php na tą poniżej trochę pozmieniałem i działa nawet bardzo fajnie dziękuję za wszelką pomoc the most of all Ircykk :)

<?php

class Hook extends HookCore {

        public static function getHookModuleExecList($hook_name = null)
    {
        $context = Context::getContext();
        $cache_id = 'hook_module_exec_list_'.(isset($context->shop->id) ? '_'.$context->shop->id : '').((isset($context->customer)) ? '_'.$context->customer->id : '');
        if (!Cache::isStored($cache_id) || $hook_name == 'displayPayment' || $hook_name == 'displayBackOfficeHeader') {
            $frontend = true;
            $groups = array();
            $use_groups = Group::isFeatureActive();
            if (isset($context->employee)) {
                $frontend = false;
            } else {
                // Get groups list
                if ($use_groups) {
                    if (isset($context->customer) && $context->customer->isLogged()) {
                        $groups = $context->customer->getGroups();
                    } elseif (isset($context->customer) && $context->customer->isLogged(true)) {
                        $groups = array((int)Configuration::get('PS_GUEST_GROUP'));
                    } else {
                        $groups = array((int)Configuration::get('PS_UNIDENTIFIED_GROUP'));
                    }
                }
            }

            // SQL Request
            $sql = new DbQuery();
            $sql->select('h.`name` as hook, m.`id_module`, h.`id_hook`, m.`name` as module, h.`live_edit`');
            $sql->from('module', 'm');
            if ($hook_name != 'displayBackOfficeHeader') {
                $sql->join(Shop::addSqlAssociation('module', 'm', true, 'module_shop.enable_device & '.(int)Context::getContext()->getDevice()));
                $sql->innerJoin('module_shop', 'ms', 'ms.`id_module` = m.`id_module`');
            }
            $sql->innerJoin('hook_module', 'hm', 'hm.`id_module` = m.`id_module`');
            $sql->innerJoin('hook', 'h', 'hm.`id_hook` = h.`id_hook`');
            if ($hook_name != 'displayPayment') {
                $sql->where('h.name != "displayPayment"');
            }
            // For payment modules, we check that they are available in the contextual country
            elseif ($frontend) {
                if (Validate::isLoadedObject($context->country)) {
                    $sql->where('(h.name = "displayPayment" AND (SELECT id_country FROM '._DB_PREFIX_.'module_country mc WHERE mc.id_module = m.id_module AND id_country = '.(int)$context->country->id.' AND id_shop = '.(int)$context->shop->id.' LIMIT 1) = '.(int)$context->country->id.')');
                }
                if (Validate::isLoadedObject($context->currency)) {
                    $sql->where('(h.name = "displayPayment" AND (SELECT id_currency FROM '._DB_PREFIX_.'module_currency mcr WHERE mcr.id_module = m.id_module AND id_currency IN ('.(int)$context->currency->id.', -1, -2) LIMIT 1) IN ('.(int)$context->currency->id.', -1, -2))');
                }
            }
            if (Validate::isLoadedObject($context->shop)) {
                $sql->where('hm.id_shop = '.(int)$context->shop->id);
            }

            if ($frontend) {
                if ($use_groups) {
                    $sql->leftJoin('module_group', 'mg', 'mg.`id_module` = m.`id_module`');
                    if (Validate::isLoadedObject($context->shop)) {
                        $sql->where('mg.id_shop = '.((int)$context->shop->id).(count($groups) ? ' AND  mg.`id_group` IN ('.implode(', ', $groups).')' : ''));
                    } elseif (count($groups)) {
                        $sql->where('mg.`id_group` IN ('.implode(', ', $groups).')');
                    }
                }
            }

            $sql->groupBy('hm.id_hook, hm.id_module');
            $sql->orderBy('hm.`position`');

            $results = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql);
            $list = array();

                        // Get all available payment module
                        $payment_modules = array();

                        // sip2pay
                        $shiptopay_active = Configuration::get('SHIPTOPAY_ACTIVE') && isset($context->cart->id_carrier) && !$context->cart->isVirtualCart() && $hook_name == 'displayPayment' ? true : false;
                        if ($shiptopay_active) {
                                $payments = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS('SELECT id_payment FROM `' . _DB_PREFIX_ . 'shiptopay` WHERE id_carrier = ' . (int) $context->cart->id_carrier);
                                $pArr = array();
                                if (count($payments)) {
                                        foreach ($payments as $p) {
                                                $pArr[] = $p['id_payment'];
                                        }
                                }
                        }
            if ($results) {
                //if ($result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql)) {
                foreach ($results as $row) {

                                        // ship2pay
                                        if (!$shiptopay_active || in_array($row['id_module'], $pArr)) {
                                                $row['hook'] = strtolower($row['hook']);
                                                if (!isset($list[$row['hook']])) $list[$row['hook']] = array();

                                                $list[$row['hook']][] = array(
                                                    'id_hook' => $row['id_hook'],
                                                    'module' => $row['module'],
                                                    'id_module' => $row['id_module'],
                                                    'live_edit' => $row['live_edit'],
                                                );
                                        }
                                }
                        }
            if ($hook_name != 'displayPayment' && $hook_name != 'displayBackOfficeHeader') {
                Cache::store($cache_id, $list);
                // @todo remove this in 1.6, we keep it in 1.5 for backward compatibility
                self::$_hook_modules_cache_exec = $list;
            }
        } else {
            $list = Cache::retrieve($cache_id);
        }

        // If hook_name is given, just get list of modules for this hook
        if ($hook_name) {
            $retro_hook_name = strtolower(Hook::getRetroHookName($hook_name));
            $hook_name = strtolower($hook_name);

            $return = array();
            $inserted_modules = array();
            if (isset($list[$hook_name])) {
                $return = $list[$hook_name];
            }
            foreach ($return as $module) {
                $inserted_modules[] = $module['id_module'];
            }
            if (isset($list[$retro_hook_name])) {
                foreach ($list[$retro_hook_name] as $retro_module_call) {
                    if (!in_array($retro_module_call['id_module'], $inserted_modules)) {
                        $return[] = $retro_module_call;
                    }
                }
            }

            return (count($return) > 0 ? $return : false);
        } else {
            return $list;
        }
    }

}

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Witam,

Mam pytanie - zainstalowalismy ship2pay na prescie 1.6.1.4 i mamy nastepujacy problem:
wydaje sie, ze wszystko skonfigurowane jest poprawnie, jednak jezeli podczas zamowienia wybierzemy przewoznika, ktory ustawiony jest jako domyslny, to modul zwraca infomacje przy platnosci "Moduły płatności nie zostały zainstalowane."

jezeli cofniemy sie do poprzedniego kroku, sprobujemy jakakolwiek inna forme wysylki, damy dalej, co poprawnie pokaze opcje platnosci i wtedy znowu damy do tylu, to rowniez domyslna forma dostawy bedzie dzialac

tak samo, jesli na samym poczatku wybierzemy kazda inna forme wysylki niz ta, ktora ustawiona jest jako domyslna - rowniez bedzie dzialac bez zarzutu

czy ktos spotkal sie z podobnym problemem??

- overrides wlaczone
- moduly niestand. rowniez
- cache itd. wylaczone
- debug nie zwraca zadnych komunikatow
- tabela ps_shiptopay zawiera poprawne wartosci
- hooks ok -> actionCarrierUpdate
- moduly platnosci aktywne
- po wylaczeniu ship2pay wszystko dziala elegancko
- wersja ship2pay 2.0
 

 

ponizej zawartosc pliku hook.php
 

<?php

class Hook extends HookCore
{
    public static function getHookModuleExecList($hook_name = null)
    {
        $context = Context::getContext();
        $cache_id = 'hook_module_exec_list_'.(isset($context->shop->id) ? '_'.$context->shop->id : '' ).((isset($context->customer)) ? '_'.$context->customer->id : '');
        if (!Cache::isStored($cache_id) || $hook_name == 'displayPayment' || $hook_name == 'displayBackOfficeHeader')
        {
            $frontend = true;
            $groups = array();
            $use_groups = Group::isFeatureActive();
            if (isset($context->employee))
                $frontend = false;
            else
            {
                // Get groups list
                if ($use_groups)
                {
                    if (isset($context->customer) && $context->customer->isLogged())
                        $groups = $context->customer->getGroups();
                    elseif (isset($context->customer) && $context->customer->isLogged(true))
                        $groups = array((int)Configuration::get('PS_GUEST_GROUP'));
                    else
                        $groups = array((int)Configuration::get('PS_UNIDENTIFIED_GROUP'));
                }
            }
            
            // SQL Request
            $sql = new DbQuery();
            $sql->select('h.`name` as hook, m.`id_module`, h.`id_hook`, m.`name` as module, h.`live_edit`');
            $sql->from('module', 'm');
            if ($hook_name != 'displayBackOfficeHeader')
            {
                $sql->join(Shop::addSqlAssociation('module', 'm', true, 'module_shop.enable_device & '.(int)Context::getContext()->getDevice()));
                $sql->innerJoin('module_shop', 'ms', 'ms.`id_module` = m.`id_module`');
            }
            $sql->innerJoin('hook_module', 'hm', 'hm.`id_module` = m.`id_module`');
            $sql->innerJoin('hook', 'h', 'hm.`id_hook` = h.`id_hook`');
            if ($hook_name != 'displayPayment')
                $sql->where('h.name != "displayPayment"');
            // For payment modules, we check that they are available in the contextual country
            elseif ($frontend)
            {
                // ShipToPay remove fix (override still exists but module not)
                if(Module::getInstanceByName('shiptopay')->active)
                    $sql->innerJoin('shiptopay', 'stp', 'stp.`id_payment` = m.`id_module` AND stp.`id_carrier` = ' . (int)$context->cart->id_carrier . ' AND stp.`id_shop` = ' . (int)$context->shop->id);

                if (Validate::isLoadedObject($context->country))
                    $sql->where('(h.name = "displayPayment" AND (SELECT id_country FROM '._DB_PREFIX_.'module_country mc WHERE mc.id_module = m.id_module AND id_country = '.(int)$context->country->id.' AND id_shop = '.(int)$context->shop->id.' LIMIT 1) = '.(int)$context->country->id.')');
                if (Validate::isLoadedObject($context->currency))
                    $sql->where('(h.name = "displayPayment" AND (SELECT id_currency FROM '._DB_PREFIX_.'module_currency mcr WHERE mcr.id_module = m.id_module AND id_currency IN ('.(int)$context->currency->id.', -1, -2) LIMIT 1) IN ('.(int)$context->currency->id.', -1, -2))');
            }
            if (Validate::isLoadedObject($context->shop))
                $sql->where('hm.id_shop = '.(int)$context->shop->id);

            if ($frontend)
            {
                if ($use_groups)
                {
                    $sql->leftJoin('module_group', 'mg', 'mg.`id_module` = m.`id_module`');
                    if (Validate::isLoadedObject($context->shop))
                        $sql->where('mg.id_shop = '.((int)$context->shop->id).' AND  mg.`id_group` IN ('.implode(', ', $groups).')');
                    else
                        $sql->where('mg.`id_group` IN ('.implode(', ', $groups).')');
                }
            }

            $sql->groupBy('hm.id_hook, hm.id_module');
            $sql->orderBy('hm.`position`');

            $list = array();
            if ($result = Db::getInstance(_PS_USE_SQL_SLAVE_)->executeS($sql))
                foreach ($result as $row)
                {
                    $row['hook'] = strtolower($row['hook']);
                    if (!isset($list[$row['hook']]))
                        $list[$row['hook']] = array();

                    $list[$row['hook']][] = array(
                        'id_hook' => $row['id_hook'],
                        'module' => $row['module'],
                        'id_module' => $row['id_module'],
                        'live_edit' => $row['live_edit'],
                    );
                }
            if ($hook_name != 'displayPayment' && $hook_name != 'displayBackOfficeHeader')
            {
                Cache::store($cache_id, $list);
                // @todo remove this in 1.6, we keep it in 1.5 for retrocompatibility
                self::$_hook_modules_cache_exec = $list;
            }
        }
        else
            $list = Cache::retrieve($cache_id);

        // If hook_name is given, just get list of modules for this hook
        if ($hook_name)
        {
            $retro_hook_name = strtolower(Hook::getRetroHookName($hook_name));
            $hook_name = strtolower($hook_name);

            $return = array();
            $inserted_modules = array();
            if (isset($list[$hook_name]))
                $return = $list[$hook_name];
            foreach ($return as $module)
                $inserted_modules[] = $module['id_module'];
            if (isset($list[$retro_hook_name]))
                foreach ($list[$retro_hook_name] as $retro_module_call)
                    if (!in_array($retro_module_call['id_module'], $inserted_modules))
                        $return[] = $retro_module_call;

            return (count($return) > 0 ? $return : false);
        }
        else
            return $list;
    }
}

 

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

A testowałeś na domyślnym szablonie?

W zasadzie to jest domyslny szablon bootstrap z drobnymi modyfikacjami, podmienialem tez carriers tpl ze starszej wersji presty i poza rozjechanymi stylami zero roznicy. Jak mialbys chwile to podeslij IP - podesle link do strony

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

 

Witam,

 

Mam pytanie - zainstalowalismy ship2pay na prescie 1.6.1.4 i mamy nastepujacy problem...

 

Witam.

Mam identyczny problem, i również 1.6.1.4 i domyślny szablon z modyfikacjami.

Btw. wszystkie pliki tpl związane z zamowieniem (czyli order-coś_tam) podmieniłem na te z najnowszego domyślnego szablonu i nic nie pomogło.

Chwilowo edytowałem pliki tpl modułów płatności wg. wskazówek:

http://arnaud-merigeau.fr/mode-de-paiement-selon-transporteur-dans-prestashop/

ale moduł był by zdecydowanie lepszym rozwiązaniem ;)

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Witam.

Mam identyczny problem, i również 1.6.1.4 i domyślny szablon z modyfikacjami.

Btw. wszystkie pliki tpl związane z zamowieniem (czyli order-coś_tam) podmieniłem na te z najnowszego domyślnego szablonu i nic nie pomogło.

Chwilowo edytowałem pliki tpl modułów płatności wg. wskazówek:

http://arnaud-merigeau.fr/mode-de-paiement-selon-transporteur-dans-prestashop/

ale moduł był by zdecydowanie lepszym rozwiązaniem ;)

 

Witam,

 

Ja ostatecznie, jako ze bylem pod presja czasu zakupilem modul z addons Presty - Payment restriction by Carrier i po instalacji okazalo sie, ze ten sam problem....

Napisalem do developera z prosba o pomoc i okazalo sie, ze problem byl po stronie modulu (domyslam sie, ze w Ship2Pay jest ten sam). Niestety nie mam zadnych szczegolow poza "(...) that i found the bug. It was a specific configuration combination that the module could not handle.

 

I just updated the module and it is now works fine."

 

Tak czy siak teraz smiga elegancko

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Dzięki za info, być może coś się zmieniło w nowej wersji PS i nie działa jak powinno. Zajmę się tym w najbliższych dniach i postaram się wyeliminować ten bug.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

I jak, udało Ci się poprawić moduł? Ja mam ten sam problem - presta 1.6.1.4 i przy multishopie wariuje, mimo prawidłowej konfiguracji nie wyświetla się odbiór osobisty a przy wyborze przewoźnika klientowi wyświetlają się wszystkie zainstalowane w sklepie metody płatności. Dodam, że na sklepie o identycznej konfiguracji tylko bez multishopu moduł działa poprawnie.

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Moduł mojego autorstwa dostosowany do PrestaShop 1.6x (nie działa na starszych wersjach).

 

Zmiany w stosunku do wersji 1.x:

  • Obsługa Multistore
  • Poprawka resetowania się ustawień przy edycji dostawcy
  • Kilka mniejszych poprawek

Przed instalacją koniecznie odinstaluj starsze wersje/inne podobne moduły przez deinstalację w zakładce MODUŁY.

Jeśli nie widać efektów działania modułu sprawdź opcje Wydajność > Wyłącz moduły nie od PrestaShop oraz Wyłącz wszystkie nadpisywania muszą być koniecznie wyłączone.

 

Moduł wstępnie przetestowany, wszelakie uwagi mile widziane.

 

 

Rozumiem że przed instalacja jak nie miałem instalowanych żadnych tego typu modułów mogę śmiało zainstalować . Co z modułem standardowym 

Płatność przy odbiorze v0.7.5      Mam go odinstalować, wyłączyć czy usunąć ??

 

P.S Ten moduł rozwiąże mi problem jeżeli klient na końcu chce zapłacić przy odbiorze będzie miał zablokowana przedpłatę? albo mu naliczy więcej? Teraz mam dostępne wszystkie wybory przesyłki :/

Udostępnij tego posta


Odnośnik do posta
Udostępnij na innych stronach

Jeśli chcesz dodać odpowiedź, zaloguj się lub zarejestruj nowe konto

Jedynie zarejestrowani użytkownicy mogą komentować zawartość tej strony.

Zarejestruj nowe konto

Załóż nowe konto. To bardzo proste!

Zarejestruj się

Zaloguj się

Posiadasz już konto? Zaloguj się poniżej.

Zaloguj się



  • Przeglądający

    Brak zarejestrowanych użytkowników, przeglądających tę stronę.

  • Aktywni użytkownicy

    Nikt jeszcze nie otrzymał reputacji w tym tygodniu.

  • Statystyki forum

    • Tematów
      7 670
    • Postów
      36 878
×