К содержанию

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
4 013
Реклама

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

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

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

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

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

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

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

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

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

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

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

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

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

          В таблице modx_ms2_orders создал соответствующую колонку, но туда тоже ничего не попадает.
          Как увязать всю эту систему?
            Воеводский Михаил
            Воеводский Михаил Проверенный
            31 июля 2015, 19:52
            Увязать можно, но сломав возможность обновлений minishop2.
            Причина: стандартные таблицы менять нельзя.
              Даниил
              Даниил Старожил
              31 июля 2015, 20:24
              Ладно, наверное все же стоит перенять опыт от более разбирающихся в этой области людей. Написал Вам в скайп.
                Воеводский Михаил
                Воеводский Михаил Проверенный
                31 июля 2015, 20:45
                Никаких сообщений не получал.
                  Даниил
                  Даниил Старожил
                  31 июля 2015, 20:46
                  Можт без авторизации не доходят? Сейчас пришлю запрос на авторизацию.
            Максим Кузнецов
            Максим Кузнецов Проверенный
            01 августа 2015, 10:48
            Ничего себе вы тут развели..)
              Даниил
              Даниил Старожил
              09 августа 2015, 00:10
              Скоро выложу готовое решение, которое для меня любезно сделал Воеводский Михаил, за что ему огромная благодарность!
              Нужно только разобраться почему у меня в логах появляются ошибки. И насколько это может быть связано с добавленным функционалом.
              В ошибках массивы данных примерно следующего характера, что это?
              [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
                Это не ошибки. Видимо, где-то в коде я забыл убрать
                $modx->log(1,print_r($var,1));
                , где $var — любая переменная/массив.
                  Даниил
                  Даниил Старожил
                  09 августа 2015, 01:23
                  Да, действительно, нашел
                    alexwolf2006
                    alexwolf2006 Старожил
                    29 мая 2019, 15:29
                    Даниил, и где Вы выложили готовое решение? Мне позарез нужно сегодня решение!
                Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
                35