Алексей Шумаев

Алексей Шумаев

Был в сети Вчера в 09:45
Заказы принимаю
Добавил файлы примера в репу. Скрипт обновления хоть и рабочий, но древний + я его сейчас подчистил, так что он тоже не будет работать прямо с ходу ) Но там всё просто и понятно.
Нет, в админке пока смотреть негде — не делал за ненадобностью. Если будут запросы, то добавлю в дальнейшем.
Поле textarea ничем не отличается от text. Вы можете и чекбоксы/радио использовать — никто не запрещает — всё это стандартные поля формы.
Окно успеха делайте любым — это вопрос css.
1. Можно добавить нехитрой кастомизацией js. Можно отдельно в своём скрипте прописать такой функционал.
2. Да
3. Да. Существующие — просто образцы, для быстрого старта, их чанки даже записывать при установке необязательно.

Ваш вопрос слишком объёмный, т.к. ответ на него будет порождать несколько новых вопросов…
Можно делать примерно так:

I. Сначала читаем про
расширение товаров, добавляем новое поле для оптовой цены, например optPrice.
II.
1. Читаем заметку
2. Создаём плагин, в нём проверяем пользователя. Примерно так:
case 'pdoToolsOnFenomInit':
    $fenom->addAccessorSmart("site", "data", Fenom::ACCESSOR_PROPERTY);
            
    # определить принадлежность к группе оптовых
    $optGroupe = 2; # ваша группа оптовых
    $ws = 0; # пока это обычный юзер
    $user = $modx->user;
    $usergroups = $user->getUserGroups();
    if ($user->get('id') && in_array($optGroupe, $usergroups)) {
        $ws = 1; # а теперь - оптовик
    }
            
    $fenom->data = [
       'ws' => $ws
    ];       
break;
Теперь ВЕЗДЕ у вас есть переменная $.site.ws.
Fenom:
{if $.site.ws == 1}
	{$optPrice}
{else}
	{$price}
{/if}
III. В том же плагине на событие msOnBeforeAddToCart добавляем изменение цены для оптовиков, если оптовик.

Вроде всё. Но нюансов может быть множество )
Думаю, лучше самому попробовать устранить. Я выше написал простой сценарий, там не нужно особых знаний. Это даст опыт; и всё равно после устранения проблемы следите за сайтом (за изменением файлов как минимум). Ну а если уже не получится, тогда искать помощи…
Зато в следующий раз вы будете более готовы к таким проблемам, если вдруг снова возникнут.
Сначала посмотрите внимательно пользователей в админке, особенно с правами админа.
Могут быть сюрпризы.
1) закройте сайт, очистите. Или восстановите с чистой копии.
2) вынесете core выше web
3) настройте базовую авторизацию на админку.
4) Поставьте web-антивирус. Он вам как минимум сразу даст знать, если снова будут внесены изменения в файлы.
Дальше по ситуации, пока не будет выявлен способ проникновения, ежели повториться.
По очистке погуглите: нужно будет сначала выявить изменённые файлы через консоль.
Хуков нет, FormIt не используется.
В этом компоненте — главное простота запуска, возможность очень простого встраивания прямо в контент и управление всеми формами в одном месте, доступное менеджеру сайта. Ну и дополнительно заказы, геотаргетинг; сохранение всех отправленных форм + выгрузка данных + токены — это будет в новой версии, скорее всего в январе 2018.
Какой именно функционал Вам необходим?
Вариант:
1) Храним внешние скрипты в поле ClientConfig
Если хотим, чтобы просто было найти и клиент сам мог поставить какой-то счётчик.
2) Подключаем скрипты внизу страницы через сниппет, например: {'extScripts' | snippet}
Код примерно такой:
$js = $modx->getOption('ExtJSFooter');
$search  = array('{', '}');
$replace = array('{ ', ' }');
$out = str_replace($search,$replace,$js);
return $out;

Если у вас несколько включений скриптов (Гуглу-то, например, надо в Head включиться), то сделайте несколько настроек в ClientConfig. Запускать так: {'extScripts' | snippet: ['input'=>'head']}, {'extScripts' | snippet: ['input'=>'footer']}:

if(!isset($input)) return;
$ext = array(
    'head' => $modx->getOption('ExtJSHead')
    ,'body' => $modx->getOption('ExtJSBody')
    ,'footer' => $modx->getOption('ExtJSFooter')
);

$search  = array('{', '}');
$replace = array('{ ', ' }');
$out = str_replace($search,$replace,$ext[$input]);

return $out;