Всего 123 800 комментариев

Евгений
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
Спасибо за ваш ответ, но это не то. У вас выводятся все производители, а мне надо что-бы в меню у каждой категории выводились производители этой категории. Вывод нужен в меню, на всех страницах. Пока удалось вывести только на странице категории.
Dan
Dan
24 мая 2023, 08:44
0
Из коробки пока такого функционала нет. Вопрос в том, какой функционал вы хотите привязать к полю «Остатки»?
Создайте кастомное поле minishop2 (если умеете), если нет, то можете попробовать использовать msAddField, правда не знаю актуален он или нет. Либо можете создать TV.
Далее все зависит от ваших задач.
Например, вы завели TV remaining и хотите вместо кнопки «Добавить в корзину» выводить «Нет в наличии», то код на странице товара например будет такой:
{if $_modx->resource.remaining > 0}
    <button type="submit" name="ms2_action" value="cart/add">Добавить в корзину</button>        
{else}
    <span>Нет в наличии</span>
{/if}
Прочие задачи, например проверка остатков при добавлении в корзину, решаются кастомными плагинами.