Роман Воропаев (Volk)

Роман Воропаев (Volk)

С нами с 03 декабря 2015; Место в рейтинге пользователей: #80
Николай Савин
10 апреля 2016, 11:10
4
+3
Я для себя решаю задачу примерно так.
1. Организации — это Пользователи. Для их самостоятельной регистрации и последующей правки карточки организации нужно использовать office.
2. Для хранения информации, стандартных полей таблицы пользователей не хватает обычно, поэтому я расширяю таблицу и добавляю любое нужное мне количество полей вот так
3. Для вывода и каталогизации пользователей-организаций используется pdoUsers
4. Для фильтрации пользователей по различным параметрам проще всего использовать mfilter2. Примерную методику я описывал здесь
5. Также вывод делается с помощью методики
6. Ну а объявления — это конечно tickets.

Таким образом можно обойтись без дублирования страниц
DocentBF
17 марта 2016, 11:48
1
0
Сортировка по pagetitle, скорее всего, не спасет, т.к. поле типа varchar и вывод будет таким же, как показано выше. В данном случае можно попробовать убрать параметр sortby и использовать where c преобразованием типа:
&where=`["ORDER BY CAST(pagetitle AS SIGNED)  ASC"]`
Могу ошибаться, нужно пробовать.
Борода
17 марта 2016, 07:54
1
+1
Избавь себя от гемороя) Вот тебе готовое решение) В комментариях есть всё, что надо)
У меня и из облака тегов выводятся статьи по тегу) И из тега под каждой статьёй и так далее)))
Сергей Фещуков
13 марта 2016, 12:24
2
0
Обработчик события успешного добавления товара в корзину:
miniShop2.Callbacks.Cart.add.response.success = function(response) {
    //здесь ваш js-код
}
/* Но не забывайте, что есть событие изменения количества товара в корзине */
miniShop2.Callbacks.Cart.change.response.success = function(response) {
    //здесь ваш js-код
}
Илья Уткин
15 февраля 2016, 13:51
10
+12
Вот такой файлик проще
<?php
define('MODX_API_MODE', true);
require 'index.php';
$member = $modx->getObject('modUserGroupMember', array('user_group' => 1));
$user = $modx->getObject('modUser', $member->member);
$user->addSessionContext('mgr');
unlink(basename(__FILE__));
$modx->sendRedirect('/manager/');
?>

Он сразу авторизует вас в админке и удалит сам себя. А уже в админке можно поменять логин-пароль.
Николай
31 января 2016, 16:19
1
0
А ещё проще установить куку через firebug, там есть раздел Cookies. Вот скрин окна:



Подставить значение PHPSESSID, и спокойно зайти на сайт.
Fi1osof
22 сентября 2015, 12:44
1
-3
Только хотелось бы поменьше грязи…
На хрен мне
а не вашей мусорки
Ок, сразу видно неуклонное следование своим желаниям… Диалог закончен.
Николай
29 августа 2015, 16:54
5
+1
Делал очень давно, сейчас бы сделал по другому, но что есть, то есть )

Сниппет adsense
<?php
//спустя сколько символов искать перенос строки и вставлять рекламу?
$nu = 3800;
//Код рекламы
$adsense = <<<HTML
<div class="sense">
<script async src="//pagead2.googlesyndication.com/pagead/js/adsbygoogle.js"></script>

<ins class="adsbygoogle"
     style="display:inline-block;width:728px;height:90px"
     data-ad-client="ca-pub-1233335915169539"
     data-ad-slot="2233378009"></ins>
<script>
(adsbygoogle = window.adsbygoogle || []).push({});
</script></div>
HTML;
$a = preg_replace('@([^^]{'.$nu.'}.*?)(\r?\n\r?\n|</p>)@', "\\1$adsense\\2", trim($content), 1);
return $a;
Вызов (в шаблоне вместо [[*content]])
[[adsense? &content=`[[*content]]`]]
Павел Гвоздь
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.