Дмитрий Кондаков

Дмитрий Кондаков

С нами с 28 февраля 2013; Место в рейтинге пользователей: #234
Василий Наумкин
07 ноября 2017, 00:29
3
+9
Ребята, у всех «зависающих» одна и та же проблема — баг в 2.6 с очисткой кэша ресурса, если он был получен через getOne или подобный метод. Вот простейший код, который генерирует ошибку.

Все уже в курсе, будет починено в 2.6.1. Вот исправление, которое можно сделать самостоятельно.
Алексей П
04 ноября 2017, 23:57
7
+3
Немного доработанная версия. Чтобы не запускать скрипт по несколько раз. Оставлю здесь для себя. Может еще кому-то пригодится.
Перед использованием нужно заменить параметр parent.

<?php
$step = 10;
$offset = isset($_SESSION['galgenoffset']) && $_SESSION['galgenoffset'] ? $_SESSION['galgenoffset'] : 0;
$modx->setLogLevel(MODX_LOG_LEVEL_ERROR);
$q = $modx->newQuery('modResource', array('parent' => 6007));
$total = $modx->getCount("modResource", $q);
$q->limit($step,$offset);
foreach($modx->getIterator("modResource", $q) as $doc){
	$doc->remove();
}

$_SESSION['galgenoffset'] = $offset + $step;
if ($_SESSION['galgenoffset'] >= $total) {
  $sucsess = 100;
  $_SESSION['Console']['completed'] = true;
  unset($_SESSION['galgenoffset']);
} else {
  $sucsess = round($_SESSION['galgenoffset'] / $total, 2) * 100;
  $_SESSION['Console']['completed'] = false;
}
for ($i=0; $i<=100; $i++) {
    if ($i <= $sucsess) {
        print '=';
    } else {
        print '_';
    }
}
$current = $_SESSION['galgenoffset'] ?
           $_SESSION['galgenoffset'] :
           ($sucsess == 100 ? $total : 0);
print "\n";
print $sucsess.'% ('.$current.')'."\n\n";
Владимир
01 сентября 2017, 15:32
1
0
можно заменять на те, что предлагает гугл
— это в каком случае? сайт статичен?
Не знаю, может кому-то покажутся превьюшки с 8-ми битным цветом не лучшего качества, но Google PageSpeed одобряет вот такие:
{$_modx->runSnippet('!pthumb', [
      'input' => $_pls['tv.title_image'],
      'options' => 'w=500&h=260q=70&zc=C&fltr[]=rcd|8|0',
      'toPlaceholder' => 'thumb'
      ])}
Василий Наумкин
13 июля 2017, 11:46
6
+5
Гораздо проще и лучше просто вызвать свой скрипт после default.js от ms2 и перезаписать там объект miniShop2.Message:
miniShop2.Message = {
	success: function() {},
	error: function() {},
	info: function() {},
};

В modstore.pro, например, сделано вообще вот так:
miniShop2.Message = App.utils.Message;
Поэтому все уведомления от ms2 работают через общую систему уведомлений сайта.
Александр Толстенко
21 июня 2017, 10:35
1
0
удали папку core/cache и заверши все сеансы.
у меня такая беда была когда я начал менять местами фильтры, но проделав эти манипуляции все прошло.
P.S: Кстати такая ошибка вылазила, только если я был авторизован в админ, в инкогнито все работало нормально.
Володя
11 апреля 2017, 07:26
5
+2
примерно так можно
s6200.h3.modhost.pro/katalog/11999.html
joxi.ru/E2pMqLGS9YgaRA
{foreach $options as $name => $values}
    <div class="form-group">
        <label class="col-md-2 control-label" for="option_{$name}">{('ms2_product_' ~ $name) | lexicon}:</label>
        <div class="col-md-10">
            <select name="options[{$name}]" class="input-sm form-control" id="option_{$name}">
                {foreach $values as $value}
                    <option value="{$value}">{$value}</option>
                {/foreach}
            </select>
        </div>
    </div>    
        
        
    <div class="form-group form-inline embroidery_parent" style="display:none;">    
        <label class="col-md-2 control-label" for="option_{$name}"></label>
        <div class="col-md-10">
			<input type="text" name="options[embroidery_text]" placeholder="Текст вышивки" class="input-sm form-control" value="">
		</div>
    </div>
    
{/foreach}

<script>
$(document).on('change', '.ms2_form', function (e) {   
    
    var embroidery = $(this).find('select[name="options[embroidery]"]');
    var embroidery_text = $(this).find('input[name="options[embroidery_text]"]');
    if (embroidery.val() == 'да') {
        embroidery_text.closest('.embroidery_parent').show();
    }
    else {
        embroidery_text.closest('.embroidery_parent').hide();
        embroidery_text.val('');
    }
});
</script>
Николай
01 апреля 2017, 14:48
4
+1
Постарался чуть более универсальное решение написать для тех случаев, когда обратный слеш нужен не только для папок, но и для документов.

Те. сайт/категория/товар/
<?php
if ($modx->context->key == 'mgr') {return;}
$uri=$_SERVER['REQUEST_URI'];
if (substr($uri, -1) != '/' && $uri != '/' && !strpos($uri, '?')&& !strpos($uri, '.')) {
	$url = $modx->getOption('site_url');
	if(substr($url, -1)=='/'){
		$url=substr($url, 0, -1);
	}
	$url .= $uri.'/';
	$modx->sendRedirect($url,array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
}
Stan Ezersky
20 марта 2017, 18:43
1
0
Было такое же — менялся источник файлов, почему-то решилось изменением конфига MySQL. Добавил sql_mode (без него Ubuntu 16.04 + PHP7+MySQL 5.7 вообще тяжко работает)

[mysqld]
#
#
#
sql_mode = "NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION"
Евгений Webinmd
24 января 2017, 11:32
1
0
я обычно через конфиг самого TV поля прописываю в Разметка колонок и всё нормально срабатывает, может там у вас битая картинка и значит пути не правильно подставляются?

[ 
{"header": "Изображение", "dataIndex": "img","renderer": "this.renderImage"}
]
Андрей
12 января 2017, 11:45
1
+2
Через процессор можно добавлять изображения

$data = [
    'id' => 'id продукта',
    'file' => 'путь к файлу',
];

$response = $modx->runProcessor('gallery/upload', $data, [
    'processors_path' => MODX_CORE_PATH . 'components/minishop2/processors/mgr/',
]);