Sem

Sem

С нами с 21 августа 2015; Место в рейтинге пользователей: #70

Делаем стоимость доставки у заказа в админке редактируемым полем

Всем привет!
Возникла задача, сделать поле стоимости доставки у заказа в админке редактируемым вручную.
Я, честно говоря, до сих пор не понимаю почему это не сделано из коробки — просто нет никакой возможности поменять стоимость доставки уже сделанного заказа из админки. Я не говорю про авто-пересчет через все нужные классы доставки, понятно, что трудно повторить их логику в рамках админки, но просто сделать поле вручную редактируемым не такая уж сложная задача.
Проблема следующая: если клиент при согласовании заказа решил сменить способ доставки, например с «Курьером» на «Самовывоз», как выставить стоимость доставки в 0 и пересчитать стоимость заказа? Вот и начинаются танцы с бубном, менеджеру надо пойти сделать ещё один заказ через фронт сайта, ну в общем, думаю, знакомая тема многим.
Sem
Sem
31 марта 2021, 17:38
modx.pro
4
252
+10

Плагин для пересчета стоимости доставки в админке

Всем привет!
Так как в miniShop2, к сожалению по прежнему нет пересчета доставки в админке, приходится из раза в раз что-то придумывать.
Какие решения я пока нашел:
  1. Полностью создать новый заказ через фронт — самый легкий способ, который всё пересчитает как надо, проблема только в том, что нужно заново набрать корзину с теми же параметрами, что у клиента, выбрать способ доставки с теми же параметрами, что у клиента и наконец выбрать способ оплаты
    Плюсы: охватываем даже сложные способы доставки с динамическим расчетом через всякие API
    Минусы: повторять весь процесс формирования заказа
  2. Сделать плагин на событие обновления заказа, чтобы он пересчитывал стоимость доставки, тут проблема в том, что в плагине уже нет объекта корзины, но, что мешает его создать на основании заказа. Я нашел среди issues минишопа одно решение (Код ниже), которое по идее должно решить этот вопрос хотя бы для простых способов доставки, у которых фиксированы доп. стоимость и стоимость при которой доставка бесплатная. Но проблема в том, что плагин почему-то считает не корректно, возможно из-за того, что он написан в 2015, а минишоп недавно прилично так обновился и с этим могут быть связаны проблемы. Собственно нужна помощь сообщества, чтобы его поправить.
  3. Ну и третий способ, правим исходники минишопа и делаем все поля заказа редактируемыми, таким образом решая все возможные проблемы с пост-обработкой заказа в админке. Да в таком случае менеджер может насчитать что и как угодно, но это уже проблема магазина и ответственности менеджера. Единственное, что при таком способе хорошо бы делать — это вносить все изменения в историю заказа, так можно будет произвести разбор полетов в случае чего.
Sem
Sem
12 марта 2021, 12:09
modx.pro
81
0

getObjectGraph и getCollectionGraph

Кто нибудь может объяснить смысл в методах xPDO — getObjectGraph и getCollectionGraph
В доках написано, что они позволяют за один заход подцепить другие таблицы, у которых определены отношения с запрашиваемым классом объекта.
Я подумал, что это, наверное, способ сократить количество sql запросов, но что то мои примеры показывают следующее — yadi.sk/i/cOzItZ8Z3Xvg4r
Sem
Sem
15 июня 2018, 13:22
modx.pro
869
0

Можно ли получить токен MODX удалённо?

Всем привет!
Интересует вопрос про токены MODX.
У MODX есть REST API и он, довольно легко настраивается, вот я решил попробовать использовать его для одного front-end приложения, то есть связка такая: на фронте vue.js на бекенде — MODX.
При чём клиентская часть на совершенно другом домене.
Возник вопрос как можно реализовать авторизацию в таком случае?
В доках, вот тут — docs.modx.com/revolution/2.x/developing-in-modx/advanced-development/validating-requests-tokens-and-nonces
Написано, что токены авторизации запросов по-умолчанию работают в контексте mgr, то есть их, наверное, возможно задействовать и в других контекстах, если я правильно понял.
Но как получить такой токен по REST API, ведь клиентская часть, которая шлёт запрос находится на другом домене и вообще никак не связана с движком MODX, за исключением, что шлёт на него запросы?
Sem
Sem
13 июня 2018, 06:22
modx.pro
825
0

Минификация css - Проблема

Привет, сообщество!
Возник интересный вопрос по поводу минификации стилей в MODX проектах, конечно уже есть компоненты, которые пытаются решить этот вопрос, но у них это получается не очень, и судя по всему из-за использования кривых библиотек для сжатия css-кода.
И тут я подумал, ведь есть же на сегодня лучшее решение, правда, написанное на node — называется csso
По моим тестам этот компонент жмёт абсолютно всё и без ошибок, когда на тех же файлах php-библиотеки сразу же падают, поэтому такие компоненты как MinifyX и modx-minify от Sterc сегодня использовать не получается на полную катушку.
Я не программист и хотел бы услышать мнения опытных разработчиков, какие способы есть, чтобы задействовать библиотеку csso в MODX, ну, кроме как поднимать node сервер и там как в обычном фронтенде производить сборку. Может есть какое-то более интересное решение?
Sem
Sem
17 ноября 2017, 10:13
modx.pro
940
0

Символические ссылки в MODX

Всем привет, делаю сайт с региональными поддоменами (на контекстах), есть страницы типа «О компании»,
которые общие на все регионы, что бы не плодить копии в админке, есть специальный тип ресурса — Символическая ссылка, в которой можно указать id документа, чьё содержимое будет подтягиваться, но по текущему url. Обычно для таких страниц ещё указывается мета-тег canonical, чтобы не плодить дубли в поиске и обычно такой каноникал я делаю следующей конструкцией в коде
<link rel="canonical" href="{$_modx->makeUrl($_modx->resource.id, '', '', 'full')}">
Однако для ресурсов с типом «символическая ссылка» код должен быть другим, что-то типа
<link rel="canonical" href="{if $_modx->resource.class_key == 'modSymLink'}
                                    {$_modx->makeUrl($_modx->resource.content, '', '', 'full')}
                                {else}
                                    {$_modx->makeUrl($_modx->resource.id, '', '', 'full')}
                                {/if}">
Sem
Sem
08 ноября 2017, 13:25
modx.pro
3
2 794
0

Баг с получением информации о контексте

Всем привет, на днях делал сайт с поддоменами и разными контекстами и заметил одну маленькую
неприятность — нигде в шаблоне нельзя получить такие поля контекста как имя и описание,
а key и rank выводятся без проблем.
Распечатал массив через {$_modx->context|print} и всегда получаю следующее:
Array
(
    [key] => web
    [name] => 
    [description] => 
    [rank] => 0
)
Все поля контекста заполнены, но отсутствуют при выводе.
Решил попробовать включить объект modx в настройках, думал может проблема в классе $_modx, но данный баг оказался более широким и — {$modx->context->name} или {$modx->context->description}
также не дали результатов.
Та же беда при вызове простейшего сниппета:
<?php
return $modx->context->key;//работает
return $modx->context->name;//не работает

Однако если воспользоваться xPDO и получить объект контекста то все поля как положено в наличии
<?php
$res = $modx->getObject('modContext',['key'=>'web']);
print_r($res->toArray());
Array
(
    [key] => web
    [name] => Москва
    [description] => Москва
    [rank] => 0
)
Собственно вопрос — где искать проблему в pdoTools или в самом MODX?
Просто весь сайт завязан на логике смены контекстов и везде использовать получение названия через xPDO как то не прикольно.
Sem
Sem
01 ноября 2017, 08:37
modx.pro
1 526
0

Авторизация в новом контексте

Всем привет, возник вопрос:
Когда пользователь авторизован в админке, то это без проблем можно проверить в контексте web
{if $_modx->hasSessionContext('mgr')}OK{/if}
Но возникает проблема в новом созданном контексте, там этот метод не работает.
Нашёл в сообществе пост, где Василий поделился плагином, который может авторизовать в любом контексте
<?php
if ($modx->event->name == 'OnWebPageInit') {
   if ($modx->user->hasSessionContext('mgr') && !$modx->user->hasSessionContext($modx->context->key)) {
	$modx->user->addSessionContext($modx->context->key);
   }
}

Но проблема в том, что первая часть условия не срабатывает в новом контексте и авторизация не происходит.
Подскажите как можно из любого контекста проверить авторизован ли пользователь в админке?
Sem
Sem
31 октября 2017, 07:38
modx.pro
2 125
0

callback на добавление в корзину (id товара)

Всем привет, возникла задача поставить цель на добавление в корзину определённого товара.
В miniShop2 есть система коллбеков, однако как добавить в ответ сервера поле с id товара не разобрался.
Я использую такой код:
miniShop2.Callbacks.add('Cart.add.response.success', 'add_ok', function(response) {
    console.log(response.data)
  });
//и в response.data получаю следующие поля
//key:"33e75ff09dd601bbe69f351039152189"
//total_cost:7500
//total_count:1
//total_weight:0
Как сделать, чтобы в ответ прилетало также поле id товара?
Sem
Sem
24 октября 2017, 07:01
modx.pro
1
2 626
0

Как реализовать белый список get параметров?

Всем привет! Сегодня возникла довольно параноидальная SEO задача — создать на сайте белый список допустимых гет-параметров, которые будут обрабатываться системой, а всё остальное должно редиректить на канонический url страницы, всё это с целью избежать возможный дублей.

Допустим белый список содержит следующее — utm_,yclid,query
Адрес сайта — site.ru/some-page/?utm_yandex=11 — должна обрабатываться и отдавать минимум код 200 или другая логика, например если это параметр для поиска по сайту.

А такой адрес — site.ru/some-page/?bad_param=1 — должен отредиректить с кодом 301 на канонический url — site.ru/some-page/

Как лучше реализовать такую задачу, есть идеи?
Мне приходят в голову такие варианты, либо всё через htaccess писать, либо создавать плагин, который каждый запрос будет мониторить, но вот с плагинами я не очень силён, поэтому может, кто подскажет пример такого решения?
Sem
Sem
23 октября 2017, 11:28
modx.pro
625
0