Мордынский Николай · 20 марта 2015, 17:32 Вот нашел решение // Try to find by email $modx->event->_output = $modx->getObjectGraph('modUser', '{"Profile":{},"UserSettings":{}}', array ('Profile.email' => $scriptProperties['username']));Сюда можно дописывать еще критерии поиска, можно хоть по дополнительным полям логиниться Плагин вешается на событие onUserNotFound Вопросы / Авторизация по email и номеру телефона 6 +1 6
Василий Наумкин · 18 марта 2015, 15:18 Тот класс, который я приводил выше — отлично различает планшеты и телефоны. Причем, умеет определять и производителя, и версию, и еще много чего. Можно демо погонять demo.mobiledetect.net/ Объявления о работе / Доработка Mobile Detection 12 +1 1
Rootiys · 16 марта 2015, 13:12 На сколько знаю, если просто из репы поставить — то подглючивает. Я ставил из репы, потом сверху залил эти файлы. В итоге все работает отлично: Вопросы / Как вывести превьюшку в Админке 10 +1 1
Володя · 16 марта 2015, 09:56 есть два обработчика: — ресурс — задействует метод sendForward — сниппет — обработает указанный сниппет и отдаст через exit в первом случае это ресурс (указываете в настройках обработчика), в котором вы вызываете какой либо сниппет, и в зависимости от полученных параметров у вас выводит информацию. во втором случае даже нет ресурса, просто отдача результата сниппета на страницу. Новые дополнения и их версии / [VirtualPage] - Виртуальные страницы. 183 +2 1
Василий Наумкин · 11 февраля 2015, 09:41 Если файлы уже на сервере, то можно использовать процессор загрузки через консольный скрипт: <?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 Вопросы / массовый импорт фото в ms2Gallery 7 +1 2
Василий Наумкин · 06 февраля 2015, 19:22 Не нужно делать имитацию клика. Каждый клик — это событие изменения формы, и, соотвественно, загрузка результатов с сервера. Пока кликов было мало, ты этого не замечал, а теперь ситуация изменилась. Нужно пройти по чекбоксам и проставить (или снять) им атрибут checked, а потом отправить форму вручную. Например, зайди сюда и набери в консоли браузера: $('#mse2_msoption\\|tags input').each(function() {$(this).attr('checked', true)}); $('#mse2_filters').submit(); Вопросы / Как выбрать группу фильтров в mSearch2 ? 2 +1 1
Василий Наумкин · 05 февраля 2015, 22:08 Цикл не нужен: $q = $modx->newQuery('msProductData', array('article' => $article )); // Если это обновление ресурса - исключаем его из условия if ($mode == 'upd') { $q->where(array('id:!=' => $resource->get('id'))); } if ($modx->getCount('msProductData', q)) { // ... Возврат ошибки } Вопросы / РЕШЕНО! Уникальность поля артикул 10 0 1
Максим Кузнецов · 31 января 2015, 21:35 Помогу с решением. Вызываем сниппет 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 — в моем примере форма с индикатором загрузки, которая появляется при обработке аякс-запроса. Вопросы / AjaxForm и Login 13 +3 5
Илья Уткин · 28 января 2015, 13:53 Для истории, вот код плагина: <?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); } Вопросы / Контексты для разделения страниц 27 0 1
Fi1osof · 22 января 2015, 15:42 Ставите 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. Вопросы / как пересохранить 2000 ресурсов ? 16 +3 5
[videoGallery] Видео галерея YouTube, Vimeo Невозможно установить пакет с подписью: videogallery-1.4.0-beta Ошибка установки Error в /core/packages/videogallery-1.4.0-beta/modCategory/7fc931a7772edc9752c16e9c41eb5e52.reso...
mxBoard: канбан-доска для команд, людей и ИИ-агентов в MODX 3 Привет, добавил пользователя в группу mxBoard(4), создал токен. Добавляю все в postman пишет: rest: { «success»: false, «message»: «Недействительный токен.», «data...
Релиз miniShop2 ver. 4.4.1 & 4.4.2 Подскажите пожалуйста, может я что-то не знаю или упустил. Но есть ли решение по глюку с radio? Указываешь свое radio c одинаковым name и в результате при переключении получаешь вс...
Плагин EnvBadge: визуальный индикатор окружения в админке MODX3 Расскажите пожалуйста как вы настраиваете сайт на MODX 3 чтобы был dev, prod, stage. Можете описать workflow? Допустим у меня 80% — это магазины, там клиенты, продажи, все онлай...
MaxNotify Обновление компонента 1.3.0-pl (22.07.2026) — добавлено автоматическое получение полей через msOrder->toArray(); — массивы и объекты безопасно пропускаются; — стандартные...
MyFavorites MyFavorites — 3.0.0-beta Первая версия для MODX Revolution 3.x — компонент полностью переписан с нуля (PHP >= 8.4, namespaced-ядро MODX 3, PSR-4, сервис-ориентированная архит...
Сюда можно дописывать еще критерии поиска, можно хоть по дополнительным полям логиниться
Плагин вешается на событие onUserNotFound
Можно демо погонять demo.mobiledetect.net/
Я ставил из репы, потом сверху залил эти файлы.
В итоге все работает отлично:
— ресурс — задействует метод sendForward
— сниппет — обработает указанный сниппет и отдаст через exit
в первом случае это ресурс (указываете в настройках обработчика), в котором вы вызываете какой либо сниппет, и в зависимости от полученных параметров у вас выводит информацию.
во втором случае даже нет ресурса, просто отдача результата сниппета на страницу.
Думаю, будет совсем нетрудно доработать для твоей задачи.
Перед покупкой дополнения можно тестировать на modhost.pro
Нужно пройти по чекбоксам и проставить (или снять) им атрибут checked, а потом отправить форму вручную.
Например, зайди сюда и набери в консоли браузера:
Вызываем сниппет Login:
Чанк формы для авторизации fastLoginTpl:
Чанк для вывода ошибки fastLoginError:
Скрипт js, обрабатывающий событие отправки формы (нужен подключенный jquery):
— я еще подключил плагин jgrowl для отправления алертов. В его же вызове group: «m-Error» — класс для всплывающего бокса (красный, с ошибкой).
Если jgrowl не нужен — то вместо него вставляем в поле для ошибок желаемый ответ. Пример:
#ajaxAuth .ajaxLoad — в моем примере форма с индикатором загрузки, которая появляется при обработке аякс-запроса.
Fi1osof·Выполняете код:
Так как у вас документов много, советую сначала прогнать только корневые документы (добавить в запрос $q->where(array('parent' => 0));), а потом по каждому разделу в отдельности, указывая соответствующий parent.