Артур Шевченко

Артур Шевченко

Был в сети 4 часа назад
Заказы принимаю
Отправить деньги
Написать плагин на событие msOnBeforeCreateOrder где проверить группу и изменить стоимость доставки, а на фронте просто проверить группу и посчитать скидку. Например через fenom
{if $_modx->user.id | ismember: 'GroupName'}
    {set $deliveryCost = $deliveryCost * 0.8}
{/if}
Я бы повесил на событие onDocFormSave и проверял бы class_key если товар, то заполняем свойства, только возможно стоит получить именно объект msProduct, а не modResource. У последнего нет поля weight, поэтому оно и не заполняется.
можно использовать конструкцию, которую я назвал compareDate
<?php
$input = new DateTime($input);
if(!$input){return false;}
if(!$options){
    $options = new DateTime();
}else{
    $options = new DateTime($options);
}
$interval = $options->diff($input);
return $interval->format('%R%a');
Это модификатор для сравнения дат. Можно через fenom вывести migx и использовать этот модификатор
{set $tv = json_decode($_modx->resource.migxTvName, 1)}
{foreach $tv as $key => $item}
    {if ('' | compareDate: $item['тут ваша дата']) == 0}
        /* тут то что нужно показать в эту дату */
    {/if}
{/foreach}
Без написания плагина на событие msOnBeforeAddToCart никак. Плагин примерно такой:
<?php
switch ($modx->event->name) {
    case 'msOnBeforeAddToCart':
        $product->get('id');
        $resource = $modx->getObject('modResource',  $product->get('id'));      
        $product->set('price', $resource->getTVValue('price_drop'));       
    break;
}
Для простоты лучше на фронте добавить
<input type="text" name="price_drop">
под price_drop тогда можно будет сделать так
<?php
switch ($modx->event->name) {
    case 'msOnBeforeAddToCart':       
        $product->set('price', $_POST['price_drop']);       
    break;
}
Я придумал простое решение проблемы. В магазине есть плашки предупреждающие о системных требованиях, пусть добавят плашку типа «Вызов некоторых снипеттов через этот компонент может быть использован злоумышленниками для взлома сайта».
Почитал здешний холивар и должен всех поблагодарить. Автора за компонент, критиков за критику. Объясняю. Я уже давно использую вот эту заметку в тех случаях, когда нужен вызов сниппетов ajax после определенных действий пользователей, но только после прочтения комментариев критиков я задумался о том, что таким образом действительно можно ломануть сайт, хотя сам я всегда отправлял только те параметры которые мне нужны, а не все возможные, но среди них мог быть where. Поэтому считаю, надо этот момент исправить, вариант с созданием в админке набора параметров очень неплох, пусть это сложнее, чем передать параметры через js, но безопаснее ведь. Что для аргументов автора, то они немного противоречивы, с одной стороны он говорит что компонент для неопытных пользователей, а с другой что каждый программист сам должен блюсти безопасность сайт. Вот я неопытный, в сравнении конечно, и как писал выше, до текущего момента не думал что можно взломать сайт через ajax и pdoResources, и обсуждение новых компонентов читаю очень редко, поэтому мог просто установить и пользоваться не подозревая о подвохе. А критикам долен сказать, будь мягче, что вы нападаете на парня, он старался, а вы «дыра» «в топку», спокойно бы объяснили в чём проблема и как исправить и всё. Мы же тут как бы одно дело делаем, нельзя так.