способы доставки Есть решение

Как получить способы доставки в своем плагине?

Или как вызвать ф-ию calculate плагина доставки, чтобы он пересчитал доставку с новыми данными?

Открыто обратиться к ф-ии нельзя, тк это приватная ф-ия, а переопределить ее нельзя....

2 ответа

  • 2
    Максим Сердюков 26 сентября 2019 09:40 # Решение

    Вот пример который позволит вызвать расчет стоимости доставки откуда угодно. Но, если вы делаете свой плагин и хотите его продавать официально, то такой код не пройдет модерацию.

    Плагин не должен зависеть от плагина. Это правило описано в разработке плагинов.

    wa('shop');
    
    // Страшный способ
    // boxberry это id плагина из папки wa-shipping
    // 25 это id плагина в таблице shop_plugin
    $plugin = waShipping::factory('boxberry', '25', shopShipping::getInstance());
    $method = (new ReflectionMethod($plugin, 'calculate'));
    $method->setAccessible(true);
    $reflection_rates = $method->invoke($plugin);
    
    // Классический способ
    $plugin = waShipping::factory('boxberry', '25', shopShipping::getInstance());
    $rates = $plugin->getRates();

    • +1
      Enzo Enzo 26 сентября 2019 09:42 #

      Спасибо, мне для личных целей...

    • +1
      Enzo Enzo 26 сентября 2019 10:31 #

      Может вы знаете почему getAddress() ф-я не хочет получать значения города и тд, при обращении к ф-ии calculate из своего плагина?!

      • +2
        Максим Сердюков Максим Сердюков 26 сентября 2019 11:44 #

        Почитайте этот метод.
        Доставке чтобы работать с адресом, нужно чтобы кто-то его установил.

        wa-system/shipping/waShipping.class.php::getRates() 

        В целом если вы хотите реализовать расчет стоимости доставки, то начните с того, что изучите как это делает Shop-Script. 

        wa-apps/shop/lib/classes/shopHelper.class.php::getShippingMethods()

        Потому что есть ощущение, что вы сейчас занимаетесь брутфорс кодингом и просто пытаетесь подобрать код, а не написать его.

        Для целей понимания кода, полезно использовать xDebug.

  • 2
    info 23 сентября 2019 16:34 #
    Открыто обратиться к ф-ии нельзя

    на случай крайних затруднений

    <?php
    class Foo {
       private function myPrivateMethod() {
         return 7;
       }
     }
    $method = new ReflectionMethod('Foo', 'myPrivateMethod');
    $method->setAccessible(true);
     echo $method->invoke(new Foo);

    • +1
      Enzo Enzo 26 сентября 2019 07:59 #

      Спасибо большое) Но это не подходит, говорит нет такого класса. Этот вариант не подошел

Добавить ответ

Чтобы добавить комментарий, зарегистрируйтесь или войдите