Всего 125 675 комментариев

Vladimir Alekhin
09 декабря 2020, 19:07
0
Добрый вечер, честно уже не помню как решал тогда, но сейчас решил бы так:

Своя таблица:
CREATE TABLE `modx_tvvaluehistory` (
	`id` INT NOT NULL AUTO_INCREMENT,
	`tv_id` INT,
	`tv_value` BLOB,
	`timestamp` TIMESTAMP DEFAULT CURRENT_TIMESTAMP,
	`user_id` INT,
	PRIMARY KEY (`id`)
);
и бесплатным CMPgenerator (из дефолтного репозитория) сделал бы обвязку для компонента.

Далее плагин на OnTemplateVarBeforeSave скорее всего (надо читать, что где доступно, что бы отловить изменения нужных tv) и создаем новый объект класса таблицы modx_tvvaluehistory и заполняем поля.

Пример работы с событием тут.

А выводить это на фронтенд уже можно чем угодно. Хоть вызвать pdoResources из пакета pdoTools. Такое решение, на мой взгляд будет оптимальным по трудозатраты/результат.

Более опытные члены комьюнити может подскажут решение получше.
Alexey
09 декабря 2020, 13:43
0
Сейчас попробовал на рабочем проекте:

<div class="form-group">
      <textarea name="message_d" class="form-control form-control-simple" placeholder="Введите сообщение *"></textarea>
      <span class="error_message_d">{$_modx->getPlaceholder('error.message_d')}</span>
</div>
skrinshoter.ru/s/091220/gJq6ZWja?a

при неуспешном сабмите {$_modx->getPlaceholder('error.message_d')} выводит строку с ошибкой. Только нужно было этот плейсхолдер обернуть в соответствующий класс ошибки. Значит, в принципе, работает. Возможно, дело в отсутствии префикса fi в вызове плейсхолдера?

Но это у меня связка formIt и AjaxFrom
Максим Логинов
09 декабря 2020, 12:55
0
Нет, Formit имеет свои плейсхолдреры, например с содержанием поля редактируемого ресурса. К сожалению, мы их не можем получить через fenom
Alexey
09 декабря 2020, 11:25
+1
Не совсем понял, откуда передается параметр id. Если из вызова сниппета AjaxForm, наподобие этого:
{'!AjaxForm' | snippet : [
        'snippet' => 'FormIt',
        'form' => 'modal_callback_form',
        'hooks' => 'email,FormItSaveForm',
        ...
    	'validationErrorMessage'=>'В форме содержатся ошибки! Заполните обязательные поля',
    	'successMessage'=>'Сообщение успешно отправлено!',    	
    	'id' => 123
    ]}
то этот параметр будет доступен в форме так:
{$id}
Максим Логинов
09 декабря 2020, 11:13
0
Попробовал, не работает, увы!
Артур Шевченко
09 декабря 2020, 10:54
+1
Сделай выборку по родителю
$products = $modx->getColection('msProduct', array('parent' => id'));
...
Или по нескольким
$products = $modx->getColection('msProduct', array('parent:IN' => [id1,id2,id3]));
Артур Шевченко
09 декабря 2020, 10:51
0
FormIt он под Fenom не заточен, это минус, поэтому от себя могу посоветовать попробовать такой вызов
{$_pls['fi.id']}
Wassi Wassinen
09 декабря 2020, 10:35
0
Владимир, приветствую.
Удалось написать сниппет для вывода данных VersionX на фронтенд?
Alexey
09 декабря 2020, 01:03
+1
Разработчик обновил компонент reCaptchaV3, теперь каждую минуту идет запрос нового токена для рекапчи.

skrinshoter.ru/s/081220/Tsdc0Imy
Фарит
Фарит
09 декабря 2020, 01:02
0
Большое спасибо.
А другого способа нет?
Думал, может как нибудь [[+size]]…
Дело в том, что размер не нужно добавлять ко всем товарам, но ко всем товарам некоторых разделов.
Нужно наверно еще выше добавить выборку по конкретным разделам…
Alexey
08 декабря 2020, 23:14
0
Попробуйте тело функции поместить в отдельный сниппет, который вызывался бы из основного сниппета(вместо вызова функции). Конечно, со всеми «вытекающими» параметрами. Fatal Error должна пропасть.
Alexey
08 декабря 2020, 21:14
+1
Нужно ещё учесть, что размеры хранятся в БД в виде массива — prnt.sc/vyflfj
Поэтому полученное значение желательно распарсить в строку и уже после этого приконтачить к названию:
$size = $p->get('size');
$size = implode('_', $size);
$p->set('pagetitle', $pagetitle . ' ' . $size);
Артур Шевченко
08 декабря 2020, 16:57
0
Просто создать ТВ не получается? А потом вот так
<img src="[[*img]]" alt="[[*alt]]">
Михаил
08 декабря 2020, 16:56
0
тут тогда написать скрипт для экспорта в csv но импорт так же придется написать. Просто так с базы в базу если они разные не перенесешь. Там связи
Артур Шевченко
08 декабря 2020, 16:36
0
Если есть доступ в БД зайдите в неё и посмотрите где лежит нужная информация. Ищите таблицы у которых вторым префиксом идёт ms2_
ms2_products
ms2_product_categories
ms2_product_files
ms2_product_options
ms2_product_links
Соответственно делаете запрос в старую базу, потом результат кладёте в новую, только с файлами будут сложности, поскольку на новом сайте будут новые id у товаров.
Артур Шевченко
08 декабря 2020, 16:29
+1
$products = $modx->getColection('msProduct');
foreach($products  as $p){
    $pagetitle = $p->get('pagetitle');
    $longtitle = $p->get('longtitle');
    $size = $p->get('size');
    $p->set('pagetitle', $pagetitle . ' ' . $size);
     $p->set('longtitle', $longtitle . ' ' . $size);
    $p->save();
}
Код выполнить в консоли.
Наумов Алексей
08 декабря 2020, 16:27
0
Функцию нельзя 2 раза объявлять, вот и идет ошибка.
А вообще давайте я поищу за вас.
Артур Шевченко
08 декабря 2020, 16:24
0
Если этот вызов работает
[[!str? &str= {
текст| 
текст2|
текст3|
тест4
}
]]
То возможно стоит попробовать вот так
[[!str? &str= `{
текст| 
текст2|
текст3|
тест4
}
{
текст| 
текст2|
текст3|
тест4
}`
]]
Если я конечно правильно понял принцип работы сниппета.
Артур Шевченко
08 декабря 2020, 16:19
0
Переписал, надеюсь стало немного лучше.