Володя · 13 октября 2017, 14:52 вызов на странице категории quickview.vgrish.ru/test-product.html [[!QuickView.initialize? &services=`miniShop2` &bootstrapModalJsCss=`0` &bootstrapDialogJsCss=`1` ]] <div class="quickview-parent" data-quickview-mode="modal" data-data-action="chunk" data-data-element="product.quickview.cart" data-quickview-loop="true" data-quickview-sethash="true" data-hash-cart="true" data-dialog-size="size-wide" data-dialog-buttons='["prev","next"]'> [[!pdoPage? &parents=`0` &element=`msProducts` &tpl=`@INLINE <a class='quickview' data-click data-data-id="[[+id]]" data-dialog-title="[[+pagetitle]]">[[+pagetitle]]</a> ` ]] [[!+page.nav]] </div>чанк модалки товара product.quickview.cart <h1>[[*pagetitle]]</h1> <div id="msProduct" class="row"> <div class="col-md-6"> [[!msGallery]] </div> <div class="col-md-6"> <form class="form-horizontal ms2_form msoptionsprice-product" method="post"> <input type="hidden" name="id" value="[[*id]]"/> <input type="hidden" name="mssetincart_set" value="[[*id]]"/> <div class="form-group"> <label class="col-md-2 control-label">[[%ms2_product_article]]:</label> <div class="col-md-10 form-control-static"> <span class='msoptionsprice-article msoptionsprice-[[*id]]'>[[+article:default=`-`]]</span> </div> </div> <div class="form-group"> <label class="col-md-2 control-label">[[%ms2_product_price]]:</label> <div class="col-md-10 form-control-static"> <span class='msoptionsprice-cost msoptionsprice-[[*id]]'>[[+price]]</span> [[%ms2_frontend_currency]] [[+old_price:gt=`0`:then=` <span class="old_price"><span class='msoptionsprice-old-cost msoptionsprice-[[*id]]'>[[+old_price]]</span> [[%ms2_frontend_currency]]</span> `:else=``]] </div> </div> <div class="form-group form-inline"> <label class="col-md-2 control-label" for="product_price">[[%ms2_cart_count]]:</label> <div class="col-md-10"> <input type="number" name="count" id="product_price" class="input-sm form-control" value="1"/> [[%ms2_frontend_count_unit]] </div> </div> <div class="form-group"> <label class="col-md-2 control-label">[[%ms2_product_weight]]:</label> <div class="col-md-10 form-control-static"> <span class='msoptionsprice-mass msoptionsprice-[[*id]]'>[[+weight]]</span> [[%ms2_frontend_weight_unit]] </div> </div> <div class="form-group"> <label class="col-md-2 control-label">Набор:</label> <div class="col-md-10 form-control-static"> <span class='mssetincart-cost mssetincart-[[*id]]'>[[+price]]</span> [[%ms2_frontend_currency]] <span class='mssetincart-mass mssetincart-[[*id]]'>[[+weight]]</span> [[%ms2_frontend_weight_unit]] </div> </div> [[!msOptions? &options=`color,size` ]] <div class="form-group"> <div class="col-md-offset-2 col-md-10"> <button type="submit" class="btn btn-default" name="ms2_action" value="cart/add" data-quickview-mode="modal" data-data-action="chunk" data-data-element="!cart.quickview" data-dialog-size="size-wide" data-dialog-title="cart" onclick="setTimeout((function () { return $(this).quickview(); }.bind(this)), $.fn.quickview.defaults.timeout) " > <i class="glyphicon glyphicon-barcode"></i> [[%ms2_frontend_add_to_cart]] </button> </div> </div> </form> </div> </div>чанк модалки корзины cart.quickview [[!msCart]] [[!msOrder]]это можно будет просто при нажатии кнопки в модальном окне вывести работающую корзину?!да, как в примере Вопросы / Оплата без корзины (на странице товара) 9 +1 1
Василий Наумкин · 10 октября 2017, 12:39 Если покопаться в MODX API то можно научиться выводить любой ресурс в плагине на нужном событии: $modx->resource = $modx->getObject('modResource', $modx->getOption('site_start')); $modx->resource->set('content', $pdoTools->runSnippet('@FILE snippets/get_panel.php')); $modx->request->prepareResponse();Здесь, как видно, еще и замена контента на свой идёт, на лету. Можно так на лету и виртуальные ресурсы делать, со своими pagetitle и прочими свойствами. При желании, можно вообще весь сайт без ресурсов сделать =) Готовые решения / Одностраничники на базе MODx без контекстов 16 +5 6
Роман · 04 октября 2017, 12:00 Плагин на событие OnLoadWebDocument: <?php $id = $modx->resource->get('id'); // Get current page id $resource = $modx->getObject('modResource',$id); // Get current object $template = $modx->resource->template; // Get current page template if($template == 5 && isset($_GET['amp'])) { $modx->resource->set('template', 23); } $modx->resource->cacheable = false; // Disable cacheВ шаблонах // что бы показать, что у тебя есть amp страница <link rel="amphtml" href="http://site.ru/page?amp" /> // на amp странице показать главную, что бы не было дублей <link rel="canonical" href="http://site.ru/page" />Проверка тут: search.google.com/test/amp Всем спасибо, работает! Вопросы / Amp для modx 18 +1 2
Илья Уткин · 03 октября 2017, 14:24 <?php $id = 15; $resource = $modx->getObject('modResource', $id); $thisContent = $resource->content; preg_match('/<img(.*)src(.*)=(.*)"(.*)"/U', $thisContent, $regexResult); $firstImgScr = array_pop($regexResult); return $firstImgScr; Вопросы / Как парсить страницы своего же сайта? 5 +2 1
Илья Уткин · 01 октября 2017, 14:41 АААААА… не надо return менять на echo… // ... $output = array(); foreach ($rows as $key => $row) { // ... $pdo = $modx->getService('pdoTools'); if (empty($chunk)) { $output[] = '<pre>' . $pdo->getChunk('', $row) . '</pre>'; } else { $output[] = $pdo->getChunk($chunk, $row, false); } } return implode(PHP_EOL, $output); Вопросы / Fenom вместо getImageList MIGx 48 +4 2
Илья Уткин · 14 сентября 2017, 10:36 Да, перед проверкой псевдонима никакое событие не вызывается. Здесь используется дополнение Tickets — тикеты это расширенные ресурсы с дополнительным функционалом, в том числе, со своим механизмом генерации URL. Можно как костыль использовать такое решение: 1. Включаем автоматическую генерацию псевдонима 2. В плагине проверяем — если псевдоним ресурса такой же, как его сгенерировал бы MODX, заменяем псевдоним: <?php switch ($modx->event->name) { case 'OnDocFormSave': $generated = $resource->cleanAlias($resource->pagetitle); if ($resource->alias == $generated) { $resource->set('alias', $resource->id); } $resource->save(); break; default: break; } Но это, конечно, очень грязный хак — ведь где-то автоматически сгенерированный псевдоним будет реально нужен. Нужно ограничивать работу плагина, например, родителем ресурса или его шаблоном. Вопросы / Id вместо alias в URL 10 +3 3
Василий Наумкин · 12 сентября 2017, 11:40 {var $ids = $_modx->getParentIds($_modx->resource.id)} {if '11' in list $ids} Фильтры для пылесосов {else} Фильтры для вытяжек {/if}Код не проверял, но логика примерно такая: получить массив с родителями текущего ресурса и проверить, если ли среди них нужный. Вопросы / Как разделить ветки ресурсов в феноме? 4 +4 2
Stan Ezersky · 10 сентября 2017, 13:56 Хотлинк-защита location /images/ { valid_referers none blocked www.host.com host.com; if ($invalid_referer) { return 403; } } Вопросы / Как защитить фото в ms2gallery 19 +2 2
Павел Гвоздь · 24 августа 2017, 19:11 Так а чего там решать, все просто до ужаса: if ($modx->event->name == 'OnDocFormSave' && $mode == 'new' && is_object($resource) && $resource->get('class_key') == 'msProduct') { $resource->set('alias', ($resource->get('alias') . '-' . $id)); $resource->save(); } Вопросы / Доработанный алиас для товаров minishop 3 0 4
Павел Степанов · 22 августа 2017, 21:14 Повесил на событие OnHandleRequest <?php if (strpos($_SERVER['REQUEST_URI'],'index.php') !== false && $modx->context->get('key') != 'mgr') { $modx->sendErrorPage(); }Работает отлично Попробую через .htaccess Вопросы / Страницы вида: сайт/index.php/страница код 200OK 6 +1 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-с...
чанк модалки товара product.quickview.cart
чанк модалки корзины cart.quickview
да, как в примере
Здесь, как видно, еще и замена контента на свой идёт, на лету.
Можно так на лету и виртуальные ресурсы делать, со своими pagetitle и прочими свойствами. При желании, можно вообще весь сайт без ресурсов сделать =)
В шаблонах
Проверка тут: search.google.com/test/amp
Всем спасибо, работает!
Можно как костыль использовать такое решение:
1. Включаем автоматическую генерацию псевдонима
2. В плагине проверяем — если псевдоним ресурса такой же, как его сгенерировал бы MODX, заменяем псевдоним:
Но это, конечно, очень грязный хак — ведь где-то автоматически сгенерированный псевдоним будет реально нужен. Нужно ограничивать работу плагина, например, родителем ресурса или его шаблоном.
Работает отлично
Попробую через .htaccess