Сергей Шлоков

Сергей Шлоков

С нами с 31 января 2013; Место в рейтинге пользователей: #5
09 сентября 2016, 14:43
0
Просто в России, если написано акция до 8, это это, блин, до 8, а не до обеда восьмого и не до 7…
А если магазин работает до 21, то закрываться он должен в 22 часа, а не в 21-00 и не в 21-30. :)
В той России, в которой живу я, если хотят, чтобы акция действовала и 8-го, говорят «акция продлится до 8-го включительно». Ибо приставка «до» имеет строго определенное значение.
09 сентября 2016, 13:59
0
Этот код нужно указать в javascript файле и его подключить или прописать напрямую в шаблоне. А в url нужно указать адрес страницы со сниппетом date.
09 сентября 2016, 13:57
+1
Важна актуальность информации.
Представь, ты сидишь в офисе на 3-ем этаже и тебе надо узнать время. Часы находятся на первом этаже. Ты просишь курьера сбегать и узнать. Они прибегает и говорит — 12 часов 22 минуты 41 секунда. Ты его опять посылаешь, он уже приходит не спеша и сообщает — 12 часов 24 минуты 18 секунд. Как ты думаешь, время соответствует реальному?
А вот если он сбегает (или сходит) и узнает сколько человек в очереди в столовой, то эта информация будет актуальной. Тут не так важны секунды.
Чувствуешь разницу?
09 сентября 2016, 11:07
+1
На здоровье!
По этому компоненту все планы выполнены.
09 сентября 2016, 10:42
0
Как раз наоборот. Посчитай количество шагов в том и другом случае. Лично я не стал бы ставить пакет ради одного сниппета. Тем более обновлений не планируется.
09 сентября 2016, 10:23
0
Так что надо-то — время или пользователи?
09 сентября 2016, 10:17
0
Это что-то новенькое — php для динамических элементов. Сергей, а ты понимаешь, что на ajax запрос требуется время? И может случится так, что запрос будет выполняться несколько секунд.
Такие вещи делаются только на яваскрипте. Забиваешь в яндекс «Вывод текущего времени на странице javascript» и получаешь кучу примеров.
09 сентября 2016, 10:07
0
Этот репозиторий есть — готовые решения. ;) Плохо тегов тут нет.
09 сентября 2016, 08:18
1
+1
Хорошее решение. Только лучше таблицу напрямую не указывать. MODX сам умеет определять
SELECT * FROM {$modx->getTableName('TicketView')} WHERE ....
07 сентября 2016, 08:45
1
+1
А так
...
&where=`["TVeventdate.value >= NOW()"]`
или так
...
&where=`["EventDate >= NOW()"]`
07 сентября 2016, 08:28
1
0
[[!pdoResources?
	&tpl=`ImmediateEvents`
	&includeTVs=`1`
	&includeContent=`1`
	&includeTVs=`EventImage, EventDate`
	&processTVs=`1`
	&limit=`4444`
	&where=`["TVEventDate.value >= NOW()"]`
	&showLog=`1`
]]
Вызывать обязательно некэшированным.
03 сентября 2016, 14:06
0
<input type="hidden" name="context_key" value="Айди другого контекста" />
А сниппету в параметре allowedFields нужно добавить context_key.
03 сентября 2016, 11:31
+1
писал впервые из нескольких кусков
Это очень заметно. Чисто для понимания давайте пробежимся по коду.
// очищаем кеш
Зачем?
П.С. Вообще это можно сделать непрограммно — просто создавать некэшированные страницы. Но в данном случае не понятно, зачем это нужно.

//Получаем ID текущего ресурса
$id = $modx->resource->get('id');
Зачем? В первой строчке уже получали.

//текущая дата
$today = date('Y-m-d');
Зачем? В strtotime и так по умолчанию берется текущая дата.

$date = date('Y-m-d',strtotime("-$day day", strtotime(preg_replace('~^(\d+)\.(\d+)\.(\d+)$~', '$3-$2-$1', $today))));
Это вообще что за конструкция? Явно откуда-то скопирована без понимания. Хватило бы
$date = date('Y-m-d',strtotime("-$day day"));
Но и это лишнее, так как в mySql есть готовые функции для работы с датами.

$tmpip = $arr_one[«ip»];
$allip[] = $tmpip;
А почему нельзя было написать так $allip[] = $arr_one[«ip»]?

if (in_array("$ip", $allip)) {
$ip нужно указывать без кавычек.

print $unlock;
Возврат значений из сниппета должен быть через return.

Явно есть над чем поработать.
03 сентября 2016, 10:44
1
0
Смотрите, Сергей, если задача — разрешить добавлять комментарий 1 раз в n дней, то решается она несколькими строчками.
Вариант 1. Через сниппет как у вас.
$sql = "SELECT 1 FROM modx_ec_messages C LEFT JOIN modx_ec_threads D ON C.thread=D.id
WHERE D.resource = {$modx->resource->id} AND C.date>DATE_SUB(NOW(),INTERVAL {$day} DAY) AND ip = ?" ;
$stmt = $modx->prepare($sql);
$stmt ->execute($_SERVER['REMOTE_ADDR']);
if ($stmt->rowCount() ) {
	// Запрещено
	return '';
}
// Выполняем указанные сниппет
return $modx->runSnippet($snippet, $scriptProperties);
Ну и вызывать так
// Вместо unlock указываем snippet и любые другие параметры указанного сниппета
[[!voting_ban? &snippet=`ecForm` &day=`7`]]
Вариант 2. Через плагин.
Если у этого компонента есть событие добавления комментария по аналогии с Tickets, то форма показывается, но при добавлении комментария плагин проверяет возможность добавления.

Вот как минимум 2 варианта.
П.С. Ещё было бы логично проверять почту. У пользователя ip может быть динамическим. А лучше разрешать оставлять отзыв только авторизованным пользователям. Тогда ещё проще.
03 сентября 2016, 09:32
0
Если вам интересно, могу объяснить почему данное решение вряд ли кто будет использовать.
03 сентября 2016, 08:46
0
Зачем это нужно понятно из названия. А что делает данный сниппет? Потенциальный пользователь данного решения должен копаться в коде, чтобы понять?
И ещё вопрос.
Ложу тут — если покажется нужным — прошу перенести куда следует.
В данном предложении как правильно читать — лОжу или ложУ?

П.С. Данное решение никак не тянет на готовое.
03 сентября 2016, 08:04
1
+1
В файле snippets/game.php добавить работу с кэшем. Документация.
02 сентября 2016, 09:50
0
Можно сделать это гораздо проще.