Павел Гвоздь

Павел Гвоздь

С нами с 31 мая 2015; Место в рейтинге пользователей: #2
Павел Гвоздь
21 августа 2015, 10:45
0
Спасибо большое, Василий. Я вот иногда замечаю такое, что если на странице или в шаблоне прописано только {include 'test'} или {extends 'test'}, то он не парсит его, а выводит прям как есть текстом. Это глюк или я что-то не пойму?

Обновлено: А вот если ниже дописать {block 'test'} {/block}, то всё приходит в норму и Феном включается.
Павел Гвоздь
19 августа 2015, 07:13
0
Не знаю насколько правильно написан этот сниппет. Может Василий увидит — поможет, посоветует.

if( !$MobileDetect = $modx->getService('mobiledetect', 'MobileDetect', MODX_CORE_PATH . 'components/mobiledetect/') )
{
	return;
}

$key = $MobileDetect->config['force_browser_variable'];

$device = !empty($_GET) && array_key_exists($key, $_GET)
		? $modx->stripTags($_GET[$key])
		: '';

if( empty($device) )
{
	$device = $MobileDetect->getSettings();
}
else {
	return $device;
}

if( empty($device) )
{
	if( $MobileDetect->getDetector()->isMobile() )
	{
		return 'mobile';
	}
	else {
		return 'normal';
	}
}
else {
	return $device;
}
Павел Гвоздь
18 августа 2015, 19:47
+3
Можно написать один хедер и разделить его на 2 версии. А если этот компонент использовать в сочетании с Феном, то можно сделать гораздо больше и грамотнее.
Павел Гвоздь
17 августа 2015, 22:09
+1
Вот за это спасибо, Василий. Долго думал, как лучше сделать проверку и цикл while почему-то не рассматривал, как вариант. После твоих слов сразу в голову пришёл while. Поправил.
Павел Гвоздь
17 августа 2015, 21:03
0
Разве в index.php не происходит тоже самое?)

К слову:
Это все делается в 5 строчек
Тем способом, которым воспользовался я это можно сделать в 3 строчки:
define('MODX_API_MODE', true);
require_once dirname(__FILE__) . '/index.php';
$modx->getService('error','error.modError');
Это если Вам нравится делать всё компактно.
Павел Гвоздь
17 августа 2015, 20:45
0
А в чём отличие Вашего метода подключения и того, что у меня, если не считать множества проверок на существование файла index.php в моём скрипте?

Мне действительно интересно, может я что-то делаю не так…
Павел Гвоздь
17 августа 2015, 19:40
0
Перепишите для себя. Я для себя писал и мне удобно, чтобы скрипт можно было сунуть куда-нибудь.
Павел Гвоздь
17 августа 2015, 11:47
0
Цена и расположение — не всегда показатель. К примеру FirstVDS предоставляет качественные сервера примерно за такую-же цену. Берите ВДС и настраивайте по инструкции Василия — первая и вторая. Будет счастье.
Павел Гвоздь
17 августа 2015, 10:38
0
Может плагин какой плохой?
Павел Гвоздь
16 августа 2015, 20:43
6
+3
Вот какой-то плагин писал давненько. Как раз отсылает мыло. А если мыло не ввели, то создаёт юзера вот с таким мылом «телефон@сайт-на-котором-регается-юзер.ru». На том сайте мне надо было вводить либо мыло, либо телефон. Поэтому такое решение.

Обновлено: В конце там у нас есть код — если юзер авторизован, то записать данные введённые в заказе в Profile.

<?php
$mail_subj_text = 'Регистрация на ' . $modx->getOption('site_name');
$chunk_mail_reg = 'tpl.mail.userRegisterFromOrderSubmit';
$suffix_email = '@сайт-на-котором-регается-юзер.ru';

switch ($modx->event->name)
{
	
	// Обработка события, чтобы узнать, существовал ли юзер раньше..
	// А также подставляет левый email, если он не заполнен, а "телефон" заполнен
	case "msOnSubmitOrder":
		
		$order_data = $order->get();
		if( empty($order_user['email']) ) {
			$order_data = $data;
		}
		//$modx->log(modX::LOG_LEVEL_ERROR, print_r( $order->get() , true));
		//$modx->log(modX::LOG_LEVEL_ERROR, print_r( $data , true));
		
		// если email пуст или он с нашим суффиксом, то подставляем ему мыло вида - "телефон@suffix_email"
		if( empty($order_data['email']) || strstr($order_data['email'], $suffix_email) )
		{
			if( trim($order_data['phone']) != '' )
			{
				$phone = preg_replace( "/\D/", "", $order_data['phone'] );
				$data['email'] = $order_data['email'] = ( $phone ) . $suffix_email;
			}
			else
			{
				$data['email'] = $order_data['email'] = '';
			}
		}
		$modx->event->returnedValues['data'] = $data;
		
		// проверяем наличие мыла
		$email = $order_data['email'];
		if(empty($email)) { continue; }
		
		// проверяем на существование юзера по username=email, и если не существовал, то пишем соответствующее значение в сессию
		$_SESSION['minishop2']['new_user'] = false;
		if( !$modx->getCount('modUser', array('username' => $email)) )
		{
			$_SESSION['minishop2']['new_user'] = $email;
			//$modx->log(modX::LOG_LEVEL_ERROR, print_r( $_SESSION['minishop2']['new_user'] , true));
		}
		
		//$modx->log(modX::LOG_LEVEL_ERROR, print_r( $data , true));
		
	break;
	
	
	case "msOnCreateOrder":
		
		$order_user = $order->get();
		
		// если email с суфиксом нашего сайта - то не продолжаем
		if( strstr( $order_user['email'], $suffix_email ) ) { continue; }
		
		// если не авторизован
		if( !$modx->user->isAuthenticated($modx->context->key) )
		{
			$email = $order_user['email'];
			if(empty($email)) {return false;}
			
			$user = $modx->getObject("modUser", array('username' => $email) );
			
			// Если юзер не существовал раньше (при событии msOnSubmitOrder), то ставим ему новый пароль и шлём сообщение о регистрации на мыло
			if( $_SESSION['minishop2']['new_user'] == $email )
			{
				$new_password = substr( md5(rand()), 0, 9 );
				$user->set('password', $new_password );
				$user->save();
				$modx->log(modX::LOG_LEVEL_ERROR, print_r( $new_password , true));
				
				// формируем письмо (тему и текст)
				$mail_subj = $mail_subj_text;
				$mail_body = $modx->getChunk( $chunk_mail_reg,
					array_merge(
						$user->getOne('Profile')->toArray(),
						$user->toArray(),
						array(
							'password' => $new_password,
						)
					)
				);
				
				
				// шлём письмо
				$mail = $modx->getService('mail', 'mail.modPHPMailer');
				$mail->set(modMail::MAIL_BODY, $mail_body);
				$mail->set(modMail::MAIL_FROM, $modx->getOption('emailsender'));
				$mail->set(modMail::MAIL_FROM_NAME, $modx->getOption('site_name'));
				$mail->set(modMail::MAIL_SENDER, $modx->getOption('emailsender'));
				$mail->set(modMail::MAIL_SUBJECT, trim($mail_subj));
				$mail->address('to', $email);
				$mail->address('reply-to', $modx->getOption('emailsender'));
				$mail->setHTML(true);
				$mail_response = !$mail->send()
					? $mail->mailer->ErrorInfo
					: true;
				
				// пишем в лог, если письмо не ушло
				if ($mail_response != true) {
					$modx->log(modX::LOG_LEVEL_ERROR, 'Не получилось отправить email на ящик '.$email.'. Сообщение: '.$mail_response);
				}
				$mail->reset();
			}
			
			//$modx->log(modX::LOG_LEVEL_ERROR, print_r( $_SESSION[ 'user_' . $email ] , true));
		}
		else
		{
			$user = $modx->user;
			
			// записываем данные из формы в профиль
			$profile = $user->getOne('Profile');
			
			$profile->set('fullname', $order_user['receiver']);
			$profile->set('phone', $order_user['phone']);
			$profile->set('city', $order_user['city']);
			$profile->set('address', $order_user['street']);
			$profile->set('comment', $order_user['comment']);
			
			$profile->save();
		}
		
		//$modx->log(modX::LOG_LEVEL_ERROR, print_r( $order_user , true));
		
	break;
	
}
Павел Гвоздь
16 августа 2015, 18:00
0
Всё понял, спасибо большое!
Павел Гвоздь
16 августа 2015, 10:42
0
А msDiscount такого не позволяет реализовать? Хороший компонент умеющий многое. Может и это умеет…

Я имею ввиду скидку при достижении определенной цены.
Павел Гвоздь
16 августа 2015, 02:06
+1
Я думаю, было бы здорово, если б и это было в возможностях Феном, пусть даже чуть неточно. К тому-же если полностью отказаться от modx тегов в шаблонах и вообще везде, то наверное разница во времени будет практически неразличимой?

В любом случае решать тебе. Как бы то ни было — то, что ты сделал для нас — заслуживает уважения (не только Феном, хотя он поставил большой восклицательный знак)!

Начал интенсивно использовать при разработке include и extends. Шаблоны стали более гибче. Всё легко меняется в одном месте. Без кучи чанков. В общем я до сих пор под впечатлениями от того, как это просто внедрить, буквально несколькими кликами.
Павел Гвоздь
15 августа 2015, 09:35
0
Если честно, на мой взгляд такой CMF, как модх — может стать достаточно популярным, среди разработчиков с достаточным уровнем знаний. Вы не поверите, но сколько много до сих пор смыслящих разрабов, которые работают с ВП, и другими, а о модх и ухом даже не слышали. Когда они понимают, что из себя представляет модх, то от него их уже за уши не оттащить. Я таких встречал. А также встречал и многих, кто уже работает с модх. Даже у нас в Казахстане. И не на сайтах посвящённых модх. Поэтому и говорю, что модх набирает популярность, медленно, но стремительно.
Павел Гвоздь
15 августа 2015, 09:27
0
Роман, не могли бы Вы выложить код виджета, пожалуйста?
Павел Гвоздь
13 августа 2015, 22:45
+1
Да там не один день всё это копилось, насколько я наблюдал за негодованием Василия.
Павел Гвоздь
13 августа 2015, 22:35
0
Остаётся только проверять, передан ли email, и если нет, то домогаться пользователя ввести его?
Павел Гвоздь
13 августа 2015, 22:26
0
Согласен, Роман. Путь был действительно долог и с ухабами. ;)
Павел Гвоздь
13 августа 2015, 22:25
0
А меня, к примеру, отпугивают платные шаблоны тем, что их придётся в любом случае переделывать. Ну не могу я найти в англоязычном сегменте интернета шаблоны, которые бы удовлетворяли юзабилити удобству пользователя в моём понимании. Поэтому считаю, что проще уж либо заказать у дизайнера макет и самому сверстать от души, или, если проект простой — сделать самому на бутстрапе что-то простое. Так легче. На мой взгляд.
Павел Гвоздь
13 августа 2015, 22:17
0
Скажу так: каждый совершенствует свои навыки. Бывает человек занимается разработкой веб-сайтов, как хобби, ему просто это нравится, и он стремится (по возможности) улучшить свои навыки. Поэтому всех под одну гребёнку… я бы не стал.