Всего 123 801 комментарий

Dan
Dan
24 мая 2023, 16:45
0
Дописал код в комменте. Честно, не понимаю причем тут gallery
Евгений
24 мая 2023, 16:42
0
/core/components/gallery/elements/tv/output/ выдает такую ошибку при сохранении с этой строкой
Dan
Dan
24 мая 2023, 16:36
0
Потому что migx хранит в json. При этом, в migx у вас видимо всего одно поле для ввода слова, допустим его ключ word, тогда при декодировании вы получите не массив слов, а массив элементов этого migx, т.е. двумерный массив.
Значит вам нужно будет еще пробежаться по нему и получить все слова.
$words = array();
$res = $modx->getObject('modResource', 11);
$temp = json_decode($res->getTVValue('words'), true);
foreach ($temp as $v) {
    if (!in_array($v['word'], $words)) { //$v['word'] - тут нужно указать ключ вашего поля для слова
        array_push($words, $v['word']); //тут тоже соответственно
    }
}
//после цикла вы получите массив введенных слов. Поэтому я и предлагал tvSuperSelect, с ним было бы проще, без лишнего цикла и вводить в него проще.
Т.
Роман
24 мая 2023, 16:25
0
Спасибо в целом подходит
Евгений
24 мая 2023, 15:37
0
создал тв поле migx добавил слова testx testy в tv и в поле контент

<?php
switch ($modx->event->name) {
        case 'OnDocPublished':
        case 'OnBeforeDocFormSave':
        case 'OnDocFormSave':
            if ($resource->get('template') == 24 && !$resource->get('content')) $resource->set('published', 0);
            $res = $modx->getObject('modResource', 11);
            $words = $res->getTVValue('words'); // тут получить слова, распарсить строку, смотря что там вернет.
           
            $content = $resource->get('content');
            $pattern = '/(?:' . join('|', $words) . ')/i';
            $content = preg_replace($pattern, '', $content);
            
            $resource->set('content', $content);
            $resource->save();
        break;
              
}
но увы не подчищает
может разделитель в параметрах вывода TV или чтото в коде не так? как найти причину непонятно
Андрей
24 мая 2023, 15:27
0
Решение:
Изменить строку в файле:
Надо было просто понизить версию php, после обновления вернуть назад. Обновляйтесь до последней, всё будет нормально.
Константин Ильин
24 мая 2023, 14:34
+1
Сам код тоже можно улучшить, я так понимаю у вас там одни и те же действия, можно как функцию сделать, а так же switch позволяет вот так:
<?php
switch ($modx->event->name) {
        case 'OnDocPublished':
        case 'OnBeforeDocFormSave':
        case 'OnDocFormSave':
            if ($resource->get('template') == 24 && !$resource->get('content')) $resource->set('published', 0);
            $res = $modx->getObject('modResource', id_ресурса_где_вбиты_слова);
            $words = $res->getTVValue('words'); // тут получить слова, распарсить строку, смотря что там вернет.
            // еще проще в php файл записать эти слова и подключать через include
            
            $content = $resource->get('content');
            $pattern = '/(?:' . join('|', $words) . ')/i';
            $content = preg_replace($pattern, '', $content);
            
            $resource->set('content', $content);
            $resource->save();
        break;
              
}
Dan
Dan
24 мая 2023, 14:08
+1
Код тот же самый, просто замените в 1ой строчке моего кода, $resource->id на id вашего ресурса
$res = $modx->getObject('modResource', id_ресурса);
$words = json_decode($res->getTVValue('words'), true);
Андрей Шевяков
24 мая 2023, 12:33
1
+1
Мы вот этим пользуемся utmMark
Иван
24 мая 2023, 11:49
0
Тоже необходимо было оставить вариант вызова в текстовом редакторе, выкрутился следующим образом. Вызов в редакторе стандартный [[$galleryForResource?&gallery_id=`2`]], а в чанке через назначение новой переменной {var $gallery_id = [[+gallery_id]]} далее $gallery_id уже использовал в контексте fenom
Евгений
24 мая 2023, 11:29
0
а как обратиться к TV определенного ресурса ))))
например у него id=11 и TV со словами будет в нем
Алексей
24 мая 2023, 10:42
0
Я понял. Попробую потестить.
Dan
Dan
24 мая 2023, 10:39
0
Возможно я поторопился и кастомный сниппет может по скорости не будет лучше. Принцип подразумевал следующий:
1) Получаем коллекцию категорий товаров
2) Пробегаемся через коллекцию и получаем имеющихся производителей в каждой категории, путем запрос к msVendor с джойном msProduct.
3) Добавляем в вывод

Протестите вызов pdoResources, который я написал в комменте. Если он не критично влияет на скорость загрузки страницы, то можно и его оставить.
Алексей
24 мая 2023, 10:17
0
Спасибо еще раз. Сейчас обсуждаю вывод. Вы сможете написать сниппет?
Dan
Dan
24 мая 2023, 09:29
0
Как раз таки это не все, а производители внутри одной категории. Я же расписал все в комменте.
Вообще для меню этот скрипт конечно будет огромный, я бы скорее написал кастомный сниппет.
Dan
Dan
24 мая 2023, 09:28
0
В принципе такую задачу можно решить плагином на события msOnChangeOrderStatus, msOnRemoveOrder, msOnUpdateOrder и проверять в нем: если статус Новый, то игнорируем и выходим, чтобы не задерживать создание заказа во фронте для клиента. Если статус Оплачен то перебираем товары и уменьшаем значение поля остатков на кол-во этой позиции в заказе, а если статус Отменен, то увеличиваем кол-во, ибо это возврат. И соответственно если менеджер удалит заказ или удалит товар из него, производить те же самые действия.
Сергей Фещуков
24 мая 2023, 09:01
0
Добрый день. Да, компонент работает с товарами без свойств и модификаций.
Игорь
24 мая 2023, 08:59
0
Здравствуйте.
Хочу уточнить: для товаров без свойств и модификаций Ваш компонент будет работать?
Игорь
24 мая 2023, 08:55
0
Ну да, поле-то создать не проблема (хоть кастомное, хоть tv)… Загвоздка именно в функционале: чтобы остатки уменьшались при заказе, например…
Алексей
24 мая 2023, 08:52
0
Спасибо за ваш ответ, но это не то. У вас выводятся все производители, а мне надо что-бы в меню у каждой категории выводились производители этой категории. Вывод нужен в меню, на всех страницах. Пока удалось вывести только на странице категории.