Яна Митрофанова

Яна Митрофанова

С нами с 13 августа 2016; Место в рейтинге пользователей: #522
kuzmin6969
03 февраля 2016, 19:55
1
+1
Попробую вам помочь.
уже не помню почему но нужно писать обертку для pdoResources, в моем случае написал сниппет
thaiPdoResources
<?php
$resources = $modx->getOption('resources', $scriptProperties, '');

if(!empty($resources)) {
    if(!empty($scriptProperties['where'])) {
        $where = (array) json_decode($scriptProperties['where']);
        $where["id:IN"] = explode(',',$resources);
        $scriptProperties['where'] = json_encode($where);
    } else {
        $scriptProperties['where'] = '{"id:IN":['.$resources.']}';
    }
}

return $modx->runSnippet('pdoResources', $scriptProperties);
Вот такого вида.
И вызывать вот так mFilter2
[[!mFilter2?
        &loadModels=`thailand_phuket_rent`
        &class=`ThailandPhuketRent`
        &element=`thaiPdoResources`
	...
пробуйте, отпишитесь
Если не поможет поищу еще…
Василий Столейков
15 ноября 2015, 09:40
1
+2
А я бы сделал немного по-другому.

1. Создаём сниппет date.

2. Вставляем в него код:
<?php
$d = $modx->getOption('d',$scriptProperties,0);
$format = $modx->getOption('format',$scriptProperties,'j F Y г.');
$translate = array(
    "Monday" => "Понедельник",
    "Tuesday" => "Вторник",
    "Wednesday" => "Среда",
    "Thursday" => "Четверг",
    "Friday" => "Пятница",
    "Saturday" => "Суббота",
    "Sunday" => "Воскресенье",
    "January" => "января",
    "February" => "февраля",
    "March" => "марта",
    "April" => "апреля",
    "May" => "мая",
    "June" => "июня",
    "July" => "июля",
    "August" => "августа",
    "September" => "сентября",
    "October" => "октября",
    "November" => "ноября",
    "December" => "декабря"
);
$date = strtotime("$d day");
$output = str_replace(array_keys($translate), array_values($translate), date($format, $date));
return $output;

3. Вызываем наш сниппет в 3-х местах с нужными параметрами:
дата сегодня — [[!date]] // выведет 15 ноября 2015 г.
дата через десять дней — [[!date?&d=`+10`]] // выведет 25 ноября 2015 г.
дата через 20 дней — [[!date?&d=`+20`]] // выведет 05 декабря 2015 г.
Можно и в другую сторону:
дата за десять дней — [[!date?&d=`-10`]] // выведет 5 ноября 2015 г.
Также можно менять формат вывода, по умолчанию j F Y г.:
[[!date?&d=`-10` &format=`j F Y года`]] // выведет 5 ноября 2015 года
Павел
09 ноября 2015, 09:41
1
+1
Да зачем подключать jquery в head?) Подскажу решение для данной ситуации.

В общем скрипт данного компонента подключается с помощью метода regClientStartupScript, который в свою очередь подключает скрипты в начале страницы, то есть между тегами HEAD. Для того, чтобы вызвать скрипт в низу страницы надо использовать другой метод regClientScript.

Решение

В файле core/components/eventscalendar2/model/eventscalendar2/eventscalendar2.class.php

Замените
$this->modx->regClientStartupScript('<script type="text/javascript" src="'.$this->config['jsUrl'].'eventscalendar2.js"></script>');
На

$this->modx->regClientScript('<script type="text/javascript" src="'.$this->config['jsUrl'].'eventscalendar2.js"></script>');
Примерно 442 строчка
Павел Гвоздь
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;
	
}
Ганин Роман
24 апреля 2015, 22:57
11
+2
Начало разработки — за пределами MODX. Вёрстка (БЭМ) шаблонов, чанков и страниц в Sublime Text 3 с использованием Gulp-задач для автокомпиляции с использованием пре- и постпроцессоров (ускоряют разработку в 4-5 раз), зависимости: bower, для UI-тестов адаптивности: BrowserSync. Минификация стилей и скриптов на клиенте (прекратите вешать эту задачу на MinifyX/сервер!). Кодстайл: CSScomb и JSCS + JSLint. В дальнейшем можно настроить автоматическую выгрузку по SFTP скомпилированных файлов прямо на сервер. Шаблонизация на клиенте легко настраивается с помощью gulp-rigger, gulp-file-include или gulp-include-source. За счет вотчеров скорость просто реактивная. Особенно удобно, если монитора два и больше — в одном мониторе код проекта, в остальных — мгновенный результат (страница обновляется быстрее, чем я успеваю перевести взгляд с одного монитора на другой или переключиться на новый раб. стол).
Инициализация сервера: ansible, установка MODX: Gitify, импорт настроек: Teleport. Импорт уже подготовленных чанков, tpl-ек занимает минуты, нет необходимости заниматься «клавадрочерством» с Ctrl+Tab (переключиться на фронтенд-вкладку), Ctrl/Cmd+R (обновить страницу), чтобы просмотреть результат — всё уже оттестированно на этапе вёрстки. Остаётся только настроить магию сниппетов и оформить Custom Forms. Дальше — оверлокинг с XDebug, debugParser, BloodLine и Chrome DevTools.
Картер
19 марта 2015, 11:31
2
0
[[pdoResources? &parents=`10` &returnIds=`1` &toPlaceholder=`prodIds`]]
[[pdoResources? &resources=`[[+prodIds]],1,2,3` ]]
//или со сниппетом
[[pdoResources? &resources=`[[+prodIds]],[[getProductSubCategory? &catalog_id=`[[*id]]`]]` ]]
Если будет одна запятая в &resources=`,` — сниппету пофиг, он ее игнорит.

По другому ничего не придумал, сломал весь мозг(

valentink2410
20 октября 2014, 18:47
1
0
Спасибо это я возьму на вооружение себе, ну а по поводу чистки конкретного документа можно использовать твой код, я лишь добавил одну строчку, главное работает теперь можно чистить по id документа
сам код:
$id=9;
$resource=$modx->getObject('modResource',$id);
$resource->_contextKey = $resource->context_key;
$cache = $modx->cacheManager->getCacheProvider($modx->getOption('cache_resource_key', null, 'resource'));
$key = $resource->getCacheKey();
$cache->delete($key, array('deleteTop' => true));
$cache->delete($key);