Пётр Молчанов

Пётр Молчанов

С нами с 24 декабря 2012; Место в рейтинге пользователей: #199
Пётр Молчанов
24 июля 2015, 16:12
0
$data_array = [
'username' => $profile->get('username'),
'name' => $profile->get('fullname'),
'password' => $profile->get('password'
];
у вас тут не хватает скобки $profile->get('password'
Пётр Молчанов
24 июля 2015, 16:09
0
ну да. например:
$messageFields = [
	'test1' => '123',
	'test2' => '321'
];
$message = $modx->getChunk('TestEmailTpl', $messageFields);
и в чанке TestEmailTpl
test1: [[+test1]]
test2: [[+test2]]
в итоге при использовании выведет
test1: 123
test2: 321
Пётр Молчанов
24 июля 2015, 15:59
-1
чанк создан для разделения оформления и непосредственно самого php-кода, можно и без чанка просто в эту переменную написать всё оформление.
надеюсь, вместо «ваш_чанк» вы пишите название вашего чанка?
и вообще, было бы не плохо показывать свой нерабочий код
Пётр Молчанов
22 июля 2015, 17:51
0
тупо берет циферку из настроек и показывает эту страницу (с помощью $modx->sendForward(вашициферки) )
$modx->sendUnauthorizedPage();
вообще, я еще больше не понял, что вам нужно в итоге
Пётр Молчанов
22 июля 2015, 11:40
0
я ж вам в предыдущем сообщение привел пример массива.
суть в том, что в плагине нужно получить пароль, чтобы отправить его в письме, но это невозможно, поэтому необходимо генерировать его снова и записывать в аккаунт, тогда он сохраняется в нашей переменной и мы можем передать его в чанк
Пётр Молчанов
22 июля 2015, 11:27
+1
В этом случае придется генерить пароль за людей. как-то вот так:
// генерим пароль
    $pass = $modx->user->generatePassword();
    $user->set('password',$pass);
    $user->set('active','1');
    $user->save();
$data_array = ['name' = $profile->get('fullname'), 'password' => $pass];
$message = $modx->getChunk('ваш_чанк', $data_array);
если нужно брать пароль, который вводит пользователь, то надо писать не в плагин, а в постхук Login
Пётр Молчанов
22 июля 2015, 10:52
1
+2
как отправить письмо:
$message = $modx->getChunk('ваш_чанк', массив_переменных); // либо можно без чанка тело просто оформить
                $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('site_name'));
                $modx->mail->set(modMail::MAIL_SUBJECT,'тема письма');
                $modx->mail->address('to',$email); // тут мыло кому отправляете
                $modx->mail->address('reply-to',$modx->getOption('emailsender'));
                $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);
                  return false;
                }
                $modx->mail->reset();
событие OnUserSave rtfm.modx.com/revolution/2.x/developing-in-modx/basic-development/plugins/system-events/onusersave
я использую такой вариант:
if ($modx->event->name === 'OnUserSave' && $mode === 'new') {
так получаем мыло
$profile = $user->getOne('Profile');
$email = $profile->get('email');
тут ваш код, либо мой, который выше
}
Пётр Молчанов
14 июля 2015, 17:00
0
щас сделал так: в сниппете принимаю все параметры и передаю их в pdoPage. вот так:
$city = isset($_POST['city']) ? $_POST['city'] : '';
$service = isset($_POST['service']) ? $_POST['service'] : 'all';
$page = isset($_REQUEST['page']) ? $_REQUEST['page'] : '1';
$options = [
    'element' => 'pdoUsers',
    'page' => $page,
    'groups' => '4',
    'tpl' => 'userCardPro',
    'select' => '{"modUserSetting":"key, value as photop_add_date"}',
    'innerJoin' => '{
		"modUserSetting":{"class":"modUserSetting","on":"modUser.id=modUserSetting.user"}
	}',
	'sortby' => 'photop_add_date',
    'limit' => '9',
    'sortdir' => 'asc'
];
$where=['"modUserSetting.key":"photop_add_date"'];
if($city != '')
    $where[] = '"modUserProfile.city:LIKE":"%'.$city.'%"';
if($service != 'all')
    $where[] = '"modUserProfile.extended:LIKE":"%'.$service.'\":\"yes%"';

$options['where'] = '{'.implode(',',$where).'}';

$output = $modx->runSnippet('pdoPage',$options);
echo $output.$modx->getPlaceholder('page.nav');
но в этом случае не меняется заголовок страницы и урл
Пётр Молчанов
14 июля 2015, 14:51
0
Если юзать чисто $modx->cacheManager->refresh();, то да, весь кеш чиститься, но я не просто так кинул тебе сцыль на доки. Посмотри там в конце примеры, эта конструкция принимает 2 параметра: $paths и $options
Пётр Молчанов
14 июля 2015, 10:40
1
+1
Надо юзать $modx->cacheManager->refresh();
Подробнее про опции смотри тут rtfm.modx.com/revolution/2.x/developing-in-modx/advanced-development/caching
Пётр Молчанов
06 июля 2015, 18:51
+1
Тебе надо глянуть какие данные идут вместе с событием и их и использовать, а переменная $user->get — это данные текущего авторизованного пользователя
Пётр Молчанов
06 июля 2015, 18:43
+2
А почему ты используешь $user->get? о_0 вроде ж ты гостей проверяешь…
Пётр Молчанов
27 мая 2015, 11:19
0
У меня пара вопросов:
1. просмотр страницы считается только зарегеным пользователем? Если да, то как сделать подсчет любого посетителя?
2. выставлять оценку могут тока зарегеные пользователи? Если да, то как сделать, чтобы могли все это делать?
Пётр Молчанов
25 мая 2015, 10:55
5
+2
Лучше такое сделать плагином на событие OnUserRegister. Что-то типа такого:
if ($modx->event->name == 'OnUserSave' && $mode=='new') {
    // генерим пароль
    $pass = $modx->user->generatePassword();
    $user->set('password',$pass);
    $user->set('active','1');
    $user->save();
    // получаем мыло
    $profile = $user->getOne('Profile');
    $email = $profile->get('email');
    // отправляем письмо
		$messageFields = [массив каких-то данных, например, логин и пароль];
                $message = $modx->getChunk('UserRegEmailTpl', $messageFields);
                $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('site_name'));
                $modx->mail->set(modMail::MAIL_SUBJECT,'Благодарим за регистрацию');
                $modx->mail->address('to',$email);
                $modx->mail->address('reply-to',$modx->getOption('emailsender'));
                $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);
                  return false;
                }
                $modx->mail->reset();
}
Пётр Молчанов
30 апреля 2015, 14:59
0
pThumb — всем устраивает. ресайзер тоже юзаю, всё отлично
Пётр Молчанов
22 апреля 2015, 14:44
0
У мя там в коде есть "// скрыть/показать пункты", глянь его. Я это сделал через дополнительный properties