zooks · 02 сентября 2016, 11:03 Вот микроразметка под устаревшую data-vocabulary.org, которую использует Яндекс. [[pdoCrumbs? &showHome=`1` &showAtHome=`0` &tpl=`@INLINE <li class="B_crumb" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><a class="B_crumb" itemprop="url" href="[[+link]]"><span itemprop="title">[[+menutitle]]</span></a></li>` &tplCurrent=`@INLINE <li class="B_crumb active" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><span class="B_currentCrumb" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">[[+menutitle]]</span></li>` &tplMax=`@INLINE <li class="B_hideCrumb" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb">[[+menutitle]]</li>` &tplHome=`@INLINE <li class="B_firstCrumb" itemscope="itemscope" itemtype="http://data-vocabulary.org/Breadcrumb"><a class="B_homeCrumb" itemprop="url" rel="Home" href="[[++site_url]]"><span itemprop="title">[[++site_name]]</span></a></li>` &tplWrapper=`@INLINE <ol class="B_crumbBox">[[+output]]</ol>` ]] Готовые решения / pdoCrumbs Разметка с помощью microdata 16 +1 1
Василий Столейков · 30 августа 2016, 16:03 А в чём собственно вопрос-то? Как сохранить данные из чекбокса в тв-шку jenrebook? Создаёшь плагин на событие OnDocFormSave и радуешься жизни: <?php if($resource->class_key == 'Ticket' && $modx->event->name == 'OnDocFormSave' && $modx->context->key != 'mgr'){ if(!empty($_POST['jenrebook'])) { $jenrebook = implode('||',$_POST['jenrebook']); if (!$resource->setTVValue('jenrebook', $_POST['procent'])) { $modx->log(xPDO::LOG_LEVEL_ERROR, 'jenrebook - ERROR'); } } else { if (!$resource->setTVValue('jenrebook', '') ) { $modx->log(xPDO::LOG_LEVEL_ERROR, 'jenrebook - ERROR'); } } $modx->cacheManager->refresh(); } Вопросы / Множественный выбор Checkbox'ов 4 +2 2
Павел Гвоздь · 27 августа 2016, 13:30 А там всего лишь заменить getCollection на getIterator. Вот здесь есть статья об этом. Вопросы / [РЕШЕНО] Многоуровневая сортировка pdoResources 19 +1 1
Илья Уткин · 16 августа 2016, 17:02 У меня всё нормально на нескольких сайтах. Только я в cache_prefix не использую слеш. У меня префикс, например, skaminy_ Вопросы / Использование memcached на beget + php 7 11 0 1
Сергей Шлоков · 15 августа 2016, 11:42 Это и раньше работать не могло, если только Вы ошибки без восклицательного знака вызывали.Могло и может. Всё очень просто. Парсер по умолчанию гоняет 10 циклов. Если за 9 циклов он не обработает какой-нибудь плейсхолдер, то на 10-й раз он его удалит. В данном случае, парсер в первом проходе проверяет плейсхолдер [[!+cp.error_message]]. Он пустой, поэтому остается не обработанным. Далее обрабатывается тег сниппета. Он (сниппет) выставляет этот плейсхолдер. Во втором цикле парсер проверяет оставшиеся плейсхолдеры и на этот раз распарсивает этот плейсхолдер. А когда используется фильтр notempty, то плейсхолдер обрабатывается сразу же. Т.е. парсер на первом цикле вернет или пустое значение или указанное в фильтре. На втором круге парсить уже нечего. Как-то так. Вопросы / Не работают модификаторы применяемые к Ошибкам 4 +3 1
Илья Уткин · 13 августа 2016, 17:18 <?php $contexts = $modx->getCollection('modContext',array('key:NOT IN' => array('web', 'mgr'))); foreach($contexts as $cx) { print_r($cx->toArray()); } Вопросы / Как вывести имена всех контекстов? 3 +1 1
Максим Кузнецов · 08 августа 2016, 10:34 Реализовать ajax-запрос. Примерно вот так: 1. Вешаем на событие переключения селектора скрипт, который будет выполнять ajax-запрос: <script> var canClick = true; $(document).on('change', 'select[name="selector-1"]', function(e) { if ($(this).val() != '' && canClick = true) { $.ajax({ type: "POST", url: "assets/ajax/getlist.php", data: { action: 'getList', parent: $("select[name='selector-1']").val() }, beforeSend: function(){ canClick = false; }, success: function(response) { var data = eval(response); switch (data[1]) { case 'success': //Если все ок - вставляем результат во второй селектор $("select[name='selector-2']").html("<option value='' selected disabled>Выберите значение из списка</option>" + data[0]).val(""); break; case 'error': //Если не ок - выводим ошибку (используется jGrowl) $.jGrowl(data[0], {theme: 'error', position: 'center'}); break; } canClick = true; } }); } }); </script> 2. Создаем файл (в моем примере assets/ajax/getlist.php), на который ссылается скрипт и который будет возвращать нам результат: <?php if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' || empty($_POST['action'])) { return; } define('MODX_API_MODE', true); require dirname(dirname(dirname(__FILE__))) . '/index.php'; $modx->getService('error','error.modError'); $modx->setLogLevel(modX::LOG_LEVEL_ERROR); $modx->setLogTarget('FILE'); if ($_POST['action'] == "getList" && isset($_POST['parent'])) { //Получаем значение для второго селектора $snippetParams = array(); $snippetParams['parents'] = intval($_POST['parent']); $snippetParams['tpl'] = '@INLINE <option value="[[+menutitle]]">[[+menutitle]]</option>'; //Дописать параметры для сниппета получающего результаты по вкусу $snippetResult = $modx->runSnippet('pdoResources', $snippetParams); $result = array($snippetResult, 'success'); } else { $result = array('Некорректный запрос', 'error'); } if (!empty($result)) { die(json_encode($result)); } Вопросы / Как сделать динамический зависимый список ресурсов 16 +3 3
Максим Кузнецов · 06 августа 2016, 15:29 1. Документация — плейсхолдеры, не соответствующие правилу наименования переменных в PHP {$_pls['150x150']} 2. на ваш вкус — url просто более короткий и читаемый вызов этой же самой функции Вопросы / Вопросы по fenome 1 +2 1
Володя · 05 августа 2016, 22:35 можно добавить так создать плагин на pdoToolsOnFenomInit, в нем добавить модификатор detector <?php switch ($modx->event->name) { case 'pdoToolsOnFenomInit': if (!$fenom = $modx->getOption('fenom', $scriptProperties)) { return; } if (!$MobileDetect = $modx->getService('mobiledetect', 'MobileDetect', MODX_CORE_PATH . 'components/mobiledetect/')) { return; } $key = $MobileDetect->config['force_browser_variable']; $device = !empty($_GET) && array_key_exists($key, $_GET) ? $modx->stripTags($_GET[$key]) : ''; if (empty($device)) { $device = $MobileDetect->getSettings(); } if (empty($device)) { $detector = $MobileDetect->getDetector(); $device = ($detector->isMobile() ? ($detector->isTablet() ? 'tablet' : 'mobile') : 'standard'); $MobileDetect->saveSettings($device); } $fenom->addModifier("detector", function ($value) use ($device) { return $value == $device; }); break; } и теперь в любом месте можно делать так {if 'mobile'|detector} mobile {/if} {if 'tablet'|detector} tablet {/if} {if 'standard'|detector} standard {/if} Вопросы / Fenom + MobileDetect + NGINX + PHP5-FPM = 502 bad gateway 9 +5 21
Илья Уткин · 05 августа 2016, 11:17 Простым языком: если при удалении главного объекта, второстепенные (связанные с ним) объекты тоже должны удалиться, то нужна связь Composite, если нет — Aggregate Вопросы / Разница между composite и aggregate 2 +2 1
Плагин 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, сервис-ориентированная архит...
mxBoard: канбан-доска для команд, людей и ИИ-агентов в MODX 3 Для начала перейдем на Markdown, а дальше будет видно
MaxNotify3 Вышло обновление 1.3.0-pl (20.07.2026) — добавлены уведомления о заявках FormIt через hook-сниппет maxNotify3FormIt; — добавлены уведомления о заявках SendIt через hook-с...
Как сохранить данные из чекбокса в тв-шку jenrebook?
Создаёшь плагин на событие OnDocFormSave и радуешься жизни:
В данном случае, парсер в первом проходе проверяет плейсхолдер [[!+cp.error_message]]. Он пустой, поэтому остается не обработанным. Далее обрабатывается тег сниппета. Он (сниппет) выставляет этот плейсхолдер. Во втором цикле парсер проверяет оставшиеся плейсхолдеры и на этот раз распарсивает этот плейсхолдер.
А когда используется фильтр notempty, то плейсхолдер обрабатывается сразу же. Т.е. парсер на первом цикле вернет или пустое значение или указанное в фильтре. На втором круге парсить уже нечего.
Как-то так.
1. Вешаем на событие переключения селектора скрипт, который будет выполнять ajax-запрос:
2. Создаем файл (в моем примере assets/ajax/getlist.php), на который ссылается скрипт и который будет возвращать нам результат:
2. на ваш вкус — url просто более короткий и читаемый вызов этой же самой функции
создать плагин на pdoToolsOnFenomInit, в нем добавить модификатор detector
и теперь в любом месте можно делать так