Владимир

Владимир

С нами с 28 декабря 2012; Место в рейтинге пользователей: #83
Володя
13 октября 2017, 14:52
1
+1
вызов на странице категории 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]]
это можно будет просто при нажатии кнопки в модальном окне вывести работающую корзину?!
да, как в примере
Василий Наумкин
10 октября 2017, 12:39
6
+5
Если покопаться в 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 и прочими свойствами. При желании, можно вообще весь сайт без ресурсов сделать =)
Роман
04 октября 2017, 12:00
2
+1
Плагин на событие 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

Всем спасибо, работает!
Илья Уткин
03 октября 2017, 14:24
1
+2
<?php
$id = 15;
$resource = $modx->getObject('modResource', $id);
$thisContent = $resource->content;
preg_match('/<img(.*)src(.*)=(.*)"(.*)"/U', $thisContent, $regexResult);
$firstImgScr = array_pop($regexResult);
return $firstImgScr;
Илья Уткин
01 октября 2017, 14:41
2
+4
АААААА… не надо 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);
Илья Уткин
14 сентября 2017, 10:36
3
+3
Да, перед проверкой псевдонима никакое событие не вызывается. Здесь используется дополнение 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;
}

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

location /images/ {
	valid_referers none blocked www.host.com host.com;
	if ($invalid_referer) {
		return 403;
	}
}
Павел Гвоздь
24 августа 2017, 19:11
4
0
Так а чего там решать, все просто до ужаса:
if ($modx->event->name == 'OnDocFormSave' && $mode == 'new' && is_object($resource) && $resource->get('class_key') == 'msProduct') {
    $resource->set('alias', ($resource->get('alias') . '-' . $id));
    $resource->save();
}
Павел Степанов
22 августа 2017, 21:14
1
+1
Повесил на событие OnHandleRequest
<?php
if (strpos($_SERVER['REQUEST_URI'],'index.php') !== false && $modx->context->get('key') != 'mgr') {
    $modx->sendErrorPage();
}
Работает отлично
Попробую через .htaccess