Василий Столейков

Василий Столейков

С нами с 19 декабря 2012; Место в рейтинге пользователей: #23
Александр
04 февраля 2016, 19:48
1
+1
В теории немного правок и можно к Тикетам прикрутить

$response = $modx->runProcessor('file/upload .... array('processors_path' => MODX_CORE_PATH.'components/tickets/processors/web/')
Василий Наумкин
27 января 2016, 21:35
2
+1
Системная настройка request_method_strict.
Илья Уткин
26 января 2016, 14:42
1
0
И в плагине должна быть доступна переменная $results, в которой будет список снятых с публикации ресурсов
$results['unpublished']
Сергей Шлоков
20 января 2016, 13:31
1
+2
4. откуда-то ещё удалить..?
Ещё могут быть установлены компоненты, которые хранят ссылку на ресурс.

Попробуй создать плагин на событие OnBeforeEmptyTrash
// Удаляет ресурсы порцией по 1000, т.е. нажать на корзину нужно будет 15 раз. 
$resources = array_slice($resources , 0, 1000);
Теоретически должно сработать.
mngatoff
17 января 2016, 03:48
2
+1
1. файл core/components/minishop2/model/minishop2/minishop2.class.php
строка 263 — функция getCustomerId создает пользователей, если их нет. Здесь можно добавить сохранение телефона. Только потом минишоп нельзя обновлять)
2. плагин на событие msOnChangeOrderStatus
происходит в нем примерно следующее:
<?php
$user = $modx->getObject('modUser', $order->get('user_id'));
$prof = $user->getOne('Profile');

if ($prof->get('logincount') > 0 || $order->get('status') > 1) return;

$pass = $user->generatePassword(6);
$user->set('password', $pass);
$user->save();

$message = "<p><strong>Ваши данные для входа в личный кабинет на сайте ".$modx->getOption('site_name')."</strong></p>
            <table>
            	<tr><td><strong>Логин:</strong></td><td>".$user->get('username')."</td></tr>
            	<tr><td><strong>Пароль:</strong></td><td>".$pass."</td></tr>
            </table>";
$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY, $message);
$modx->mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
$modx->mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
$modx->mail->set(modMail::MAIL_SENDER, $modx->getOption('emailsender'));
$modx->mail->set(modMail::MAIL_SUBJECT, 'Ваши данные для входа на сайт');
$modx->mail->address('to', $prof->get('email'));
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
    $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
}
$modx->mail->reset();
Это будет отдельное письмо, сам заказ отправляется минишопом, туда я не влезал.
Konstantin
15 января 2016, 21:41
1
+2
короче делайте так:
рабочий вариант )))

$user = $modx->getObject('modUser', 1);
$profile = $user->getOne('Profile');
$profile->set('photo', 'foto.jpg');
$profile->save();
Андрей
13 января 2016, 11:43
1
+1
Как оказалось, все можно решить гораздо более простым способом.
За подсказку в решении вопроса отдельное спасибо пользователю Володя.
Вот правильный и короткий код:

$id = 1;
if ($User = $modx->getObject('modUser', $id) AND $Profile = $User->getOne('Profile')) {
    	$Profile->set('comment', 'comment');
	$Profile->set('zip', 'zip' );
	$Profile->save();
}
Сергей Шлоков
12 января 2016, 18:35
2
+1
Думаю, так должно работать
// Процессор очистки корзины
$response = $modx->runProcessor('resource/emptyrecyclebin');
if ($response->isError()) $response->getMessage();
Выполнять в специальном сниппете или Console.
Ну а лучше конечно разобраться с ошибкой очистки через корзину.
Наумов Алексей
12 января 2016, 16:03
2
+3
Ну… пишем плагин на OnDocFormSave.

В нем мы делаем проверку на:
1. Что мы сохраняем новый документ
if ($mode == 'new') {
  ...
}
2. Что наш документ — это Дом, например по шаблону проверяем
if($resource->get('template') == XXX)
И создаем дочерние ресурсы, используя $resource->get('id') (да-да, id нового документа у нас уже есть) в качестве parent.
$data = array(
   'parent' => $resource->get('id'),
   'published' => 1,
   'pagetitle' => 'Название',
    'content' => 'Текст страницы'
);
$modx->runProcessor('resource/create', $data);
Илья Уткин
12 января 2016, 11:23
2
+3
Установить Console и запустить в нем что-то типа такого:

<?php
// Сколько ресурсов обрабатывать за раз
$step = 1;
// Если процесс уже остановлен, сбрасываем OFFSET
if (!isset($_SESSION['Console']['completed'])) {
    $_SESSION['console_offset'] = 0;
}
$offset = isset($_SESSION['console_offset']) && $_SESSION['console_offset'] ? $_SESSION['console_offset'] : 0;
// Формируем запрос
$q = $modx->newQuery('modResource');
$total = $modx->getCount('modResource', $q);
// Пропускаем все уже обработанные объекты
$q->limit($step, $offset);
$resources = $modx->getCollection('modResource', $q);
// Обработка
foreach ($resources as $resource) {
    $modx->runProcessor('resource/update', $resource->toArray());
}
// Меняем offset
$_SESSION['console_offset'] = $offset + $step;
if ($_SESSION['console_offset'] >= $total) {
  $sucsess = 100;
  $_SESSION['Console']['completed'] = true;
} else {
  $sucsess = round($_SESSION['console_offset'] / $total, 2) * 100;
  $_SESSION['Console']['completed'] = false;
}
for ($i=0; $i<=100; $i++) {
    if ($i <= $sucsess) {
        print '=';
    } else {
        print '_';
    }
}
print "\n";
print $sucsess.'% ('.$_SESSION['console_offset'].')'."\n\n";