minishop2 задействовать доставку по расстоянию

Перекопал и этот сайт и много других, но ясного и четкого алгоритма как задействовать параметр distance_price так и не нашел. Можно ли это сделать не используя кастомный класс?

В файле core/components/minishop2/model/minishop2/msdeliveryhandler.class.php я раскомментировал строку $distance_price = $delivery->get('distance_price');
Как при этом должен выглядеть чанк ms_order_delivery, чтобы был инпут в который пользователь при выборе соответствующего способа доставки мог бы вписать расстояние в км. до пункта назначения? И конечно чтоб это все считалось затем правильно.
Даниил
31 июля 2015, 10:12
modx.pro
1
3 385
0

Комментарии: 35

Василий Наумкин
31 июля 2015, 13:30
0
Можно ли это сделать не используя кастомный класс?
Нет.

Это поле и предусмотрено для кастомного класса, потому что я без понятия, кто когда и как будет рассчитывать доставку с его помощью.
    Даниил
    31 июля 2015, 13:43
    0
    Ну а хотяб банальный примерчик с самым простым использованием можно? Чтобы выводился инпут для юзера, он вносил значение в км, а оно уже умножалось на стоимость ед/рст из настроек способа доставки.
      Василий Наумкин
      31 июля 2015, 13:47
      0
      Лично я ничего такого не делал, но в магазине примеров завались.
        Даниил
        31 июля 2015, 13:54
        0
        Да, я это все видел. Это готовые сложные компоненты, которые в моем случае не нужны совершенно. Мне всего-то нужно чтоб две цифры друг на друга перемножались, одна мной указанная, одна пользователем и потом это плюсовалось к общей стоимости… Вроде как дважды два звучит, но как это реализовать совершенно непонятно. Какие плейсхолдеры в чанке должны добавиться, как их значение в класс-обработчик должно попадать и выводиться… Нужно просто пару строк готового решения, а не здоровенный компонент
        Даниил
        31 июля 2015, 13:47
        -2
        Да и вообще я думаю это самое стандартное использование этого параметра, так сказать в базовом варианте. Наверное в этом виде бы его и в пакет minishop'а стоило бы включить, а дальше если вдруг заморочки какие-то более сложные — тогда уже чтоб через кастомные классы можно было б менять
          Воеводский Михаил
          31 июля 2015, 13:52
          0
          Не базовый это функционал.
          Иначе, если что-то сделать в базе, всегда найдется еще какая-то близкая мелочь, которую
          в этом виде бы его и в пакет minishop'а стоило бы включить
          Так что, относитесь к этому полю как к простейшему упрощению для расширяющего класса.
            Василий Наумкин
            31 июля 2015, 14:01
            +1
            Самое стандартное — это чтобы юзер сам вводил расстояние доставки до себя в километрах?

            Ты где такие магазины вообще видел, покажи если не трудно?
              Даниил
              31 июля 2015, 14:31
              0
              Попадались, счас уже не вспомню… Вообще вот например есть даже плагин такой готовый, который явно в каких-то магазинах установлен
            Воеводский Михаил
            31 июля 2015, 13:49
            0
            Вряд ли кто напишет, ибо такой примерчик — почти половина готового дополнения с нужным функционалом. Если есть необходимость и желание — здесь можно разместить соответствующее объявление.
              Даниил
              31 июля 2015, 14:02
              0
              Такой примерчик очень нужен в базовом дистрибутиве, был бы полезен и очень удобен! Ну ведь есть же функционал по фиксированному добавлению стоимости за доставку и все пользуются — ну ведь прав да же стандартно и нужно… Хотя кому-то нужно чтоб до 10000 р. стоимость доставки такая-то, после 10000 р. такая-то, после 30000 например и вообще бесплатно, ну либо еще что там — вот тут и нужны классы, да, согласен! Но почему с километражем так ситуация не обстоит — непонятно(
                Воеводский Михаил
                31 июля 2015, 14:06
                +1
                Откуда брать расстояние?
                Как считать — прямое расстояние от магазина до покупателя или расстояние по дорогам? С учетом пробок или нет? А может, расстояние вообще по водным путям должно рассчитываться?

                Невозможно заранее заложить всю эту логику, поэтому любые вариации стоимости доставки, кроме фиксированной, должны реализовываться в расширяющих классах.
                  Даниил
                  31 июля 2015, 14:35
                  0
                  Есть адрес магазина, либо склада. Естественно этот вариант будет использоваться только для доставки по городу, либо за город. Неужели пользователь не в курсе как далеко он от этого места? Не думаю.
                    Воеводский Михаил
                    31 июля 2015, 14:45
                    0
                    Пользователь не знает. Простейший пример из жизни: на навигаторе ищу какой-то объект, в списке вижу расстояние 6 км, но когда создается маршрут, то по дорогам получается уже 11 км.

                    Внимание, вопросы:
                    1. Какое расстояние в аналогичной ситуации укажет покупатель?
                    2. Откуда он знает точное расстояние?
                    3. Так ли хорошо все знают свой город, чтобы мгновенно рассчитывать расстояние между двумя точками?
                    4. Если укажет 6 км, разница в 5 км — издержки магазина?
                    5. А если укажет 3 км?

                    Расстояние от КАД (МКАД) — аналогичная ситуация, только расхождение еще больше.
                      Даниил
                      31 июля 2015, 14:50
                      0
                      Да, такой вариант возможен. Но есть менеджер, который это все дело как раз и должен проверить и уточнить. При необходимости он свяжется с пользователем. И все же это меньшинство случаев. Но если не сделать данное поле, то связываться придется абсолютно с каждым пользователем и в каждом заказе исправлять его конечную стоимость — что, согласитесь, еще хуже.
                        Воеводский Михаил
                        31 июля 2015, 14:54
                        0
                        Суть — сделать возможным расчет полной стоимости заказа и мгновенной оплаты.

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

                        Либо же реализовать нужную для определенного магазина логику расчета, чтобы тому же менеджеру не надо было вообще задумываться о проверке стоимости доставки.
                    Даниил
                    31 июля 2015, 14:44
                    0
                    Да и где это все требуется как раз и используется то, о чем говорит Василий. Я же говорю о самом стандартном варианте, где вся эта логика не требуется. Система скидок то же ведь не идет «из коробки», хотя она и требуется в очень большом количестве случаев, мы ее отдельно прикручиваем. Но тем не менее простая логика например умножения стоимости товара на его количество все же идет как раз «из коробки».
                      Воеводский Михаил
                      31 июля 2015, 14:47
                      0
                      Не путайте мух с котлетами.

                      Базовая логика — сложение и перемножение фиксированных значений, которые напрямую покупателем не вводятся. Дополнительные условия — расширенная логика.
                        Даниил
                        31 июля 2015, 14:56
                        0
                        Хорошо, я действительно понимаю, что возможно я не прав на счет включения этого функционала в магазин, т.к. нужно оно не всем. Но тем не менее важность этой штуки для меня сейчас, все же не уменьшается. Думаю очень полезно было бы выложить внешний вид чанка и класса для реализации этой задачи в «готовых решениях». Тем более подобные вопросы в сообществе уже были. Просто действительно не понятно как это правильно организовать(
                          Воеводский Михаил
                          31 июля 2015, 15:27
                          +1
                          Если действительно нужно — могу сделать, но не бесплатно.
                          Напишите в скайп: whiteflag.ru
                            Даниил
                            31 июля 2015, 19:14
                            0
                            Я бы хотел разобраться сам, а затем выложить во всеобщее пользование способ. Бесплатно и для всех!
                              Василий Наумкин
                              31 июля 2015, 19:35
                              0
                              Ну так и разберись сам — зачем вопросы тогда задавать?

                              Странные люди, ей богу.
                              Даниил
                              31 июля 2015, 19:50
                              0
                              Было бы от чего оттолкнуться, уже бы разобрался. Вот уже 6-й час ковыряю модкспро и безумкина в поисках хоть чего-то, что помогло бы. Инфы много, но почти везде есть непонятные мне моменты, что приводит в тупик… Плагином пробовал, исходники менять пробовал… А что-то толку нет, не могу процесс понять и осилить, как ловить это значение и как использовать
                              Воеводский Михаил
                              31 июля 2015, 19:53
                              0
                              Исходники компонентов дают ответы быстрее и полнее, чем форумы.
                              Василий Наумкин
                              31 июля 2015, 20:24
                              0
                              Сам разобраться не можешь, готовые дополнения покупать не хочешь, за помощь платить тоже не хочешь.

                              Я так понял, единственный приемлемый для тебя вариант, это заколебать кого-нибудь, чтобы он выложил готовое решение.

                              Меня — не получится, извини.
                              Даниил
                              31 июля 2015, 20:29
                              0
                              А тебя и стыдно) Ты итак слишком много пользы всем в мире принес! Да не, я надеялся просто что подскажут те люди кто уже осилил дорогу на которой я сейчас и у которых я не отниму больше времени чем на скопировать-вставить код.
          Даниил
          31 июля 2015, 19:13
          0
          В чанке плейсхолдер сделал плейсхолдер km
          <input type "text" name="distance_price" value="[[+km]]" id="distance_price">
          Почему в моем кастомном классе не получается достать его вот так?
          $add_km = $delivery->get('km');

          В таблице modx_ms2_orders создал соответствующую колонку, но туда тоже ничего не попадает.
          Как увязать всю эту систему?
            Воеводский Михаил
            31 июля 2015, 19:52
            0
            Увязать можно, но сломав возможность обновлений minishop2.
            Причина: стандартные таблицы менять нельзя.
              Даниил
              31 июля 2015, 20:24
              0
              Ладно, наверное все же стоит перенять опыт от более разбирающихся в этой области людей. Написал Вам в скайп.
                Воеводский Михаил
                31 июля 2015, 20:45
                0
                Никаких сообщений не получал.
                  Даниил
                  31 июля 2015, 20:46
                  0
                  Можт без авторизации не доходят? Сейчас пришлю запрос на авторизацию.
            Максим Кузнецов
            01 августа 2015, 10:48
            +3
            Ничего себе вы тут развели..)
              Даниил
              09 августа 2015, 00:10
              0
              Скоро выложу готовое решение, которое для меня любезно сделал Воеводский Михаил, за что ему огромная благодарность!
              Нужно только разобраться почему у меня в логах появляются ошибки. И насколько это может быть связано с добавленным функционалом.
              В ошибках массивы данных примерно следующего характера, что это?
              [2015-08-09 00:48:10] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
              )
              
              [2015-08-09 00:48:11] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
              )
              
              [2015-08-09 00:48:11] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
              )
              
              [2015-08-09 00:48:12] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 1
                  [properties] => {"distance":1}
              )
              
              [2015-08-09 00:48:17] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 1
                  [properties] => {"distance":1}
              )
              
              [2015-08-09 00:48:17] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 
                  [properties] => {"distance":0}
              )
              
              [2015-08-09 00:48:19] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 
                  [properties] => {"distance":0}
              )
              
              [2015-08-09 00:48:22] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 
                  [properties] => {"distance":0}
              )
              
              [2015-08-09 00:48:23] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 
                  [properties] => {"distance":0}
              )
              
              [2015-08-09 00:48:23] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 1
                  [properties] => {"distance":1}
              )
              
              [2015-08-09 00:48:23] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 1
                  [properties] => {"distance":1}
              )
              
              [2015-08-09 00:48:23] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 11
                  [properties] => {"distance":2}
              )
              
              [2015-08-09 00:48:30] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 11
                  [properties] => {"distance":2}
              )
              
              [2015-08-09 00:48:30] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 1
                  [properties] => {"distance":1}
              )
              
              [2015-08-09 00:48:30] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 1
                  [properties] => {"distance":1}
              )
              
              [2015-08-09 00:48:30] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 12
                  [properties] => {"distance":2}
              )
              
              [2015-08-09 00:48:35] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 1
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 12
                  [properties] => {"distance":2}
              )
              
              [2015-08-09 00:48:35] (ERROR @ /assets/components/minishop2/action.php) Array
              (
                  [delivery] => 4
                  [payment] => 4
                  [receiver] => Тест Тестович
                  [email] => electropochta@mail.ru
                  [properties.distance] => 12
                  [properties] => {"distance":2}
              )
              
              [2015-08-09 00:49:54] (ERROR @ /connectors/lang.js.php) Error caching action map mgr/actions
                Воеводский Михаил
                09 августа 2015, 00:22
                0
                Это не ошибки. Видимо, где-то в коде я забыл убрать
                $modx->log(1,print_r($var,1));
                , где $var — любая переменная/массив.
                  Даниил
                  09 августа 2015, 01:23
                  0
                  Да, действительно, нашел
                    alexwolf2006
                    29 мая 2019, 15:29
                    0
                    Даниил, и где Вы выложили готовое решение? Мне позарез нужно сегодня решение!
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                35