Всего 123 794 комментария

Евгений
25 мая 2023, 09:48
0
ошибка выбивается сразу как я добавляю строку
$words = json_decode($res->getTVValue('words'), true);

а при такой $words = $res->getTVValue('words');
ее нет

в серверных логах ошибок нет
Dan
Dan
25 мая 2023, 09:42
0
Вы лог модх смотрите? Надо серверный, ибо ошибка 100% с кодом 5хх, скорее 500.
Евгений
25 мая 2023, 09:38
0
да, при сохранении выскакивает ошибка, но зависания нет, просто продолжаешь работать а сохранить не можешь :)

при этом для всех шаблонов хотя там в условиях указан конкретный
лог ошибок пуст
старый код плагина где я слова перечислял через запятую не вызывает проблем
Dan
Dan
25 мая 2023, 09:31
0
При сохранении ресурса имеете в виду? Просто зависает? Тогда скорее другой плагин что-то ломает. Надо смотреть логи, так сложно сказать.
Евгений
25 мая 2023, 09:25
0
<?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 = json_decode($res->getTVValue('words'), true);
           
            $content = $resource->get('content');
            $pattern = '/(?:' . join('|', $words) . ')/i';
            $content = preg_replace($pattern, '', $content);
            
            $resource->set('content', $content);
            $resource->save();
        break;
              
}
когда делаю так получаю ошибку при сохранении… которую выше писал но на снипет colorpicker
Dan
Dan
25 мая 2023, 05:15
0
Ну вы хоть почитайте мой комментарий, я же в самом первом написал код, а вы снова по своему получаете, вот и не работает. tvSuperSelect тоже хранит json
Евгений
24 мая 2023, 22:09
0
tvsuperselect
и такой код
<?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 words
Евгений
24 мая 2023, 21:40
0
а как сделать так чтобы он удалял именно конструкцию word1 а не просто word?
Dan
Dan
24 мая 2023, 19:16
+1
Как установите его, в списке тв полей появится tvsuperselect
Евгений
24 мая 2023, 19:14
0
с tvsuperselct вид тв поля какой нужен
Евгений
24 мая 2023, 19:10
0
тоже не понял но там и на другие снипеты орал
Баха Волков
24 мая 2023, 19:03
+1
Есть какая-нибудь информация по срокам появления поддержки modx3? Спасибо
1. Данный компонент отлично работает с MODX 3, с одним, но — не работают файловые чанки и вы можете установить его вручную скачав транспортный пакет с github.

2. Есть черновой вариант полной поддержки MODX 3, но я занят по работе и кое-что масштабное готовлю для сообщества.

Как будет время доделаю
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;
              
}