ms_CDEK2 возвращается!
Знаю, все этого ждали и это произошло, компонент снова доступен на modstore. Пользуйтесь. Список изменений под катом
1. Удалены устаревшие файлы, настройки и лексиконы.
2. Сниппет ms_CDEK2 больше не нужен. Компонент инициализируется автоматически на страницах с указанным в системных настройках шаблонами.
3. Виджет, который так любезно разработал для нас СДЭК, я тоже выкинул, поскольку он имел склонность грузиться долго или не грузиться вообще. Вместо него я написал свою простенькую инициализацию карты с минимальным набором функций, но зато на третьей версии API Яндекс.Карт и с возможностью управлять картой как душе угодно, если вы шарите за JS и работу с картами от Яндекса. В целом, можно картой не пользоваться вовсе, пусть пользователь выбирает из обычного списка)))
4. Поскольку для расчёта стоимости доставки требуется только почтовый индекс, использовать автодополнения от СДЭК бессмысленно, поэтому был настроен автокомплит адреса от DaData. Он бесплатный до 10000 запросов в сутки.
5. Страна отправителя указывается в системных настройках. Страна получателя передаётся через стандартное поле адреса — country и для получения кода страны используется сервис DaData, если код не будет получен компонент использует код отправителя.
6. Логи больше не выводятся в журнал ошибок Modx, а пишутся в директорию core/components/ms_cdek2/services/logs.
7. Добавлены события в как системные, так и браузерные для возможности дополнять и изменять логику работы.
8. Компонент теперь требует обязательного установленного SendIt.
9. Расчёт стоимости происходит по коду тарифа, больше никаких переборов и гаданий. Код тарифа должен быть указан либо в описании способа доставки, либо на вкладке Параметры в интерфейсе настройки способа оплаты.
10. Для ускорения работы и экономии запросов используется серверное и браузерное кеширование.
Приятного использования!
1. Удалены устаревшие файлы, настройки и лексиконы.
2. Сниппет ms_CDEK2 больше не нужен. Компонент инициализируется автоматически на страницах с указанным в системных настройках шаблонами.
3. Виджет, который так любезно разработал для нас СДЭК, я тоже выкинул, поскольку он имел склонность грузиться долго или не грузиться вообще. Вместо него я написал свою простенькую инициализацию карты с минимальным набором функций, но зато на третьей версии API Яндекс.Карт и с возможностью управлять картой как душе угодно, если вы шарите за JS и работу с картами от Яндекса. В целом, можно картой не пользоваться вовсе, пусть пользователь выбирает из обычного списка)))
4. Поскольку для расчёта стоимости доставки требуется только почтовый индекс, использовать автодополнения от СДЭК бессмысленно, поэтому был настроен автокомплит адреса от DaData. Он бесплатный до 10000 запросов в сутки.
5. Страна отправителя указывается в системных настройках. Страна получателя передаётся через стандартное поле адреса — country и для получения кода страны используется сервис DaData, если код не будет получен компонент использует код отправителя.
6. Логи больше не выводятся в журнал ошибок Modx, а пишутся в директорию core/components/ms_cdek2/services/logs.
7. Добавлены события в как системные, так и браузерные для возможности дополнять и изменять логику работы.
8. Компонент теперь требует обязательного установленного SendIt.
9. Расчёт стоимости происходит по коду тарифа, больше никаких переборов и гаданий. Код тарифа должен быть указан либо в описании способа доставки, либо на вкладке Параметры в интерфейсе настройки способа оплаты.
10. Для ускорения работы и экономии запросов используется серверное и браузерное кеширование.
Приятного использования!
Поблагодарить автора
Отправить деньги
Комментарии: 53
Привет, почему лог в
Хочется отдельный файл лога — почему не положить рядом со стандартным errors.log что-то типа
core/components/ms_cdek2/services/logs
он же там потом разрастаться будет и никто из разработчиков про это помнить не будет.Хочется отдельный файл лога — почему не положить рядом со стандартным errors.log что-то типа
core/cache/logs/cdek2.log
?
Я вроде по умолчанию отключил вывод логов, поэтому разрастаться не должно. А если ты включил и забыл отключить, то разрастаться будет где угодно.
Прекрасные новости! Мы мечтали, мы желали, мы просили, мы требовали, и всё это не помогало)) А потом Артур сам захотел обновиться, и мы — счастливы!
Кто ещё не нажал кнопочку «Отправить деньги» в разделе «Поблагодарить автора» под анонсом поста — самое время всем это сделать!
Кто ещё не нажал кнопочку «Отправить деньги» в разделе «Поблагодарить автора» под анонсом поста — самое время всем это сделать!
Он теперь стоит 2.5к) Благодарность обозначенная автором)
3 часа веселия Артур нам обеспечил :-). Код тарифа теперь зачем-то в настройке описания тарифа.

Без нее корзина ложиться наглухо. Даже если никакие доставки сдек не включены.
Теперь буду знать, что в степени бардака в програмировании нам есть куда стремиться :-).
Только карта ПВЗ так и не заработала. В консоле ошибки

Понять, где должна происходить инициализации ymaps3, не получилось. Баг разработчика какой-то.
@Артур Шевченко поправь плиз.

Без нее корзина ложиться наглухо. Даже если никакие доставки сдек не включены.
Теперь буду знать, что в степени бардака в програмировании нам есть куда стремиться :-).
Только карта ПВЗ так и не заработала. В консоле ошибки

Понять, где должна происходить инициализации ymaps3, не получилось. Баг разработчика какой-то.
@Артур Шевченко поправь плиз.
Понять, где должна происходить инициализации ymaps3, не получилось. Баг разработчика какой-тоИли неправильная настройка. У нас тут пишет invalid api key. В яндексе много апи. Какое надо? Мы пробовали JavaScript API и HTTP Геокодер
В кабинете яндекса написано такое:
Если вы используете Java Script API версии 3.0, необходимо настроить ограничения для API-ключа, чтобы API работали корректно. В предыдущих версиях это не обязательно, но рекомендуется сделать, чтобы защитить ключ.
Попробуйте прописать ограничения, может в этом причина.
yandex.ru/maps-api/docs/js-api/limit.html
Если вы используете Java Script API версии 3.0, необходимо настроить ограничения для API-ключа, чтобы API работали корректно. В предыдущих версиях это не обязательно, но рекомендуется сделать, чтобы защитить ключ.
Попробуйте прописать ограничения, может в этом причина.
yandex.ru/maps-api/docs/js-api/limit.html
В кабинете яндекса написано такое:Написано, ага, только я когда добавил ограничения по домену ключ перестал работать.
В описании системной настройки ms_cdek2_yandex_map_api_key написано какой API и где
Код тарифа теперь зачем-то в настройке описания тарифа.Установи msDeliveryProps и прописывай там
Понять, где должна происходить инициализации ymaps3, не получилось.Это очень странно, что такой выдающийся разработчик как ты не смог понять где происходит инициализация карты, учитывая, что в консоли справа написано в каком файле ошибка.
С msDeliveryProps ошибка
Закоментировал $this->modx->getOption('log_deprecated')
Fatal error: Uncaught Error: Call to a member function getOption() on null in
/home/s/semweb/orliman.shop/public_html/core/components/minishop2/model/minishop2/msdeliveryhandler.class.php:3
Stack trace: #0 /home/s/semweb/orliman.shop/public_html/core/components/msdeliveryprops/ConfigurableDeliveryHandler.class.php(12):
require_once() #1 /home/s/semweb/orliman.shop/public_html/core/cache/includes/elements/modplugin/46.include.cache.php(9): require_once('/home/s/semweb/...')
#2 /home/s/semweb/orliman.shop/public_html/core/model/modx/modscript.class.php(76): include('/home/s/semweb/...') #3
/home/s/semweb/orliman.shop/public_html/core/model/modx/modx.class.php(1674): modScript->process(NULL) #4
/home/s/semweb/orliman.shop/public_html/core/model/modx/modmanagercontroller.class.php(153):
modX->invokeEvent('OnManagerPageBe...', Array) #5 /home/s/semweb/orliman.shop/public_html/core/model/modx/modmanagerresponse.class.php(79):
modManagerController->render() #6 /home/s/semweb/orliman.shop/public_html/core/model/modx/modmanagerrequest.class.php(187):
modManagerResponse->outputContent(Array) #7 /home/s/semweb/orliman.shop/public_html/core/model/modx/modmanagerrequest.class.php(135):
modManagerRequest->prepareResponse() #8 /home/s/semweb/orliman.shop/public_html/manager/index.php(63):
modManagerRequest->handleRequest() #9 {main} thrown in /home/s/semweb/orliman.shop/public_html/core/components/minishop2/model/minishop2/msdeliveryhandler.class.php on line 3
Я в файле core\components\minishop2\model\minishop2\msdeliveryhandler.class.phpЗакоментировал $this->modx->getOption('log_deprecated')
<?php
// if (!empty($this->modx->getOption('log_deprecated'))) {
// $this->modx->log(
// xPDO::LOG_LEVEL_ERROR,
// 'Deprecated: use handlers from catalog core/components/minishop2/handlers/'
// );
// }
require_once dirname(__FILE__, 3) . '/handlers/msdeliveryhandler.class.php';
И заработало. Не понятно Эта ошибка из-за наших особенностей или что-то неправильно в msdeliveryhandler. По идее файл же не класс и $this-> вообще не должен присутствовать О_О. Это очень странно, что такой выдающийся разработчик как ты не смог понять где происходит инициализация карты, учитывая, что в консоли справа написано в каком файле ошибка.Ну вот и покритиковать нельзя :-).
У нас api-maps.yandex.ru/v3/?apikey=*** заработало когда поставили ограничение по домену.
Ну вот и покритиковать нельзя :-)Критика должна быть конструктивной, а твоё пустословие никому неинтересно.

У нас что-то при установке не прописалось. Раздела minishop2\ms2_delivery_cdekhandler нет в системных настройках. Подскажи что там должно быть?
И плиз напиши плиз все-таки обработку ошибки со строкой в описании доставки. Когда компонент ждет целое.
А то корзина ложиться и не понятно из-за чего. Мы 3 часа пропарились из-за этого.
А то корзина ложиться и не понятно из-за чего. Мы 3 часа пропарились из-за этого.
Учитывает ли модуль кол-во товаров, вес товара и габариты?
Можно ли выбрать разные способы, например экспресс или обыная?
Также может в демо не обновлена версия, но у меня работает пока немного странно: если я 1 раз выбрал ПВЗ, то потом я не могу уже никак выбрать другой, даже после обновления страницы. Ну и не всегда удобно выбрать без карты (понятно, что карта это доп нагрузка, но можно и в модалку положить — только мнение).
Можно ли выбрать разные способы, например экспресс или обыная?
Также может в демо не обновлена версия, но у меня работает пока немного странно: если я 1 раз выбрал ПВЗ, то потом я не могу уже никак выбрать другой, даже после обновления страницы. Ну и не всегда удобно выбрать без карты (понятно, что карта это доп нагрузка, но можно и в модалку положить — только мнение).
Учитывает ли модуль кол-во товаров, вес товара и габариты?С версии 2.4.2 учитывает
Можно ли выбрать разные способы, например экспресс или обыная?Можно. Для этого нужно указать соответствующие номера тарифов в системных настройках ms_cdek2_tariffs и в ms_cdek2_deliveries.
если я 1 раз выбрал ПВЗ, то потом я не могу уже никак выбрать другойВозможно вы смотрели в процессе доработок.
понятно, что карта это доп нагрузка, но можно и в модалку положить — только мнениеЕсли положить карту в модалку это никак не снизит нагрузку на сеть и не увеличит скорость загрузки страницы.
Выбор пункта на карте не интуитивно понятен :-(. При клике на маркер с цифрой лучше чтоб происходило увеличение маштаба карты. А при выборе пвз какое-нибудь сообшение. А то я не сразу понял что пункт выбран.

По умолчанию это происходит при двойном клике на карту
Ката показывается, пункт выбран, но расчет стоимости не происходит.
В Журнале:
В Журнале:
/core/components/ms_cdek2/services/custom/MsCdek2.php 255
PHP warning: A non-numeric value encountered
Хотя, «Размер упаковки по умолчанию» заполнен.
А в поле size у товара есть значение?
Нет.
А для чего его заполнять, если есть размер упаковки по умолчанию?
А для чего его заполнять, если есть размер упаковки по умолчанию?
Заполнили размер на тестовом товаре — ошибка не ушла.
Это не ошибка, это предупреждение. Какие проблемы оно вызывает? Расчёт неверный или не происходит совсем?
Не происходит
В логе
[code] => not_available_country_code
[additional_code] => 0x84916502
[message] => Код страны не поддерживается: 643
И какой код страны вы передаёте?
643 и RU пробовали
2.4.4-pl
Переустановлено
26-05-2025, 21:58
**26.05.2025 21:56:31** [MsCdek2Services\ExternalApi\Base::send] Запрос calculator/tariff вернул ошибку:
Array
(
[errors] => Array
(
[0] => Array
(
[code] => not_available_country_code
[additional_code] => 0x84916502
[message] => Код страны не поддерживается: 643
)
)
)
**26.05.2025 21:56:31** [MsCdek2Services\MsCdek2::getCost] Данные запроса:
Array
(
[lang] => rus
[tariff_code] => 136
[from_location] => Array
(
[postal_code] => 215506
[country_code] => 643
)
[to_location] => Array
(
[postal_code] => 101000
[country_code] => 643
)
[services] => Array
(
)
[packages] => Array
(
[0] => Array
(
[weight] => 700
[length] => 1
[width] => 1
[height] => 1
)
)
)
137 тариф**26.05.2025 22:12:55** [MsCdek2Services\ExternalApi\Base::send] Запрос calculator/tariff вернул ошибку:
Array
(
[errors] => Array
(
[0] => Array
(
[code] => not_available_country_code
[additional_code] => 0x84916502
[message] => Код страны не поддерживается: 643
)
)
)
**26.05.2025 22:12:55** [MsCdek2Services\MsCdek2::getCost] Данные запроса:
Array
(
[lang] => rus
[tariff_code] => 137
[from_location] => Array
(
[postal_code] => 215506
[country_code] => 643
)
[to_location] => Array
(
[postal_code] => 119331
[country_code] => 643
)
[services] => Array
(
)
[packages] => Array
(
[0] => Array
(
[weight] => 700
[length] => 1
[width] => 1
[height] => 1
)
)
)
Журналpublic_html/core/components/ms_cdek2/services/custom/MsCdek2.php 256
PHP warning: A non-numeric value encountered
ms_CDEK22.4.4-pl
Переустановлено
26-05-2025, 21:58
Почему
[length] => 1
[width] => 1
[height] => 1
Если в настройках 30х30х30 системных ms_cdek2_default_size не пойму никак…
Тут похоже мой косяк, забыл системную настройку забрать и просто захардкодил
Я проверил на тестовом сайте, ошибки нет. Если размеров нет в корзине, если их нет в товаре, то берётся дефолтное значение из настроек.
У каждой системной настройки можно раскрыть описание, почитайте описание для системной настройки с кодом страны.
Читали и вставили значение соответственно описанию. Кроме того, в это поле нельзя ввести ничего кроме цифр.
А в файле core/components/ms_cdek2/services/custom/MsCdek2.php
А в файле core/components/ms_cdek2/services/custom/MsCdek2.php
'sender_country_code' => $this->modx->getOption('ms_cdek2_sender_country', null, 'RU', true),
'size_multiplier' => $this->modx->getOption('ms_cdek2_size_multiplier', null, 1, true),
'weight_multiplier' => $this->modx->getOption('ms_cdek2_weight_multiplier', null, 1000, true),
'defaultSize' => $this->modx->getOption('ms_cdek2_default_size', null, '1x1x1'),
Может, в этом дело?
Напишите мне в телеграм, контакт есть в профиле.
В итоге, просто оставили пустым это поле.
Какой-то расчет стал происходить. Насчет его правильности — не знаю пока.
Какой-то расчет стал происходить. Насчет его правильности — не знаю пока.
Вот это точно мой косяк, я настройку скопировал из индекса и забыл тип поля поменять, но вы можете сменить его самостоятельно. Код страны должен содержать только буквы, заглавные, две штуки.
Артур, спасибо за компонент, давно ждали!
Вопрос: а SendIt сильно там нужен? Как бы, если SendIt не используется, не особо хочется тянуть лишний компонент…
Вопрос: а SendIt сильно там нужен? Как бы, если SendIt не используется, не особо хочется тянуть лишний компонент…
SendIt сильно нужен. Рекомендую начать использовать, так как есть мысль связать все свои компоненты в одну систему, чтобы минимизировать дублирование кода.
Обновились на новую версию 2.4.4-pl и я 4 часа разбирался почему все перестало работать. Наполовину mscdek и sendit изучил. Итог изумительный. Перестало работать потому что в браузере скрипты закешировались! И ctrl+shift+r и ctrl+f5 этот кеш не чистят.
Помогла эта галочка

Но клиенты у кого за неделю скрипты закешировались это не поймут.
@Артур Шевченко можешь механизм обновления скриптов mscdek и sendit предусмотреть?
Помогла эта галочка

Но клиенты у кого за неделю скрипты закешировались это не поймут.
@Артур Шевченко можешь механизм обновления скриптов mscdek и sendit предусмотреть?
Ты действительно потратил 4 часа на то, чтобы понять, что браузер берёт файлы из кэша? Это феерично. А по поводу механизма обновления, он давно существует: добавь get-параметры к пути и браузер будет думать что это новый файл. Но это актуально только на этапе разработки и после обновления, в остальное время это не нужно. Я позаботился о том, чтобы ты мог управлять подключением скриптов, а дальше ты уж как-нибудь сам, хорошо?
добавь get-параметры к путик каким путям? где это прописывать? Ты нормально приложение не можешь сделать?
В принципе да, надо было нормально сделать, в одном файле весь код написать. Чего-то я с инъекциями зависимостей и модулями погорячился. Не подумал, что такие таланты как ты захотят воспользоваться моим никчёмным компонентом. Извини. Я думаю тебе не стоит страдать, сделай сам, лучше. Будешь пользоваться и получать удовольствие.
добавь get-параметры к путик каким путям? где это прописывать? Я в твоих di контейнерах с трудом разбираюсь. Если было как обычно сделано я бы не спрашивал.
Ты ещё посетуй на то, что я jQuery не использую и жизнь тебе усложняю:-)
Ты действительно потратил 4 часа на то, чтобы понять, что браузер берёт файлы из кэшада потратил. Бывают вот такие мутные приложения
А бывают разработчики, которые не умеют читать код.
Мда… не думал, что тебя так критика зацепит.
У Василия в минишопе обновления версии js скриптов через гет-параметы встроенно. Меняется версия минишоп — меняется гет-параметр. Я так же делаю. Тебе нужно подумать, чтобы при обновлении js они автоматически в браузере обновлялись. А то сделаешь ты обновление mscdek через полгода и на всех сайтах у их постоянных клиентов mscdek отвалится и владельцы сайтов потеряют клиентов. Веская причина?
Искал в чем причина ошибки 4 часа. ctrl+shift+r я всегда делаю и стем что оно не срабатывает первый раз столкнулся. Так что даже не подозревал, что скрипты старые в браузере. Пришлось дебажить и изучать mscdek и sendit. Как они работают. В итоге разобрался, что header x-sipreset не верный, нашел где он отправляется, а потом уже проверил что за js в установочном пакете.
4 часа дебажить такую ошибку не так уж и долго :-).
Надеюсь, что ты все-таки воспримешь это от меня как фидбек :-)
У Василия в минишопе обновления версии js скриптов через гет-параметы встроенно. Меняется версия минишоп — меняется гет-параметр. Я так же делаю. Тебе нужно подумать, чтобы при обновлении js они автоматически в браузере обновлялись. А то сделаешь ты обновление mscdek через полгода и на всех сайтах у их постоянных клиентов mscdek отвалится и владельцы сайтов потеряют клиентов. Веская причина?
Искал в чем причина ошибки 4 часа. ctrl+shift+r я всегда делаю и стем что оно не срабатывает первый раз столкнулся. Так что даже не подозревал, что скрипты старые в браузере. Пришлось дебажить и изучать mscdek и sendit. Как они работают. В итоге разобрался, что header x-sipreset не верный, нашел где он отправляется, а потом уже проверил что за js в установочном пакете.
4 часа дебажить такую ошибку не так уж и долго :-).
Надеюсь, что ты все-таки воспримешь это от меня как фидбек :-)
Это не фидбэк, а рассказ о том как ты не умеешь дебажить JS :-)
Печалька. Вот казалось человек а на проверку мнит себя самым умным :-(
Давай закроем эту тему. Я добавил версионирование. Остальные вопрос по компоненту задавай через техподдержку modstore.
Сделайте, пожалуйста, настройку общего размера (габаритов) заказа.
Чтобы не задавать каждому товару размер упаковки, а просто всей посылке из корзины задать размеры по умолчанию.
Чтобы не задавать каждому товару размер упаковки, а просто всей посылке из корзины задать размеры по умолчанию.
Общая настройка габаритов заказа это как? В системных настройках можно прописать размеры по умолчанию. Настройка работает, я проверял.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.