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

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

С нами с 08 декабря 2012; Место в рейтинге пользователей: #1
Василий Наумкин
06 апреля 2015, 21:43
0
Ты что, человек ЦЕЛЫЙ ЧАС ПОТРАТИЛ, понимать надо!

Сколько времени на подготовку дополнения потратил ты — никого не волнует.
Василий Наумкин
06 апреля 2015, 19:31
0
Нужно заменить
&bcTplCrumbOuter=`[[$bcTplCrumbOuter_2]]`
на
&bcTplCrumbOuter=`bcTplCrumbOuter_2`
Василий Наумкин
05 апреля 2015, 20:34
+3
Так прописано в модели дополнения, это хорошо видно в схеме, по которой она генерируется.

Почитать можно здесь. А про работу с джоинами pdoTools — здесь.
Василий Наумкин
05 апреля 2015, 20:27
0
Проверял для гостей, без авторизации
Логично, у гостей нет профиля на сайте, а именно он выбирается.

наверное перекрывают друг друга
Tickets изначально не рассчитывался на работу без авторизации. Потом я это дописал, но не везде, как видно.
Василий Наумкин
05 апреля 2015, 19:39
0
Неправильный ты вывод делаешь.

Скорее всего, из-за особенностей работы плейсхолдеров, фильтр применяется к тегу, когда он еще пуст. А когда ты убираешь md5 и страница ренедрится полностью, email туда успевает подставиться. То есть, значение в тег попадает уже после обработки фильтром.

Можно попробовать вызывать его просто некэшированным [[!+email:md5]].

Исходник фильтра в MODX выглядит так:
case 'md5':
	/* See PHP's md5 - http://www.php.net/manual/en/function.md5.php */
	$output= md5($output);
break;
Ошибаться там просто негде.
Василий Наумкин
05 апреля 2015, 19:30
0
Отдельно нет.
pdoTools — специальная библиотека, и все сниппеты работают исключительно с её помощью.

Её используют miniShop2, mSearch2, Tickets, BannerY и другие дополнения. Думаю, тебе придётся постараться, чтобы не установить pdoTools рано или поздно себе на сайт =)
Василий Наумкин
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 уведомления об этом.

Ты можешь сделать так же.