Виталий Киреев · 03 декабря 2014, 05:34 Можно в чанк rowTpl добавить примерно следующее [[[+idx:mod=`3`:is=`1`:then=`<div class="row">`]] ... [[+idx:mod=`3`:is=`0`:then=`</div>`:else=`[[+idx:is=`[[+total]]`:then=`</div>`]]`]] Вопросы / PdoResources. Оборачивать в div каждые 3 элемента 9 0 1
Evgeny Epifanov · 22 сентября 2014, 17:28 Если кому-то интересно, решил все кардинально: if ($modx->event->name == 'OnLoadWebDocument') { $uri = $_SERVER['REQUEST_URI']; if ($modx->resource->isfolder && substr($uri, -1) != '/' && !strpos($uri, '?')) { $modx->sendRedirect($modx->makeUrl($modx->resource->id),array('responseCode' => 'HTTP/1.1 301 Moved Permanently')); } } Вопросы / Слэш в конце адреса 44 +2 2
Сергей Шлоков · 05 сентября 2014, 13:29 Если так просто, хотелось бы узнать как. Лично у меня не получилось ни на 2.2 ни на 2.3. — не хочет работать этот friendly_urls_strict. Поэтому решаю эту задачу одним из способов: 1. Выставляю канонический урл <link rel="canonical" href="[[~[[*id]]]]? &scheme=`full`]]" />2. Или добавляю в .htaccess код # Rewrite domain.com -> domain.com/ RewriteCond %{REQUEST_FILENAME} !-f RewriteCond %{REQUEST_URI} !\..{1,10}$ RewriteCond %{REQUEST_URI} !(.*)/$ RewriteRule ^(.*)$ http://site.ru/$1/ [L,R=301]Работает гарантировано. Вопросы / modx строгие URL 4 0 5
Василий Наумкин · 18 сентября 2013, 17:23 <?php $tvid = 1; // id нужного ТВ параметра $res = array(); // Сюда забиваем результаты $q = $modx->newQuery('modTemplateVarResource', array('tmplvarid' => $tvid)); $q->select('contentid,value'); if ($q->prepare() && $q->stmt->execute()) { while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) { $res[$row['contentid']] = $row['value']; } } print_r($res); Получишь массив с id ресурсов и значенями ТВ c id = 1. Вопросы / Как получить все значения TV? 2 0 9
Василий Наумкин · 01 июля 2013, 11:49 Теперь понял. Из-за разделителя "/" решил, что сниппет должен показывать уровень вложения товара в категориях. Тогда предлагаю вот такой код: <?php $currentID = $modx->resource->id; $parentID = $modx->resource->parent; $delimeter = ' , '; $scheme = $modx->getOption('link_tag_scheme'); $q = $modx->newQuery('msCategory'); $q->leftJoin('msCategoryMember', 'msCategoryMember', array( '`msCategory`.`id` = `msCategoryMember`.`category_id`' )); $q->sortby('pagetitle','ASC'); $q->select(array('id','pagetitle')); $q->where('`msCategoryMember`.`product_id` = '.$currentID.' OR `id` = '.$parentID); $result = array(); if ($q->prepare() && $q->stmt->execute()) { while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) { $url = $modx->makeUrl($row['id'], '', '', $scheme); $result[] = '<a href="'.$url.'">'.$row['pagetitle'].'</a>'; } } return implode($delimeter, $result); Выбирает все категории за один запрос и самостоятельно генерирует ссылки согласно настроек сайта. Работать будет немного быстрее. Вопросы / Вывод категорий товара тегами 20 0 1
Алексей · 12 мая 2013, 09:12 О, я такое делал, все просто. В чанке создания/редактирования тикета заменяем select на другой: <select name="parent" >[[!getSectionsList]]</select>И создаем сниппет getSectionsList с примерно такм кодом (только на 16 строке необходимо поменять условие, там задан родитель «0» и в моем случае template): <?php $tpl = '<option value="[[+id]]" [[+selected]]>[[+title]]</option>'; $current = 0; if(isset($_REQUEST['parent'])){ $current = intval($_REQUEST['parent']); } else if(isset($_REQUEST['tid'])){ $post = $modx->getObject('modResource', intval($_REQUEST['tid'])); if($post != null){ $current = $post->get('parent'); } } $q = $modx->newQuery('modResource'); $q->where(array('parent' => 0, 'template' => 16, 'published' => 1, 'deleted' => 0)); $q->sortby('menuindex', 'ASC'); $parents = $modx->getCollection('modResource', $q); $parentsIds = array(); foreach($parents as $parent){ $parentsIds[] = $parent->get('id'); } $q = $modx->newQuery('modResource'); $q->where(array('parent:IN' => $parentsIds, 'template' => 14, 'published' => 1, 'deleted' => 0)); $q->sortby('menuindex', 'ASC'); $blogs = $modx->getCollection('modResource', $q); $output = array(); foreach($parents as $parent){ $output[] = '<optgroup label="'.$parent->get('pagetitle').'">'; $pid = $parent->get('id'); foreach($blogs as $blog){ if($blog->get('parent') == $pid){ $selected = $current == $blog->get('id') ? 'selected="selected"' : ''; $option = str_replace('[[+title]]', $blog->get('pagetitle'), $tpl); $option = str_replace('[[+id]]', $blog->get('id'), $option); $option = str_replace('[[+selected]]', $selected, $option); $output[] = $option; } } $output[] = '</optgroup>'; } return implode("\n", $output); Вопросы / Модификация формы создания тикета 7 0 1
Алексей · 11 февраля 2013, 11:51 Сниплет: if ($thread = $modx->getObject('TicketThread', array('resource' => $id))) { echo $thread->get('comments'); };Вызов: [[!qtyComments? &id=`[[+id]]`]] //как раз вызов в getResources Вопросы / Tickets Пять проблем со сниппетов 28 0 1
Василий Наумкин · 18 января 2013, 07:00 Вот тебе сниппет getTodayIds, который присоединяет таблицу с ТВ и выбирает по ней подходящие id. Нужно указать id ТВ с датой <?php $tvid = 1; // id ТВ с датой $date = date('Y-m-d'); // Сегодня $q = $modx->newQuery('modResource'); $q->leftJoin('modTemplateVarResource', 'TV', 'modResource.id = TV.contentid AND TV.tmplvarid = '.$tvid); $q->select('modResource.id'); $q->where('DATE(TV.value) = "'.$date.'"'); if ($q->prepare() && $q->stmt->execute()) { $ids = $q->stmt->fetchAll(PDO::FETCH_COLUMN); return implode(',', $ids); } Вызываем в getPage: [[!getPage? &element=`getResources` &resources=`[[!getTodayIds]]` ]] Вопросы / getResources вывод документов за сегодняшнее число 16 0 1
Василий Наумкин · 05 ноября 2012, 21:52 Очень просто: Создать ТВ параметр hits Назначить его статьям При загрузке статьи плагином увеличивать ТВ параметр на 1 Пример плагина: if ($modx->event->name == 'OnLoadWebDocument') { $resource = $modx->event->params['resource']; $hits = $resource->getTVValue('hits'); $resource->setTVValue('hits', $hits + 1); } Вопросы / Вывод хитов 8 0 1
Возможно ли реализовать возможность предоплаты за доставку на сайте? Так ради этого мне и нужно это все, чтобы клиент платил сразу при оформлении заказа, чтобы избавить себя от мусорных заявок (когда человек оставляет заявку, а предоплату делать не ...
Редизайн сообщества На больших экранах основной текст статьи я бы сделал 18 px. Да и текст комментариев можно таким сделать. Для меня лично 16 — мелковато на больших экранах (в комментариях вообще 15 ...
MiniShop3 1.11.0 при клике на radio идет пересчет итоговой суммы в orderUI, в зависимости от способов(оплаты доставки) я так поняла. попробуй код запуска события поставить ниже чем orderUI, после
ImageOptimizer - WebP/AVIF и responsive <picture> для MODX 3 Дополнение доступно modstore.pro/packages/photos-and-files/imageoptimizer
Localizator3 для MODX 3: перевод полей и TV без отдельного context на язык, Vue 3 + PrimeV... Добавил localizator3_default_language
msInShopNotify Начиная с версии 3.0.0-beta добавлена поддержка MiniShop3 Минимальные требования: PHP 8.4 MODX 3.2 MiniShop3
MaxNotify Обновление 1.2.0-pl (03.07.2026) — добавлены уведомления о заявках FormIt через hook-сниппет `maxNotifyFormIt`; — добавлены уведомления о заявках SendIt через hook-...
[msBonus2] 1.3.0 Бонус-коды, уведомления о сгорании и совместимость с msMultiCurre... Да, планируется. Даже чуть больше, чем просто бонусная система)
Поэтому решаю эту задачу одним из способов:
1. Выставляю канонический урл
2. Или добавляю в .htaccess код
Работает гарантировано.
Получишь массив с id ресурсов и значенями ТВ c id = 1.
Тогда предлагаю вот такой код:
Выбирает все категории за один запрос и самостоятельно генерирует ссылки согласно настроек сайта. Работать будет немного быстрее.
В чанке создания/редактирования тикета заменяем select на другой:
И создаем сниппет getSectionsList с примерно такм кодом (только на 16 строке необходимо поменять условие, там задан родитель «0» и в моем случае template):
Вызов:
Нужно указать id ТВ с датой
Вызываем в getPage:
Пример плагина: