Всего 125 335 комментариев

Василий Наумкин
21 февраля 2013, 21:13
0
Вместо

if ($res = $modx->getObject('modResource', array('parent' => $category, 'pagetitle' => $product['pagetitle']))) {
	if ($mode == 'update') {
		$id = $res->get('id');
		$newproduct = array_merge($res->toArray(), $product, $ms);
		$newproduct['tags'] = $tags;
		$response = $modx->runProcessor(
			'mgr/goods/update'
			,$newproduct
			,array('processors_path' => MODX_CORE_PATH.'components/minishop/processors/')
		);
		if ($response->isError()) {
			return $modx->error->failure('Error on row '.$i.': '.$response->getMessage());
		}
		$modx->removeCollection('ModGallery', array('gid' => $id));
	}
	else {
		$i++;
		continue;
	}
}
else {
	$res = $modx->newObject('modResource');
	$res->fromArray($product);
	$newproduct = array_merge($res->toArray(), $product, $ms);
	$newproduct['tags'] = $tags;
	$response = $modx->runProcessor(
		'mgr/goods/create'
		,$newproduct
		,array('processors_path' => MODX_CORE_PATH.'components/minishop/processors/')
	);

	if ($response->isError()) {
		return $modx->error->failure('Error on row '.$i.': '.$response->getMessage());
	}
	else {
		$id = $response->response['object']['gid'];
		if (!$res = $modx->getObject('modResource', $id)) {
			return $modx->error->failure('Error on row '.$i.': '.print_r($response->response['object'],1));
		}
	}
}

Сделать вот так:

$res = $modx->newObject('modResource');
$res->fromArray($product);
$newproduct = array_merge($res->toArray(), $product, $ms);
$newproduct['tags'] = $tags;
$response = $modx->runProcessor(
	'mgr/goods/create'
	,$newproduct
	,array('processors_path' => MODX_CORE_PATH.'components/minishop/processors/')
);

if ($response->isError()) {
	return $modx->error->failure('Error on row '.$i.': '.$response->getMessage());
}
else {
	$id = $response->response['object']['gid'];
	if (!$res = $modx->getObject('modResource', $id)) {
		return $modx->error->failure('Error on row '.$i.': '.print_r($response->response['object'],1));
	}
}
Andrey Grachov
21 февраля 2013, 21:13
0
Если радиобаттоны имеют имя tv{$tv->id}[ {$item.value} ], то значение тв параметра по идее должно сохраняться, но вы потеряете в итоговом значении ключи этого массива. Лучше создать скрытое поле с именем tv{$tv->id} и при изменении радиобаттонов сериализовать в него нужное значение.
Гаврилов Александр
21 февраля 2013, 21:10
0
Подскажите, а что конкретно нужно изменить в коде, который вы показали, чтобы убрать эту проверку?
Василий Наумкин
21 февраля 2013, 21:10
0
Вот так надо смотреть ответ от сервера:
Василий Наумкин
21 февраля 2013, 21:08
0
Правильно, товар в категории должен быть с уникальным именем.

Как избавиться? Убрать проверку в скрипте импорта или переназвать товары, добавив в них изменяющийся параметр.
Василий Наумкин
21 февраля 2013, 21:00
0
В компоненте для проверки адреса используется функция filter_var. Рискну предположить, что у тебя на сервере с ней что-то не так.

Проверить можно одним способом — глянь в браузере, что приходит от сервера на запрос.
В гугле хроме это кнопка f12, там вкладка network И смотри запросы к connector.php, там вкладка response.

По идее, у тебя там должны быть или ошибка, или пустота.
Илья Уткин
21 февраля 2013, 20:56
0
Совершенно правильно. Но достаточно и одного дефиса. rtfm.modx.com/display/revolution20/Tag+Syntax
Василий Наумкин
21 февраля 2013, 20:53
0
Окей, показывай свой сайт с такими скоростями, чтобы работал на MODX Revolution и выводил внизу плейсхолдер [^t^]. Желательно, с таким же функционалом, но можно и без.

Тебе же есть, что показать, или мы будем обсуждать сферических «любых оптимизаторов»?

Я не заявляю, что мой сайт или MS2 самый быстрый на свете. Но одни из самых быстрых на Revolution — факт. Если ты готов с этим поспорить — давай свои реальные аргументы.
Фролов Алексей
Фролов Алексей
21 февраля 2013, 20:44
0
В среднем 500 мс ожидание ответа от сервера.
Вам любой оптимизатор скажет что это большая цифра, выше 200 мс это уже не радостно
Василий Наумкин
21 февраля 2013, 20:35
0
Лёша, ну в этом месте я просто обязан попросить тебя продемонстрировать твои достижения в написании быстрых сайтов.

Мой сайт медленный, ок. Покажи свой, быстрый.
Василий Наумкин
21 февраля 2013, 20:30
0
На этом сайте, как ни странно, постоянно добавляются комментарии, вопросы, он всё время в движении.

Неудивительно, что иногда бывают заскоки, но они никак не влияют на общую картинку:
Сайт — быстрый.
Василий Наумкин
21 февраля 2013, 20:29
0
Ты сказать то что хочешь? Говори, не стесняйся.

Циферки я внизу и сам вижу хорошо, в среднем там 0,35 — 0,7.

Заскоки могут быть по разным причинам, типа я зашел в админку и почистил кэш, или внес изменения в css и MinifyX перегенерирвал все стили сайта.

Фролов Алексей
Фролов Алексей
21 февраля 2013, 20:28
0
Я это не сам сочинил)) Сделал скриншот сразу после добавления своего комментария и обновления текущей страницы
Фролов Алексей
Фролов Алексей
21 февраля 2013, 20:25
0
Нет, ничего. Вы пишете компоненты, а сделать быстрым свой сайт не можете или не хотите, просто странно.
Василий Наумкин
21 февраля 2013, 20:25
0
Что могу сказать? Какой-то глюк.

Хорошо, что такое случается крайне редко — я вот, ни разу не видел пока.
Василий Наумкин
21 февраля 2013, 20:22
0
Фролов Алексей
Фролов Алексей
21 февраля 2013, 20:22
0
Это уже значительно лучше.
Василий Наумкин
21 февраля 2013, 20:19
0
Полез искать самое тормозное место в работе сниппета, и нашел!
Это функция getChildIds, которая рекурсивно ищет потомков ресурса, из которого выводится каталог.

Немного уточнил лог и выходит вот это (смотрим на строчку «Query parameters are prepared.»)

Глубина выборки 10


Глубина выборки 1


Глубина 0, функция отключена


Очевидно, тормоза оттого, что в категории 10000 потомков. Но всегда можно указать параметр &depth=`1` и перечислить нужных родителей через запятую — так будет быстрее.

Очистка кэша как раз и влияет на построение дерева ресурсов, с которым работает getChildIds(). Поэтому с depth=1 сниппет отрабатывает за 0,12 сразу после очистки, а потом уже — 0,09.

Вот такие пироги. Куда еще убыстрить — не знаю.
Фролов Алексей
Фролов Алексей
21 февраля 2013, 20:17
0