Виталий Киреев · 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
Возможно ли реализовать возможность предоплаты за доставку на сайте? В любом случаем стандартный флоу минишоп2 рассчитан на оплату по ссылке, т.е. чтобы получить информацию об оплате, нужно чтобы заказ существовал. Чтобы сделать иначе, нужно использ...
Редизайн сообщества На больших экранах основной текст статьи я бы сделал 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:
Пример плагина: