Fi1osof · 01 декабря 2016, 16:53 Лучше все-таки удалять средствами самого MODX, так как как правило нужные зависимости прописаны и связанные объекты удаляются автоматом. В phpMyAdmin вы можете просто пропустить связанные объекты. Ваша проблема сейчас связана с тем, что MODX просто не может получить весь объем документов из-за нехватки времени и/или памяти. Сделайте так: в консоли пропишите такой код: ini_set("max_execution_time", 0); ignore_user_abort(true); $q = $modx->newQuery("modResource", array( "deleted" => 1, )); print "<br />Документов на удаление: " . $modx->getCount("modResource", $q); $q->limit(10); foreach($modx->getIterator("modResource", $q) as $doc){ $doc->remove(); } print "<br />Удалено";Выполняйте, пока не будут удалены все документы. Лимит сами скорректируйте исходя из того, как быстро будет выполняться скрипт. Не забывайте предварительно сделать бэкап базы данных. Вопросы / Как удалить все товары и опции 6 +1 1
gg- · 29 ноября 2016, 17:24 В общем решение оказывается на поверхности. Переменная передается в расширенный шаблон, но закинуть ее в условие не получается. В итоге блок с переменными ставим в каждый шаблон. Меняем его по желанию. И условия начинают работать. {extends 'template:Base'} {block 'vars'} {var $city = '[[#COOKIE.city]]'} {/block} Вопросы / В расширенных шаблонах не работают условия fenom 5 +1 1
Володя · 29 ноября 2016, 14:03 вы выводите ресурс, значит и нужно проверять есть ли такой в наличии. if (!$modx->getCount('modResource', array('alias'=>$alias))) { $modx->sendErrorPage(); } Новые дополнения и их версии / [VirtualPage] - Виртуальные страницы. 183 0 1
Марат Марабар · 27 ноября 2016, 17:37 Полученный чанк при ajax-запросе нужно распарсить, допустим в своём классе это можно сделать так: private function getParserTag($content) { $maxIterations = (integer) $this->modx->getOption('parser_max_iterations', null, 10); $this->modx->getParser()->processElementTags('', $content, false, false, '[[', ']]', array(), $maxIterations); $this->modx->getParser()->processElementTags('', $content, true, true, '[[', ']]', array(), $maxIterations); return $content; } Вопросы / Аякс получение данных. 6 +1 2
Дмитрий · 27 ноября 2016, 17:36 Пример ajax.php, который использую в последних проектах. Работает исправно, все парсится и работает. <?php define('MODX_API_MODE', true); require 'index.php'; //подключаем pdoTools $pdo = $modx->getService('pdoTools'); // Откликаться будет ТОЛЬКО на ajax запросы if (empty($_SERVER['HTTP_X_REQUESTED_WITH']) || $_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest') { return; } // Сниппет будет обрабатывать не один вид запросов, поэтому работать будем по запрашиваемому действию // Если в массиве POST нет действия - выход if (!empty($_POST['action'])) { switch ($_POST['action']) { case 'snippetName': $tvs = $_POST['tvs']; if (!empty($tvs)) { $res = $pdo->runSnippet('@FILE snippets/snippetName.php', array('tvs' => $tvs)); } if (empty($res)) { $res = 'Подходящих записей не найдено. Попробуйте упростить параметры поиска'; } break; } } else { return; } if (!empty($res)) { die($res); } Вопросы / Аякс получение данных. 6 0 3
Воеводский Михаил · 26 ноября 2016, 09:15 2) Это ошибка MS2 при сохранении свойств доставки. Когда-то столкнулся, но PR не подготовил, причин уже не помню. Надеюсь, Василий добавит исправление в MS2. В файлах /core/components/minishop2/processors/mgr/settings/delivery/create.class.php и /core/components/minishop2/processors/mgr/settings/delivery/update.class.php блок foreach ($prices as $field) { if ($tmp = $this->getProperty($field)) { $tmp = preg_replace(array('#[^0-9%\-,\.]#', '#,#'), array('', '.'), $tmp); if (strpos($tmp, '%') !== false) { $tmp = str_replace('%', '', $tmp) . '%'; } if (strpos($tmp, '-') !== false) { $tmp = str_replace('-', '', $tmp) * -1; } if (empty($tmp)) { $tmp = 0; } $this->setProperty($field, $tmp); } }необходимо заменить на следующий: foreach ($prices as $field) { if ($tmp = $this->getProperty($field)) { $isPercent = false; $tmp = preg_replace(array('#[^0-9%\-,\.]#', '#,#'), array('', '.'), $tmp); if (strpos($tmp, '%') !== false) { $tmp = str_replace('%', '', $tmp) . '%'; $isPercent = true; } if (strpos($tmp, '-') !== false) { $tmp = str_replace('-', '', $tmp) * -1; if ($isPercent) { $tmp .= '%'; } } if (empty($tmp)) { $tmp = 0; } $this->setProperty($field, $tmp); } }После этого минусовой процент начнет правильно сохраняться, а обработка такого значения в остальных местах происходит корректно. Вопросы / Пара вопросов по miniShop2 5 +3 4
Виталий Греков · 26 ноября 2016, 00:49 Попробуйте вот этот lmims Вопросы / Проблема с настройкой last-modified на modx Revo. 3 +1 1
Володя · 14 ноября 2016, 23:10 так я не предлагаю вам делать выборки по 5 ресурсов. Подберите то кол-во который ваш хостинг нормально обработает, например по 5000 шт. Указываете в роботс главный файл который выглядит примерно так <sitemapindex xmlns="http://www.sitemaps.org/schemas/sitemap/0.9"> <sitemap> <loc>http://site.ru/sitemap1</loc> </sitemap> <sitemap> <loc>http://site.ru/sitemap2</loc> </sitemap> <sitemap> <loc>http://site.ru/sitemap3</loc> </sitemap> </sitemapindex>в каждом из них вызов pdoSitemap. вроде ничего сложного? Вопросы / Автоматически разбивать sitemap.xml на файлы 6 +3 4
Василий Наумкин · 12 ноября 2016, 10:27 Покопался в исходниках и написал пока такой фикс xPDO::getCriteria(): public function getCriteria($className, $type = null, $cacheFlag = true) { $c = $this->newQuery($className); $c->cacheFlag = $cacheFlag; if (!empty($type)) { if ($type instanceof xPDOCriteria) { $c->wrap($type); } elseif (is_array($type)) { $tmp = array(); array_walk_recursive($type, function ($v, $k) use (&$tmp) { if (!is_numeric($k)) { $tmp[$k] = $v; } }); if (count($tmp)) { $c->where($tmp); } } elseif (is_scalar($type)) { if ($pk = $this->getPK($className)) { $c->where(array($pk => $type)); } } else { $c->where($type); } } return $c; }Это запрещает все запросы на получения объекта xPDO произвольным SQL запросом. Можно использовать либо первичные ключи, либо массивы с прописанными ключами, которые будут проверены при запросе. По моим тестам работает хорошо, желающие могут проверить на себе — это файл core/xpdo/xpdo.class.php. Предложил код автору xPDO, буду ждать ответа. Безопасность / Критическая уязвимость в MODX Revolution 340 +9 4
Андрей · 31 октября 2016, 23:58 Массив только лучше задавать так: {set $a = ["5","8","9"]} {if $_modx->resource.parent in list $a} ..... {/if} Вопросы / Fenom + pdoMenu и динамический parent 3 +2 3
UiCMPGenerator дополнение для создания пакетов Ближе к сентябрю, основная загвоздка это создание нормальной документации и видео обзора, а так пакет как бы уже готов
Личный кабинет на Sendit - не удается сбросить пароль Хм, в массиве поле extended приходит пустым, временного пароля там нет. Сам тестовый юзер изначально был зареген в группу Users с правами доступа в личный кабинет (по обычной инстр...
Checkbox для модального окна Они не отключены, они платные, чтобы писали только те, кому действительно очень надо. Когда бесплатно люди начинают думать, что я им должен.
[SendIt 2.6.0] Анализ поведения пользователя для защиты от спама (невидимая капча)... Здравствуйте. Делаю личный кабинет на Sendit и со сбросом пароля возникли проблемы. Можете подсказать, в чем ошибка? Список вопросов в одноименном разделе на modx.pro пока пуст, и,...
Minishop + честный знак (продажа маркированной продукции) В нашем случае мы решили убрать всю логику по маркировке сайта.
MiniShop3 - Не выводятся товары дополнительных категорий @SYAN ваша указанная проблема исправлена еще до версии 1.2.3 @Павлик Мышкин завел: github.com/modx-pro/MiniShop3/issues/480 github.com/modx-pro/MiniShop3/issues/481Исправим в б...
MobileDetect 2.0.0-pl функция "планшеты как стандартные браузеры не работает" в 2.1.0-pl баг исправлен
msImportExport не сохраняет родителя по умолчанию Компонент не понимает кирилические домены при загрузку фото. пример: Error download. Url : https://антаресдвери.рф/upload/iblock/a50/a50b2ef45305a3c18f6e298f1e134880.jpg. Message...
Fi1osof·Ваша проблема сейчас связана с тем, что MODX просто не может получить весь объем документов из-за нехватки времени и/или памяти.
Сделайте так: в консоли пропишите такой код:
Выполняйте, пока не будут удалены все документы. Лимит сами скорректируйте исходя из того, как быстро будет выполняться скрипт.
Не забывайте предварительно сделать бэкап базы данных.
Переменная передается в расширенный шаблон, но закинуть ее в условие не получается. В итоге блок с переменными ставим в каждый шаблон. Меняем его по желанию. И условия начинают работать.
Работает исправно, все парсится и работает.
В файлах /core/components/minishop2/processors/mgr/settings/delivery/create.class.php и /core/components/minishop2/processors/mgr/settings/delivery/update.class.php блок
необходимо заменить на следующий:
После этого минусовой процент начнет правильно сохраняться, а обработка такого значения в остальных местах происходит корректно.
в каждом из них вызов pdoSitemap.
вроде ничего сложного?
Это запрещает все запросы на получения объекта xPDO произвольным SQL запросом. Можно использовать либо первичные ключи, либо массивы с прописанными ключами, которые будут проверены при запросе.
По моим тестам работает хорошо, желающие могут проверить на себе — это файл core/xpdo/xpdo.class.php. Предложил код автору xPDO, буду ждать ответа.