Василий Наумкин

Василий Наумкин

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
Евгений Борисов
05 сентября 2018, 14:12
3
0
DatabaseCustomURL http://www.rfxn.com/downloads/rfxn.ndb
DatabaseCustomURL http://www.rfxn.com/downloads/rfxn.hdb
DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/junk.ndb
DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/phish.ndb
DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/rogue.hdb
DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/foxhole_filename.cdb
DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/foxhole_generic.cdb
DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/foxhole_js.cdb
DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/badmacro.ndb
DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/scam.ndb
DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/sanesecurity.ftm
DatabaseCustomURL http://ftp.swin.edu.au/sanesecurity/sigwhitelist.ign2
DatabaseCustomURL http://cdn.malware.expert/malware.expert.ndb
DatabaseCustomURL http://cdn.malware.expert/malware.expert.hdb
DatabaseCustomURL http://clamav.bofhland.org/bofhland_cracked_URL.ndb
DatabaseCustomURL http://clamav.bofhland.org/bofhland_malware_URL.ndb
DatabaseCustomURL http://clamav.bofhland.org/bofhland_malware_attach.hdb
DatabaseCustomURL http://clamav.bofhland.org/bofhland_phishing_URL.ndb
Туда же
Евгений Борисов
04 сентября 2018, 15:21
1
0
Увы, но айболит не самое лучшее решение. Они анализируют файлы по регулярным выражениям. В итоге точность детекта в лучшем случае 90%. Я предпочитаю ClamAV с базами SecuriteInfo
Василий Наумкин
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 и прочими свойствами. При желании, можно вообще весь сайт без ресурсов сделать =)
Виталий
22 декабря 2016, 09:41
2
+1
Спасибо, Евгений!

тоже думал в этом направлении

Павел подсказал такое решение:
[[!pdoPage?
		&element=`msProducts`
		 &select=`["ROUND(((old_price - price) / old_price) * 100) as price_percentage"]`
		&sortby=`price_percentage`
		&sortdir=`DESC`
	]]
Василий Наумкин
06 сентября 2016, 10:40
3
+1
Ну тогда rewrite должен решить все твои проблемы.
location ~* ^/en/assets/images/ {
    rewrite	^/en/assets/images/(.*)    /assets/images/$1 permanent;
}

Кстати, можно сделать еще круче — без редиректа, а просто подставляя нужную директорию, вот так:
location ~* ^/en/assets/images/(.*) {
    alias /полный_путь_к_файлам_от_корня_сервера/assets/images/$1;
}
Володя
05 августа 2016, 22:35
21
+5
можно добавить так
создать плагин на pdoToolsOnFenomInit, в нем добавить модификатор detector
<?php
switch ($modx->event->name) {
    case 'pdoToolsOnFenomInit':
    if (!$fenom = $modx->getOption('fenom', $scriptProperties)) {
        return;
    }
    if (!$MobileDetect = $modx->getService('mobiledetect', 'MobileDetect', MODX_CORE_PATH . 'components/mobiledetect/')) {
	    return;
    }
    
    $key = $MobileDetect->config['force_browser_variable'];
    $device = !empty($_GET) && array_key_exists($key, $_GET)
		? $modx->stripTags($_GET[$key])
		: '';
	if (empty($device)) {
	    $device = $MobileDetect->getSettings();
    }
    if (empty($device)) {
        $detector = $MobileDetect->getDetector();
        $device = ($detector->isMobile() ? ($detector->isTablet() ? 'tablet' : 'mobile') : 'standard');
        $MobileDetect->saveSettings($device);
    }

    $fenom->addModifier("detector", function ($value) use ($device) {
        return $value == $device;
    });

    break;
}

и теперь в любом месте можно делать так
{if 'mobile'|detector}
mobile
{/if}

{if 'tablet'|detector}
tablet
{/if}

{if 'standard'|detector}
standard
{/if}
Василий Наумкин
26 февраля 2016, 23:16
1
+4
Чтобы работало как надо, через ajax:

1. Обновляем pdoTools до версии 2.2.7-pl, в которой добавлена возможность получать доступ к конфигурации объекта pdoPage.

2. На странице примерно такая разметка, &pageVarKey по умолчанию — page.
<div class="select_goodlist_count">
    <p>Товаров на странице:</p>
    <select name="count_pages">
        <option>5</option>
        <option>20</option>
        <option>50</option>
    </select>
    <div class="clear"></div>
</div>

<div id="pdopage">
	<div class="rows">
	[[!pdoPage?
		&parents=`0`
		&ajaxMode=`default`
		&limit=`5`
	]]
	</div>
	[[!+page.nav]]
</div>

3. И такой скрипт:
<script>
$(document).on('change', 'select[name="count_pages"]', function() {
	var params = pdoPage.Hash.get();
	params['page'] = 1;
	params['limit'] = $(this).val();
	pdoPage.Hash.set(params);
	pdoPage.keys['page'] = 0;
	pdoPage.loadPage(document.location.href, pdoPage.configs['page']);
});
</script>
Василий Наумкин
15 февраля 2016, 21:57
2
+1
[[!msProducts?
	&parents=`0`
	&innerJoin=`{
		"OrderProduct": {"class":"msOrderProduct", "on":"msProduct.id = OrderProduct.product_id"},
		"Order": {"class":"msOrder", "on":"Order.id = OrderProduct.order_id"}
	}`
	&where=`{
		"Order.user_id": [[!+modx.user.id]],
		"Order.status:>": 1
	}`
	&groupby=`msProduct.id`
	&showLog=`1`
]]
Выводим только те товары, которые были оформлены в заказе текущего юзера и статус у заказа «Оплачен» или выше. Можно еще указывать разные условия в &where.
Василий Наумкин
23 января 2016, 10:55
2
+1
Отвечает «отец-основатель», который отказывается обучать javascript всех желающих в техподдержке дополнения.

Я действительно не понимаю, в чём может быть проблема вывести какие-то значения в чанке, а потом скопировать их через javascript.
Если это получается сделать с title и alt, что мешает это сделать с другими элементами? Очевидно, вы просто не знаете, как работать с jQuery.

В моём коде title и alt — это атрибуты тега img, поэтому и обращение к ним идёт через image[0].title и image[0].alt. Если рядом с картинкой будет элемент с классом, например, desc, то получить его можно так:
var image = $(this).find('img'); // здесь ищем картинку - это из оригинального кода

var desc = $(this).find('.desc'); // а рядом можно поискать элемент с классом desc
// После этого содержимое элемента desc можно вставить куда угодно. Например, в элемент .mainImageDesc 
var imageDesc = gallery.find('.mainImageDesc');
imageDesc.text(desc.text());
Это весь нужный javascript код. 80 lvl не требуется даже близко.

Чтобы всё работало, нужно не забыть вывести описание на страницу:
<div class="span2 col-md-2">
	<a href="[[+360x270:default=`[[+url]]`]]" class="thumbnail" data-image="[[+url]]">
		<img src="[[+120x90]]" alt="[[+alt]]" title="[[+name]]" width="120" height="90">
		<div class="desc" style="display:none;">[[+description]]</div>
	</a>
</div>
Я вывожу его в скрытом виде, чтобы не мешало.

А еще нужно предусмотреть блок для вывода текста в главной картинке
<div class="ms2Gallery">
	<a rel="fancybox" href="[[+url:default=`/assets/ms2gallery/minishop2/img/web/ms2_big.png`]]" target="_blank">
		<img src="[[+360x270:default=`/assets/components/ms2gallery/img/web/ms2_medium.png`]]" width="360" height="270" alt="[[+alt]]" title="[[+name]]" class="mainImage" />
	</a>
	<div class="mainImageDesc">[[+description]]</div>
	<div class="row">
		[[+rows]]
	</div>
</div>

Как видно, речь исключительно о работе с javascript, никаких особенностей, связанных с ms2Gallery, здесь нет.