Володя · 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
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...
чанк модалки товара product.quickview.cart
чанк модалки корзины cart.quickview
да, как в примере
Здесь, как видно, еще и замена контента на свой идёт, на лету.
Можно так на лету и виртуальные ресурсы делать, со своими pagetitle и прочими свойствами. При желании, можно вообще весь сайт без ресурсов сделать =)
В шаблонах
Проверка тут: search.google.com/test/amp
Всем спасибо, работает!
Можно как костыль использовать такое решение:
1. Включаем автоматическую генерацию псевдонима
2. В плагине проверяем — если псевдоним ресурса такой же, как его сгенерировал бы MODX, заменяем псевдоним:
Но это, конечно, очень грязный хак — ведь где-то автоматически сгенерированный псевдоним будет реально нужен. Нужно ограничивать работу плагина, например, родителем ресурса или его шаблоном.
Работает отлично
Попробую через .htaccess