Сорри, проверял доступы другого пользователя, забыл разлогиниться))

Это не плагин, это готовый код на выполнение, чтобы всех пользователей не распределенных перенести в определенную группу, то есть это когда пользователи уже давно зарегистрировались. А если у вас задача, чтобы при регистрации пользователь попадал в определенную группу, так это, на сколько я знаю, просто в Login параметр передается и все.

Не редко клиенты обращаются с просьбой защитить их картинки и тексты от копирования. Болшинство из них видели такую “фишку”, что вообще не получается вызвать контекстное меню на странице сайта (где бы был пункт “Открыть изображение в новой вкладке” или “Копировать”) и не работают сочетания клавишь типа Ctrl+C или Ctrl+insert. И вот эту “фишку” они и просят на сайте им сделать. Так вот, статья не о том, как сделать эту глупость. Ведь такая “защита” мешает только обычным пользователям. Те, кто хочет именно скопировать в корыстных целях, как правило знает как такую “защиту” обходить. Ведь все, что загружается в браузер пользователя, априори уже на стороне его компьютера, а значит доступно для копироваться. А еще, так как большинство таких хаков основывается на работе javascript, то для отключения этой “защиты” просто достаточно отключить в браузере сам javascript. Не работает javascript — не работает и “защита”. Но вот сегодня мне попался особенный подопечный… Кличент решил переехать с конструктора сайта на MODX Revolution (заказал перенос) и вот встала задача перенести на новый сайт весь контент, включая картинки. Так как на сайте 200 документов, конечно же это все имело смысл автоматизировать (написать парсер). Но вот что интересно: на сайте картинки прописаны вот таким образом: <img src="data:image/gif," alt="..." class="loading copy-protect" data-index="0" data-id="3900401" data-base-path="http_host/path/images/" data-file-name="images_file_name.jpg" data-version="" data-width="500" data-height="698" /> То есть итоговая картинка генерируется javascript-ом. И это типа призвано защитить сайт от копирования изображений… Что тут можно сказать? Ну, от копирования это никак не спасает (и ниже я свой код приведу для примера). А вот если javascript-код будет битый, или у клиента отключен, то конкретно на этом сайте картинки в принципе не выводятся :) И вот тут не понятно, стоит ли игра свечь? Ведь подобные ошибки могут серьезно понизить конверсию сайта. Я бы вот не стал такого делать. А вот для примера код. Задача: получить карту сайта документа, пробежаться по всем страницам, найти картинки, сформировать итоговый УРЛ картинок, скачать их на сайт и набить все это галереями имеющимся документам (они были похожим образом скопированы не за долго до этого). ini_set('max_execution_time', 0); ignore_user_abort(true);

$str = file_get_contents('http://host.name/sitemap.xml');

$xml = simplexml_load_string($str);

foreach($xml->url as $u){ $url = (string)$u->loc;

if(!preg_match('/http:\/\/host.name\/(shop\/.+)/', $url, $match)){
    continue;
}

// Получаем документ
if(!$doc = $modx->getObject('modResource', [
    'uri'   => $match[1],
])){
    continue;
}

// Если уже галерея имеется, тоже пропускаем
if($doc->getTVValue(12)){
    continue;
}

// Получаем контент документа
if(!$content = file_get_contents($url)){
    continue;
}

// Пытаемся найти картинки
if(!preg_match_all('/<div class="product-image-cell"><a .*?><img [^>]*class="[^"]* copy-protect"[^>]*data-base-path="(.*?)"data-file-name="(.*?)"/', $content, $match)){
    continue;
}

$migx = array();

$img_path = MODX_ASSETS_PATH . "images/";
$doc_path = "original/{$doc->id}/";

foreach($match[0] as $i => $el){
    $file_name = $match[2][$i];
    $img_url = $match[1][$i] . '3-' . $file_name;
    
    if(@$img_code = file_get_contents($img_url)){
        
        // Проверяем наличие категории
        $abs_path = "{$img_path}{$doc_path}";
        
        if(!file_exists($abs_path) AND !mkdir($abs_path)){
            continue;
        }
        
        $img_file_name = "{$doc_path}{$file_name}";
        
        if(file_put_contents("{$img_path}{$img_file_name}", $img_code)){
            $migx[] = array(
                "MIGX_id"   => count($migx) + 1,
                "image"     => $img_file_name,
                "title"     =>"",
                "description"     =>"",
            );
        }
    }
}

if($migx){
    $doc->setTVValue(12, json_encode($migx));
}

}

Всегда говорил: гуглите. Информации полно на множество вопросов :)

Разобрал!))) спасибо Николай Smarty не инициализирована

Получается недоступен $this->modx->smarty в процессоре form если отправлять запрос через аякс. Кто может подсказать как быть?

<br /> <b>Fatal error</b>: Call to a member function assign() on a non-object in <b>../core/components/modxsite/processors/site/web/form.class.php</b> on line <b>172</b><br />

Согласно примеру дописал в action-процессор case 'submit': require_once dirname(dirname(FILE)) . '/forms/feedback.class.php'; self::$actualClassName = "modWebFormsFeedbackProcessor"; break; В инспекторе кода вижу ошибку VM15095:1 Uncaught SyntaxError: Unexpected token < in JSON at position 0

Добрый день. А какие action можно вызывать кроме login ShopMODX.Request.run, в частности интересны для формы обратной связи подобно var action = 'submit'; ShopMODX.Request.run(action, data)