Владимир

Владимир

Был в сети 30 апреля 2025, 08:19
Заказы не принимаю
Володя
Володя
вызов на странице категории 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]]
это можно будет просто при нажатии кнопки в модальном окне вывести работающую корзину?!
да, как в примере
Василий Наумкин
Василий Наумкин
Если покопаться в 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 и прочими свойствами. При желании, можно вообще весь сайт без ресурсов сделать =)
Роман
Роман
Илья Уткин
Илья Уткин
Да, перед проверкой псевдонима никакое событие не вызывается. Здесь используется дополнение 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;
}

Но это, конечно, очень грязный хак — ведь где-то автоматически сгенерированный псевдоним будет реально нужен. Нужно ограничивать работу плагина, например, родителем ресурса или его шаблоном.
Василий Наумкин
Василий Наумкин
{var $ids = $_modx->getParentIds($_modx->resource.id)}
{if '11' in list $ids}
  Фильтры для пылесосов
{else}
  Фильтры для вытяжек	
{/if}
Код не проверял, но логика примерно такая: получить массив с родителями текущего ресурса и проверить, если ли среди них нужный.