Владимир

Владимир

С нами с 28 декабря 2012; Место в рейтинге пользователей: #90
Мордынский Николай
20 марта 2015, 17:32
6
+1
Вот нашел решение

// Try to find by email
$modx->event->_output = $modx->getObjectGraph('modUser', '{"Profile":{},"UserSettings":{}}', array ('Profile.email' => $scriptProperties['username']));
Сюда можно дописывать еще критерии поиска, можно хоть по дополнительным полям логиниться

Плагин вешается на событие onUserNotFound
Василий Наумкин
18 марта 2015, 15:18
1
+1
Тот класс, который я приводил выше — отлично различает планшеты и телефоны. Причем, умеет определять и производителя, и версию, и еще много чего.

Можно демо погонять demo.mobiledetect.net/
Rootiys
16 марта 2015, 13:12
1
+1
На сколько знаю, если просто из репы поставить — то подглючивает.
Я ставил из репы, потом сверху залил эти файлы.

В итоге все работает отлично:
Володя
16 марта 2015, 09:56
1
+2
есть два обработчика:
ресурс — задействует метод sendForward
сниппет — обработает указанный сниппет и отдаст через exit

в первом случае это ресурс (указываете в настройках обработчика), в котором вы вызываете какой либо сниппет, и в зависимости от полученных параметров у вас выводит информацию.

во втором случае даже нет ресурса, просто отдача результата сниппета на страницу.
Василий Наумкин
11 февраля 2015, 09:41
2
+1
Если файлы уже на сервере, то можно использовать процессор загрузки через консольный скрипт:
<?php

define('MODX_API_MODE', true);
require 'index.php'; // Скрипт лежит в корне сайта

$file = MODX_BASE_PATH . 'test.jpg'; // Твоя картинка в корне сайта

$modx->getService('error','error.modError');
$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
$modx->setLogTarget(XPDO_CLI_MODE ? 'ECHO' : 'HTML');
$modx->ms2Gallery = $modx->getService('ms2gallery', 'ms2Gallery', MODX_CORE_PATH . 'components/ms2gallery/model/ms2gallery/');

// Вызов процессора загрузки
$response = $modx->runProcessor('gallery/upload', array(
		'file' => $file, // Картинка
		'id' => 1 // id ресурса с галереей
	),
	array('processors_path' => MODX_CORE_PATH.'components/ms2gallery/processors/mgr/')
);

// Вывод результата работы процессора
if ($response->isError()) {
	print_r($response->getAllErrors());
}
else {
	print_r($response->response);
}
Думаю, будет совсем нетрудно доработать для твоей задачи.

Перед покупкой дополнения можно тестировать на modhost.pro
Василий Наумкин
06 февраля 2015, 19:22
1
+1
Не нужно делать имитацию клика. Каждый клик — это событие изменения формы, и, соотвественно, загрузка результатов с сервера. Пока кликов было мало, ты этого не замечал, а теперь ситуация изменилась.

Нужно пройти по чекбоксам и проставить (или снять) им атрибут checked, а потом отправить форму вручную.

Например, зайди сюда и набери в консоли браузера:
$('#mse2_msoption\\|tags input').each(function() {$(this).attr('checked', true)});
$('#mse2_filters').submit();
Василий Наумкин
05 февраля 2015, 22:08
1
0
Цикл не нужен:
$q = $modx->newQuery('msProductData', array('article' => $article ));
// Если это обновление ресурса - исключаем его из условия
if ($mode == 'upd') {
	$q->where(array('id:!=' => $resource->get('id')));
}
if ($modx->getCount('msProductData', q)) {
	// ... Возврат ошибки
}
Максим Кузнецов
31 января 2015, 21:35
5
+3
Помогу с решением.

Вызываем сниппет Login:
[[!Login? &loginTpl=`fastLoginTpl` &errTpl=`fastLoginError`]]

Чанк формы для авторизации fastLoginTpl:
<div style="display: none;" id="authErrors">[[+errors]]</div>
<form class="loginForm" id="iWannaLogin" action="[[~[[*id]]]]" method="post">
	<div class="login">
		<input id="loginForm" name="username" class="roundInput" type="text" placeholder="Логин" title="Ваш логин">
	</div>
	<div class="password">
		<input id="passwordForm" name="password" class="roundInput" type="password" placeholder="Пароль" title="Ваш пароль">
	</div>
	
	<input class="returnUrl" type="hidden" name="returnUrl" value="[[+request_uri]]" />
	<input class="loginLoginValue" type="hidden" name="service" value="login" />
	
	<div class="submit">
		<a rel="nofollow" href="[[~17]]">Я - тупой, забыл пароль..</a>
		<input id="ajaxLoginButton" type="submit" name="Login" value="Войти" />
	</div>
</form>

Чанк для вывода ошибки fastLoginError:
[[+msg]]

Скрипт js, обрабатывающий событие отправки формы (нужен подключенный jquery):
<script type="text/javascript">
	$(document).ready(function(){
		$("#iWannaLogin").bind("submit", function() {

			$("#authErrors").text("");
		
			//здесь можно допилить подсветку полей с ошибкой
			if ($("#loginForm").val().length < 1 && $("#passwordForm").val().length < 1) {
				$.jGrowl("Введите логин и пароль", {group: "m-Error"});
				return false;
			}
			if ($("#loginForm").val().length < 1) {
				$.jGrowl("Введите логин", {group: "m-Error"});
				return false;
			}
			if ($("#passwordForm").val().length < 1) {
				$.jGrowl("Введите пароль", {group: "m-Error"});
				return false;
			}

			$.ajax({
				type: "POST",
				cache: false,
					url: "[[~[[*id]]]]",
				data: $(this).serializeArray(),
				beforeSend: function(){
					$("#ajaxAuth .closeBlock").css("display", "none");
					$("#ajaxAuth .ajaxLoad").css("display", "block");
					
					$("#ajaxLoginButton").prop("disabled", true);
				},

				success: function(data) {
					$("#ajaxAuth .closeBlock").css("display", "block");
					$("#ajaxAuth .ajaxLoad").css("display", "none");
			
					var errMessage = $(data).find("#authErrors").text();
				
					if(errMessage == ""){
						window.location = "адрес для переадресации при успешной авторизации";
					}
					else{
						$("#authErrors").text(errMessage);
						$.jGrowl($("#authErrors").text(), {group: "m-Error"});
					}
				},
				
				complete: function(){
					$("#ajaxLoginButton").prop("disabled", false);
				}
			});
			return false;
	
		});
	});
</script>

— я еще подключил плагин jgrowl для отправления алертов. В его же вызове group: «m-Error» — класс для всплывающего бокса (красный, с ошибкой).
Если jgrowl не нужен — то вместо него вставляем в поле для ошибок желаемый ответ. Пример:
$("#authErrors").text("текст ошибки").css("display", "block");

#ajaxAuth .ajaxLoad — в моем примере форма с индикатором загрузки, которая появляется при обработке аякс-запроса.
Илья Уткин
28 января 2015, 13:53
1
0
Для истории, вот код плагина:
<?php
if ($modx->event->name != "OnHandleRequest"
    || $modx->context->key == 'mgr') {
       return;
    }

if ($_SERVER['REQUEST_URI'] != '/') {
    $uri = substr($_SERVER['REQUEST_URI'],1);
    if (substr($uri,-5) != '.html' && substr($uri,-1) != '/') {
      $uri .= '/';
    }
    $resource = $modx->getObject('modResource', array('uri' => $uri));
    $ctx = $resource->get('context_key');
} else {
    $ctx = 'web';
}

if ($ctx != $modx->context->key){
      $modx->switchContext($ctx);
}
Fi1osof
22 января 2015, 15:42
5
+3
Ставите Console.
Выполняете код:
ini_set('max_execution_time', 0);
ignore_user_abort(true);
$c = 'modResource';
$q = $modx->newQuery($c);
$q->sortby('id');
$q->select(array(
	"{$c}.*",
));
$s = $q->prepare();
$s->execute();
while($row = $s->fetch(2))
	$response = $modx->runProcessor('resource/update', $row);
	if($response->isError()){
		print_r($response->getResponse());
		return;
	}
	$modx->error->reset();
}
Так как у вас документов много, советую сначала прогнать только корневые документы (добавить в запрос $q->where(array('parent' => 0));), а потом по каждому разделу в отдельности, указывая соответствующий parent.