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

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

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
Василий Наумкин
05 апреля 2015, 19:28
0
Если переписать генерацию фильтров.

Автогенерация из опций по умолчанию делает только чекбоксы, а несколько фильтров полю указать нельзя.

Поэтому придётся делать свой кастомный класс фильтрации и там колдовать.
Василий Наумкин
05 апреля 2015, 09:33
0
Из-за подобных вещей я теперь всем советую использовать внешний SMTP.

С него и почта лучше доходит, и спам фильтруется, и при высокой нагрузке тебя сразу отключат и предупредят.
Василий Наумкин
04 апреля 2015, 21:12
1
+1
Поправил, обновляйся.
Василий Наумкин
04 апреля 2015, 14:31
+1
Вот поэтому у меня текст с картинками — bezumkin.ru/training/course2/
Василий Наумкин
03 апреля 2015, 19:44
+1
Нет, тестовые сайты не считаются, только реальные.

Но показываются именно загрузки, а не покупки. То есть, чем больше новых версий дополнения — тем больше закачек.
Василий Наумкин
03 апреля 2015, 15:49
+1
Через pdoTools — не выйдет.

Тогда нужно писать свой сниппет, наверное, который будет корректно реагировать на передаваемые из mFilter2 параметры, типа sortby, parents, returnIds и еще не знаю какие — нужно смотреть исходник.

Например, там есть вот такие места:
if (!empty($ids)) {
	$tmp = $scriptProperties;
	$tmp['returnIds'] = 1;
	$tmp['resources'] = implode(',', $ids);
	$tmp['parents'] = $scriptProperties['parents'];
	$tmp['limit'] = 0;
	$ids = explode(',', $modx->runSnippet($scriptProperties['element'], $tmp));
	$pdoFetch->addTime('Found ids: "'.implode(',',$ids).'"');
}
Это проверка ресурсов, которые сниппет может вывести.

Наверное, проще будет создать свою модель как положено.
Василий Наумкин
03 апреля 2015, 15:13
0
Используй pdoResources — он умеет выбирать данные из любых таблиц.
Василий Наумкин
03 апреля 2015, 14:42
+1
Выводом данных занимается сниппет, указанный в &element.

По умолчанию там mSearch2, но часто используются pdoResources или msProducts.
Василий Наумкин
03 апреля 2015, 14:41
0
Эти параметры передаются в вызываемый сниппет, а он возвращает id подходящих ресурсов, которые ты дальше видишь почти во всех методах.

Получить эти параметры в классе фильтрации можно через $this->config, например:
$this->config['parents'];
Василий Наумкин
03 апреля 2015, 04:41
1
+4
как можно запустить скрипт от рута из под PHP, либо дать пользователю все необходимые права на выполнение скрипта
Сервер настроен по инструкции Василия.
Основной смысл моей инструкции именно в том, чтобы не давать сайтам дополнительных прав. Каждый сайт запускается из под своего пользователя и он имеет доступ только к своим файлам.

А теперь представь, что если бы существовал способ делать так, как ты хочешь? Выходит, что любой сайт мог бы выполнять команды от root и в чем тогда защита? Злоумышленник ломает сайт и получает доступ ко всему серверу, ко всем сайтам и файлам.

Так что, ответ прост — это невозможно.

Процесс, который создаёт сайты должен работать не как обычный сайт. Это или отдельный демон на Python, как у нас на хостинге, или отдельный процесс на PHP, но запущенный от root и защищенный по IP от случайного коннекта. Или просто консольные скрипты, как в моей инструкции.

Когда я делал тестовые сайты, там использовались именно эти скрипты, которые запускались по расписанию раз в n минут.
То есть, юзер заходил на обычный сайт, заказывал себе тест, запрос сохранялся в БД, а сервер уже раз в 10 минут от root запускал скрипт, который проверял заказы в БД, создавал тестовые сайты и отправлял на email уведомления об этом.

Ты можешь сделать так же.
Василий Наумкин
03 апреля 2015, 04:28
2
0
Видимо, речь об этом сниппете.

Тогда нужно его совсем чуть-чуть переделать:
<?php
// Получаем готовый текст
$text = trim($input);
if (empty($text)) {
	return;
}

// Стандартные чанки, можно переопределить
if (empty($tpl)) {$tpl = '@INLINE <li>[[+value]]</li>';}
if (empty($tplOuter)) {$tplOuter = '@INLINE <ul>[[+rows]]</ul>';}

// Подключаем pdoTools для работы с инлайновыми чанками
$pdo = $modx->getService('pdoTools');

// Разбиваем текст по символу переноса строки
$rows = '';
$tmp = array_map('trim', explode("\n", $text));
foreach ($tmp as $value) {
	if (empty($value)) {continue;}
	$rows .= $pdo->getChunk($tpl, array('value' => $value));
}

// Если есть, что выводить - выводим
if (!empty($rows)) {
	return $pdo->getChunk($tplOuter, array('rows' => $rows));
}

И можно вызывать в чанке оформления галереи:
[[+add:getAddList]]

Здесь сам сниппет ничего получать не должен, потому что, в отличии от ТВ, у картинок нет имён и они не так привязаны к ресурсам. Поэтому, работаем только с уже переданным текстом.
Василий Наумкин
02 апреля 2015, 18:59
0
$modx->addPackage('ms2gallery', MODX_CORE_PATH . 'components/ms2gallery/model/');
// Получаем файл с id = 10
if ($file = $modx->getObject('msResourceFile', 10)) {
	print_r($file->toArray());
}
Василий Наумкин
02 апреля 2015, 17:42
+1
Это уже не ко мне вопрос, но полагаю, что да — есть.
Василий Наумкин
02 апреля 2015, 16:47
+1
4. Отправлять из консоли сервера, там пока нет ограничений по времени.
5. Использовать для рассылок специализированные сервисы для рассылок.

Всё-таки, рассылать письма по 10000 адресов с обычного, пускай и хорошего, хостинга — ненормально.
Василий Наумкин
02 апреля 2015, 11:57
0
Добавил правку и обновил пакет в репозитории, проверяйте.
Василий Наумкин
02 апреля 2015, 09:21
0
Это лучше спросить у специалистов по Evo на modx.im.