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

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

С нами с 31 января 2013; Место в рейтинге пользователей: #3
Сергей Шлоков
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
Можно сделать это гораздо проще.
Сергей Шлоков
02 сентября 2016, 09:08
+3
В плагине на событие OnBeforeUserActivate написать
<?php
if ($modx->event->name == 'OnBeforeUserActivate') {
    // Блокировка через день после активации
    $user->blockedafter = strtotime('1 day');
}
Сергей Шлоков
30 августа 2016, 13:56
0
Но представьте, что значит «выпустить 3-ю версию», которая буквально похоронит все (ВСЕ!) существующие пакеты и расширения, нарушив обратную совместимость со 2-ой версией.
Очевидно, что 3-я версия будет несовместима со 2-ой. И сами они написать все пакеты не смогут. Поэтому выложили бы уже хоть какую-нибудь рабочую бету и документацию к ней. И люди бы знакомились, потестировали, подебажили, что-то и написали бы, как сделал Гугл с ангуларом 2. Ветка MODX 3.х на гитхабе не обновлялась уже 9 месяцев.
Время бежит, уже больше 3-х лет идут разговоры. На грядущем MODXpo в очередной раз расскажут о планах. А хотелось бы уже реализации.
А по поводу ExtJs… А чем его заменить? 6-я версия уже современная, мобильная. В отличие от MODX ExtJs развивается. Можно еще посмотреть в сторону Webix. В ней тоже компонентная система.
А в том же Wordpress компоненты можно ставить через композер?
Сергей Шлоков
30 августа 2016, 09:03
0
У меня ощущение, что авторы потеряли интерес или просто устали. Развитие только в рамках багфиксов. 3-я версия так и осталась на уровне разговоров. Создали сайт MODX.today с красивым названием «Your dayly MODX news», который также благополучно забросили. Даже роботу надоело писать про обновления компонентов. Перспективы не очень перспективные.
Сергей Шлоков
30 августа 2016, 07:48
2
+1
Создать плагин на событие OnHandleRequest
<?php
switch ($modx->event->name) {
        case 'OnHandleRequest':
		if ($modx->user->id == 10 && $modx->user->isAuthenticated($modx->context->key) && $modx->context->key != 'mgr') {
		$modx->runProcessor('security/logout');
		break;
}
Сергей Шлоков
29 августа 2016, 23:29
+2
Еще хотелось бы чтоб в пакет admintools входила похожая штука как AjaxManager.
Это чертовски непростая вещь.
Сергей Шлоков
29 августа 2016, 11:29
0
Именно поэтому мелкие картинки объединяют в спрайты. Также работает и минифай.
Сергей Шлоков
29 августа 2016, 09:27
0
Тут есть какая-то неуловимая тонкость в настройке, которая от нас ускользает. Было бы неплохо, если бы Василий подключился и помог разобраться — здесь же скрипты Tickets загружаются заново, а не из кэша ресурса.
Сергей Шлоков
29 августа 2016, 09:01
+1
Добрался до компа, сам проверил. Теория с кодировкой ошибочна. Но нашёл причину. Проблема в кэшировании. Если отключить кэширование у ресурса, то все работает.
Вот этот код всё ломает.
Причем проявляется не у всех. На этом сайте этой проблемы нет.
Сергей Шлоков
29 августа 2016, 08:55
+2
У тебя уже есть опыт в переходе на http/2?
Нет. Просто я читал, что у него нет ограничений при загрузке большого количества файлов с сервера в отличие от http/1.1. Поэтому на http/1.1 стараются закинуть файлы на всякие cdn, чтобы запараллелить их загрузку и тем самым ускорить загрузку страницы. Просто меня смутила твоя фраза
вроде бы наоборот стараемся уменьшить время загрузки страницы и отказываемся от сторонних серверов, т.к. к ним дольше подключается.
Сергей Шлоков
29 августа 2016, 08:48
0
Запретить индексацию таких страниц в роботс.
Сергей Шлоков
27 августа 2016, 13:40
0
Выстрел наугад. ;) Попробуй. Мне самому интересно :)
Сергей Шлоков
27 августа 2016, 13:35
+1
А у вас уже http/2 или вы загружаете через async?