Максим Сердюков


Максим Сердюков

Партнер-разработчик: https://www.webasyst.ru/store/developer/1088799/ Партнер-разработчик

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

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

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

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

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

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

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

    в ответ на способы доставки

  • Максим Сердюков Максим Сердюков 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();

    в ответ на способы доставки

  • Максим Сердюков Максим Сердюков 19 декабря 2018 16:10 #

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

    в ответ на Автокомлит для города в новом чекауте

  • Максим Сердюков Максим Сердюков 19 декабря 2018 15:00 #

    Возвращать все сразу не надо. Забыл упомянуть в статье. Все поля не обязательные. Пока все значения кроме города нигде не применяются, они были добавлены в рамках возможного масштабирования этого автокомплита. 

    Дублирование что-то упустил из виду. После мержа всех результатов сделаю шафл и оставлю уникальные. Но вообще чтобы не изобретать искусственный интеллект по сортировке городов, администратору магазина лучше не включать 10 плагинов автокомплита городов.

    в ответ на Автокомлит для города в новом чекауте

  • Максим Сердюков Максим Сердюков 18 декабря 2018 16:32 #

    После обновления плагина 17 декабря 2018 года проверьте и пересохраните настройки пожалуйста. Раньше не было времени обработки заказов и это нужно чтобы избежать неочевидного расчета времени готовности заказа.

    в ответ на Новый плагин для самовывоза "Пункт выдачи заказов"

  • Максим Сердюков Максим Сердюков 15 декабря 2018 13:56 #

    Исправил опечатку. 

    в ответ на Новый класс waEvent

  • Максим Сердюков Максим Сердюков 14 декабря 2018 09:51 #

    Ну вот вы сами же представляете, какой это объем работы по стандартизации  и модерации. На это годы могут уйти. 

    Вы можете через ивент frontend_product получить такой же результат. Он вызовет ваш статический метод (хоть я и написал, что методы должны быть не статические). Но от ифа все равно не получится избавиться, я согласен.

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

    Ну и делать метод хэлпера, который время от времени будет экономить 2 строчки кода бессмысленно.

    А эту конструкцию

    {* проверяем существование плагина *}
    {if class_exists('shopTestPlugin')}
      {* допустим, плагин отдельно в настройках можно включить... такое часто надо *}
      {* и для усугубления ситуации... раньше в плагине не было такой проверки :) *}
      {if method_exists('shopTestPlugin', 'enabled')}
        {if shopTestPlugin::enabled()}
          {shopTestPlugin::doSmth()}
        {/if}
      {/if}
    {/if}

    Замените на 

    {if is_callable(['shopTestPlugin', 'doSmth']) && someClass::enable()}
        {shopTestPlugin::doSmth()} 
    {/if}

    в ответ на Новый класс waEvent

  • Максим Сердюков Максим Сердюков 14 декабря 2018 08:47 #

    Александр, как можно стандартизировать или модерировать то, что отображается в теме дизайна? Представим кнопку "сделать удобно" с большим количеством js, которая сделана под тему дефолт. А потом вы переключаетесь на другую тему и получаете эту же кнопку, но она работает совершенно не так так, или вообще весь js упал потому что не нашел нужные селекторы. Стандарты и модерация тут не помогут. Или они станут настолько медленным, что плагины будут публиковаться через года. 


    Вот тут немного непонятно, о чем идет речь, на самом деле приведенная выше конструкция присутствует во всем темах!

    Я говорю о том, что при открытии каждой базовой страницы магазина кидается какой-нибудь ивент. 
    К примеру: 

    wa()->event('frontend_compare', $params)
    

    Вы можете там разместить результат работы вашего плагина и получите его в смарти. И я пока не понимаю зачем делать эти конструкции во всех темах. Пришлите пожалуйста реальный кейс, где вы не смогли использовать базовые ивенты.

    в ответ на Новый класс waEvent

  • Максим Сердюков Максим Сердюков 14 декабря 2018 08:11 #

    Из того что я вижу, вам не глобальный ивент нужен, а возможность дернуть конкретный плагин. Потому что если 3 разработчика подпишутся на одно и тоже имя ивента (Один сделал, другим понравилось), то все опять перейдет на ветки ифов.
    + Во всех наших шоп фронтенд экшенах есть ивенты и я не вижу случая, когда надо выстраивать конструкцию 

    {* проверяем существование плагина *}
    {if class_exists('shopTestPlugin')}
      {* допустим, плагин отдельно в настройках можно включить... такое часто надо *}
      {* и для усугубления ситуации... раньше в плагине не было такой проверки :) *}
      {if method_exists('shopTestPlugin', 'enabled')}
        {if shopTestPlugin::enabled()}
          {shopTestPlugin::doSmth()}
        {/if}
      {/if}
    {/if}

    Но вижу проблему получить результат конкретного плагина из результирующего массива в нужном месте страницы.

    в ответ на Новый класс waEvent

  • Максим Сердюков Максим Сердюков 13 декабря 2018 18:52 #

    Евгений, напишите пожалуйста, как можно более подробный список того, как вы будете это использовать и какой профит это может принести. Потому что сейчас на одной чаше весов стоят риски с безопасностью + хаос который смогут наводить плагины в темах дизайна, которые не адаптированы к результатам работы плагина(а виноваты будем мы и расхлебывать наша поддержка). А на второй чаше призрачная гибкость плагинов. Нужен какой-то план и что-то убедительное, чтобы это сделать.

    в ответ на Новый класс waEvent

  • Максим Сердюков Максим Сердюков 13 декабря 2018 17:09 #

    Расскажите, что будет

    в ответ на Новый класс waEvent

  • Максим Сердюков Максим Сердюков 13 декабря 2018 16:49 #

    Потому что я программист, а не копирайтер. Соответственно у меня не самый легкий для чтения русский язык. Когда-нибудь эта статья будет адаптирована для всех и перенесена в базу знаний.

    в ответ на Новый класс waEvent

  • Максим Сердюков Максим Сердюков 13 декабря 2018 16:48 #

    Где навязывались? Потому что в коде всегда вызывались как обычные методы.
    Если вы вызовите статический метод у объекта через стрелочку, ничего не сломается. Какие-то еще вопросы?

    в ответ на Новый класс waEvent

  • Максим Сердюков Максим Сердюков 13 декабря 2018 15:31 #

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

    в ответ на Новый класс waEvent

  • Максим Сердюков Максим Сердюков 20 ноября 2018 22:24 #

    Коллбеки от банков идут и без пользователя. Т.е. человек может уйти со страницы банка, но банк может отправить на указанную ссылку в магазин информацию о том, что с заказом что-то произошло. Или если администратор в бэкенде банка, изменил заказ, то банк сам отправляет в магазин данные. Но не все банки это гарантируют.

    Поэтому я сказал вам второй вариант. Если ваш банк не гарантирует коллбеки или у него вообще их нет, то надо разрабатывать плагин.
    Либо делать один плагин который умеет обращаться к разным банкам или дорабатывать уже существующие плагины (делать к примеру публичный метод getOrderStatus, который будет возвращать информацию о заказе). В вашем новом плагине вы после получения информации о заказе используете shopWorkflow и меняете статус заказа.

    В любом случае реализация этого требует немного блэкджека.

    в ответ на Проверка статуса оплаты из backend

  • Максим Сердюков Максим Сердюков 20 ноября 2018 20:27 #

    У вас несколько вариантов.
    Первое - обычно менять статус заказа это дело плагинов. Почти все новые плагины, получают от банка информацию, что заказ оплачен/отменен и т.д. После плагин самостоятельно меняет статус заказа без вашего участия. Поэтому пинайте разработчиков ваших плагинов.

    Второе - вы можете писать кастомный код, в ваших плагинах оплаты (или новом плагине). Который будет идти в банк и опрашивать его о статусе заказа.(если банк это позволяет). После получения информации вы будете менять статус заказа. Обработка заказов - можете почитать эту док-у, чтобы поизучать, как меняется статус заказов. И изучите код плагинов (Тинькофф, Сбербанк, Яндекс.Деньги). Вам нужно из этого сделать смесь.

    в ответ на Проверка статуса оплаты из backend

  • Максим Сердюков Максим Сердюков 15 ноября 2018 13:27 #

    Это был первый вопрос, который я задал себе когда начал разрабатывать плагин) Когда-нибудь мы сделаем контроллеры, базы и другие фишки для системных плагинов. Сейчас мы минимально облегчили жизнь владельцу магазина - сделали клонирование плагинов доставки в магазине. Т.е. 1 настроить полностью, под свои данные, а потом клонировать.

    в ответ на Новый плагин для самовывоза "Пункт выдачи заказов"

  • Максим Сердюков Максим Сердюков 15 ноября 2018 11:41 #

    Пришлите пожалуйста дамп того что приходит туда и вырезку кода, где баг происходит.

    в ответ на Баги в SS8

  • Максим Сердюков Максим Сердюков 15 ноября 2018 11:13 #

    Понял, принял.

    в ответ на Баги в SS8

  • Максим Сердюков Максим Сердюков 7 ноября 2018 17:01 #

    Поправил часть. Если до релиза 8 ещё найдёте что-то, что раньше работало, но сейчас сломалось - пишите сюда. После релиза лучше отдельными темами

    в ответ на Баги в SS8

  • Максим Сердюков Максим Сердюков 6 ноября 2018 13:47 #

    Я вижу в этом наоборот преимущество. Если страна (регион) решит поменять  свою таймзону, то код будет работать.
    И как получать валидные часы таймзон? Вы сами написали, что все зависит от актуальности баз по таймзонам. Соответственно нам надо на себя переложить эту ответственность или что еще хуже, дать пользователям возможность самим вводить. Проще поддержание баз таймзон оставить на совести php.

    в ответ на Расчет времени готовности заказа

  • Максим Сердюков Максим Сердюков 4 ноября 2018 14:36 #

    Мэтью подошел бы больше тогда, когда выкатим полный список новых хуков)

    в ответ на Обновленный редактор категорий

  • Максим Сердюков Максим Сердюков 4 ноября 2018 14:32 #

    Сергей, мы готовим релиз под магазин с минимальной версией 5.6. Если посмотреть на код чекаута, то у там куча того, что в 5.2 упадет смертью храбрых. Версия повысится с выходом магазина 8.0

    в ответ на Расчет времени готовности заказа

  • Максим Сердюков Максим Сердюков 2 ноября 2018 17:51 #

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

    search/diapazon.value_id>=200

    изменится на 

    search/diapazon.value>=200

    в ответ на Обновленный редактор категорий