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

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

С нами с 24 мая 2019; Место в рейтинге пользователей: #4
Отправить деньги
Артур Шевченко
29 ноября 2020, 23:25
+1
Без него наверное как, но я не знаю как. Пример я вам написал, а там сами думайте. Но fenom лучше проштудировать. webinmind.ru/modx/packages-extras/pdotools/syntax-fenom
Артур Шевченко
29 ноября 2020, 19:24
0
Поставил minishop2 и потом mOptionsPrice2, открыл товар на редактирование, перешёл на вкладку Модификации, нажал на кнопку Создать хотел выбрать опцию material, которую предварительно создал, но её нет в списке доступных опций. В логе вот это
[2020-11-29 20:22:45] (ERROR @ core/components/msoptionsprice/processors/mgr/misc/option/getkeys.class.php : 171) PHP warning: Invalid argument supplied for foreach()
[2020-11-29 20:22:48] (ERROR @ core/components/msoptionsprice/processors/mgr/option/getlist.class.php : 190) PHP warning: Invalid argument supplied for foreach()

Вопрос к @Володя почему так?
Артур Шевченко
29 ноября 2020, 19:17
+1
Есть, вывести всё через Fenom.
{set $test1 = $_modx->resource['test-1'] | fromJSON}
{foreach $test1 as $item1}
{$item1['textBlocks']}
{set $test2 =  $item1['test-2'] | fromJSON}
{foreach $test2 as $item2}
{$item2['title']}
{$item2['description']}
{/foreach}
{/foreach}
Артур Шевченко
29 ноября 2020, 19:03
2
0
$(document).on('msoptionsprice_product_action', function (e, action, form, response) {
    var mid = $('input[name="curmid"]').val();
    //console.log(response);   
       if(response.data.modification.count == 0){
            $('.modprice-' + response.data.modification.rid).each(function(){$(this).css('display', 'none')}); //показываем НЕТ В НАЛИЧИИ
            $('.modpricenone-' + response.data.modification.rid).each(function(){$(this).css('display', 'inline')}); //показываем В НАЛИЧИИ
            $('.jsAddToCart').prop('disabled', true);
        }else{
            //тут наоборот
            $('.modprice-' + response.data.modification.rid).each(function(){$(this).css('display', 'inline')});
            $('.modpricenone-' + response.data.modification.rid).each(function(){$(this).css('display', 'none')});
            $('.jsAddToCart').prop('disabled', false);
        }  
});
Писать тут assets/components/msoptionsprice/js/web/default.js но лучше сделать копию, поменять путь в настройках, и в копии писать.
Артур Шевченко
29 ноября 2020, 18:59
0
Как меня бесят такие люди как Вы, которые заплатят копейки и считают что им по гроб жизни теперь все должны. Не нравится — забирай оплату и пиши своё решение. Отличное дополнение за свои деньги, да кое-что приходится дорабатывать, но это уже нюансы для конкретных областей применения. Всё предусмотреть невозможно.
Артур Шевченко
28 ноября 2020, 14:36
0
Ну если не проверять, то да, но можно же сделать проверку равно default value или нет. И по вашей же логике на событие docformrender тоже самое должно происходить ведь это событие срабатывает при отрисовки формы в админке. И опять-таки если нужно чтобы всегда было какое-то значение, тогда ondocformsave с проверкой, а если только при создании нужно задавать свойства, тогда на событие «создание ресурса», не помню как называется, но в документации легко найдете.
Артур Шевченко
28 ноября 2020, 00:48
0
Ну, товарищ, когда я говорил Нет я имел ввиду прежде всего то, что компонент задумывался для работы с классами minishop2, а так-то конечно можно, но зачем рассказывать человеку о неоптимальных способах реализации, счастье в неведении)))
Артур Шевченко
27 ноября 2020, 23:21
0
Нет. Но что мешает установить minishop2 и создавать товары? Точнее ресурсы типа Товар Магазина.
Артур Шевченко
27 ноября 2020, 23:09
0
Надо смотреть на проблему в действии.
Артур Шевченко
27 ноября 2020, 23:07
0
В каком плагине не работает?
Артур Шевченко
27 ноября 2020, 23:02
0
Я делал уведомления на сайте через этот сервис comet-server.com/. Создал таблицу в бд куда писал данные, но если сохранять не надо, то можно и без своей таблицы, просто шлёшь запросы и всё.
Артур Шевченко
27 ноября 2020, 22:41
0
Можно. Но не понятно вы про админку или фронт? Если про админку, то зачем вам одинаковая для всех видео картинка? Если про фронт, то просто добавьте колонку в migx.
Артур Шевченко
27 ноября 2020, 22:37
0
Написать плагин на событие msOnBeforeCreateOrder где проверить группу и изменить стоимость доставки, а на фронте просто проверить группу и посчитать скидку. Например через fenom
{if $_modx->user.id | ismember: 'GroupName'}
    {set $deliveryCost = $deliveryCost * 0.8}
{/if}
Артур Шевченко
27 ноября 2020, 22:29
0
Я бы повесил на событие onDocFormSave и проверял бы class_key если товар, то заполняем свойства, только возможно стоит получить именно объект msProduct, а не modResource. У последнего нет поля weight, поэтому оно и не заполняется.
Артур Шевченко
27 ноября 2020, 22:24
0
Через Контроль доступа. В этой политике miniShopManagerPolicy уберите галочку разрешающую удаление заказов.
Артур Шевченко
27 ноября 2020, 22:19
0
можно использовать конструкцию, которую я назвал 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}
Артур Шевченко
27 ноября 2020, 22:05
0
Без написания плагина на событие 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;
}
Артур Шевченко
05 ноября 2020, 22:14
0
Спасибо, Василий, тебе смело можно почивать на лаврах и зарабатывать на обучении, умеешь ты объяснить что куда и как. А что с minishop2? Кто-то будет поддерживать?
Артур Шевченко
01 ноября 2020, 17:00
0
Я не делал, но в таких случаях я лезу БД и смотрю в какой таблице и в каком поле хранится нужная инфа, а потом через pdoResources вывожу используя where.
Артур Шевченко
01 ноября 2020, 16:53
0
Я придумал простое решение проблемы. В магазине есть плашки предупреждающие о системных требованиях, пусть добавят плашку типа «Вызов некоторых снипеттов через этот компонент может быть использован злоумышленниками для взлома сайта».