Кирилл Киселев

Кирилл Киселев

С нами с 12 июля 2016; Место в рейтинге пользователей: #427
Пётр Молчанов
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();
}
Андрей
21 марта 2015, 16:31
8
+1
Ну вот как-то так набросал на скорую руку. -)

Создал плагин, повесил на событие OnDocFormSave.

<?php
if ($modx->event->name == 'OnDocFormSave') {

	$parentIds = $modx->getParentIds($id, 4, array('context' => 'web'));   // Получаем id всех родителей ресурса
	$res = $modx->getObject('modResource',$id);
	$curAlias = $res->get('alias');   // Алиас текущего ресурса

	$cnt = count($parentIds);  // Количество родителей

	if($cnt > 2) { 

		$aliases = array();   // Массив для всех найденных алиасов

		foreach($parentIds as $v) {
			if($v == 22 || $v == 0) continue;  // Если родитель - контейнер Shop(22) или главный родитель (0) - пропускаем.

			$obj = $modx->getObject('modResource', $v);
			$alias = $obj->get('alias');
			$aliases[] = $alias;
		}

		$resource->set('uri', implode('/',array_reverse($aliases)) . '/' . $curAlias);

	} else {
		$resource->set('uri', $curAlias);
	}

	$resource->set('uri_override', true);
        $resource->save();

}
Можно еще добавить условие, чтобы урл, таким образом, формировался только для новых ресурсов. Мне пока не нужно.

if ($mode == 'new') {
    // код выше
}
Василий Наумкин
01 марта 2015, 21:17
2
0
А есть вообще смысл использовать объекты xPDO?

Гораздо проще и быстрее будет использовать:
if ($c->prepare() && $c->stmt->execute()) {
	while ($row = $c->stmt->fetch(PDO::FETCH_ASSOC)) {
		print_r($row);die;
	}
}
Василий Наумкин
06 апреля 2013, 06:31
5
0
Выводить на сайте разные цены можно хотя бы условиями в чанке. Использовать можно не только ТВ, но и поле old_price, а также можно добавить свое собственное, расширением свойств товара.

Главная цель — положить товар в корзину с нужной ценой, этого можно добиться написанием плагина на событие корзины msOnBeforeAddToCart.

Плагин должен проверять авторизацию и получать нужную цену, а затем менять её в объекте product (но не сохранять!).

Пример плагина, меняющего нормальный price на old_price, если юзер авторизован:
if ($modx->event->name == 'msOnBeforeAddToCart' && $modx->user->isAuthenticated()) {
	$old_price = $product->get('old_price');
	if (!empty($old_price)) {
		$product->set('price', $old_price);
	}	
}