Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 145 комментариев

Василий Наумкин
Василий Наумкин
Это у меня ошибка, поправил. Хотя ты тоже присваивал number вместо num =)

В любом случае, такое простое изменение нумерации не прокатит, потому что она собьется в БД. Тебе нужно сделать как тут, только изменить метод getnum().

Видишь, в моём методе нумерация завязана на символ "/", убирать его нельзя. Поэтому, если хочешь от него избавиться нужно изменить алгоритм присвоения номеров, без всяких плагинов.
Pavel Kravchuk
Pavel Kravchuk
Василий, если не сложно, ответь плиз по категориям, как их можно добавить с помощью плагинов.
Что то я запутался в двух соснах. Как я делал, описал в предыдущем посте.
Просто не хочется делать через ж**пу. ТВ имхо не лучший вариант для реализации данной сортировки.
Заранее спасибо.
Вадим Собчук
Вадим Собчук
Вот сниппет в котором вызов js кода… работает только первые 3 строчки javascriptа (проверял через alert — выводит переменные, которые формируются в php), но дальше не работает. Может я экранирование неправильно сделал? подскажите пожалуйста!
<?php
require_once MODX_CORE_PATH. 'SDK/OpenTokSDK.php';
require_once MODX_CORE_PATH. 'SDK/OpenTokArchive.php';
require_once MODX_CORE_PATH. 'SDK/OpenTokSession.php';
$apiObj = new OpenTokSDK( API_Config::API_KEY, API_Config::API_SECRET );
$session = $apiObj->createSession( $_SERVER[«REMOTE_ADDR»] );
$sessionId = $session->getSessionId();
$token = $apiObj->generateToken($sessionId);

$modx->regClientStartupScript('
Василий Наумкин
Василий Наумкин
Для регистрации скриптов на фронтенд из php есть специальные функции regClientScript и regClientStartupScript.

Твоя задача решается так:
$modx->regClientStartupScript('
	<script type="text/javascript">
		var sessionId = "'.$session.'";
	</script>
', true);

После загрузки страницы ты увидишь это в ее исходном коде, только вместо $session будет реальное значение.
Василий Наумкин
Василий Наумкин
Оттого, что vendor в таблице msProductData — это и есть число.

Если хочешь выводить имена производителей — есть 2 способа.
Первый, побыстрее: нужно создать дополнительное поле (или ТВ параметр) и сохранять туда плагином это имя. Ну а потом фильтровать по этому полю.

Второй, погибче: выбирать и выдавать данные собственным сниппетом. Его нужно указать параметру через двоеточие, вот так:
&includeMSList=`vendor:extra_filter_vendor`

Вот кож сниппет extra_filter_vendor, для вывода производителей товаров:
$ids = $scriptProperties['ids'];
$param = $scriptProperties['param'];
if (empty($ids) || empty($param)) {return false;}

$q = $modx->newQuery('msVendor');
$q->leftJoin('msProductData', 'Data', 'Data.vendor = msVendor.id');
$q->select('Data.id,msVendor.name');
$q->where(array('Data.id:IN' => $ids));

if ($q->prepare() && $q->stmt->execute()) {
	$res = $q->stmt->fetchAll(PDO::FETCH_ASSOC);
	$arr = array(
		'name' => 'Производитель'
		,'type' => 'text'
		,'values' => array()
	);
	foreach ($res as $v) {
		$arr['values'][$v['name']][] = $v['id'];
	}
	return json_encode($arr);
}

Таким образом можно выдать любую информацию в фильтр.