Дмитрий

Дмитрий

С нами с 05 ноября 2018; Место в рейтинге пользователей: #363
Дмитрий
10 декабря 2019, 09:44
0
Благодарю, так вроде все работает.
Сейчас не могу проверить все, надо на работу, после посмотрю внимательнее.

А объекты на null проверять какие?
Так?
If($resource !=null){
    $resource->set('editedon', time());
    $resource->save();
    $resource->clearCache();
}
Или как?
Дмитрий
10 декабря 2019, 09:15
0
Сергей, обратился в тех поддержку магазина к автору.

Сделал так как ты написал, но не работает это
if ($modx->event->name == 'OnEcMessageSave') {

$id = 8;
$res = $modx->getObject('modResource', $id);

$res->set('editedon', time());
$res->save();
$res->clearCache();

}
Дата редактирования 'editedon' не меняется и кэш не очищается.
Дмитрий
10 декабря 2019, 01:56
0
Осталось правильно определить id ресурса, в котором размещается цепочка.

А в остальном вот такой код плагина, вроде работает без ошибок. Благодарю Евгения за правильное (вроде бы) направление решения данной задачи, чем смог, помог.
if ($modx->event->name == 'OnEcMessageSave') {

$id = 8;// Как динамически определить id ресурса при сохранении сообщения в админке???
$res = $modx->getObject('modResource', $id);

$my_doc = $res->toArray();
$modx->runProcessor('resource/update',$my_doc);

//очищаем кэш
$res->_contextKey = $res->context_key;
$cache = $modx->cacheManager->getCacheProvider($modx->getOption('cache_resource_key', null, 'resource'));
$key = $res->getCacheKey();
$cache->delete($key, array('deleteTop' => true));
$cache->delete($key);
}

Помогите определить id ресурса в данном плагине!
Дмитрий
10 декабря 2019, 00:48
0
например, сохраняю сообщение с цепочки ресурса id:8, а меняется 'editedon' у ресурса с id:1, то есть у главной.
Дмитрий
10 декабря 2019, 00:45
0
я еще имел ввиду, что
$id = $object->get('thread');
Не определяет id ресурса. Кроме главной нигде не работает, видимо там всегда значение == 1
Дмитрий
10 декабря 2019, 00:39
0
а зачем
$res['publishedon'] = time();
//или
$res['editedon'] = time();
Этой же строкой ведь уже обновляется дата редактирования 'editedon'
$response = $modx->runProcessor('resource/update', $res);
Дмитрий
10 декабря 2019, 00:10
0
Что-то на главной сработало, а на остальных не срабатывает.

код плагина такой:
if ($modx->event->name == 'OnEcMessageSave') {

$id = $object->get('thread');

$res = $modx->getObject('modResource', $id);
$my_doc = array(
'id' => $id
,'parent' => $res->get('parent')
,'pagetitle' => $res->get('pagetitle')
,'class_key' => 'modDocument'
,'alias' => $res->get('alias')
,'context_key' => 'web'
);
$modx->runProcessor('resource/update',$my_doc);

//очистка кэша ресурса  
$res->_contextKey = $res->context_key;
$cache = $modx->cacheManager->getCacheProvider($modx->getOption('cache_resource_key', null, 'resource'));
$key = $res->getCacheKey();
$cache->delete($key, array('deleteTop' => true));
$cache->delete($key);

}
Дмитрий
09 декабря 2019, 23:24
0
Благодарю. Если не трудно, можно пример привести. Или хотя бы пример получения в таком плагине id ресурса в котором размещается цепочка, сообщение которой редактируем и сохраняем в админке.
Дмитрий
27 ноября 2019, 23:58
0
Выдает что включен.
exec is enabled
Дмитрий
27 ноября 2019, 01:13
0
Что-то не нашел такого ни на одном моем хостинге.
Смотрел с помощью
phpinfo();
Дмитрий
13 ноября 2019, 19:07
0
Выложил конфигурацию сюда

Вот .htaccess
Options -Indexes

RewriteEngine On
RewriteBase /

# Удаляем ненужные HTTP заголовки
Header unset X-Powered-By
Header unset Pragma
Header unset Expires
Header unset Server
#Header unset Cache-Control: no-store, no-cache, must-revalidate
#Header unset Cache-Control

# Добавляем нужные HTTP заголовки
#Header append Cache-Control: max-age=10800
#Header append Content-Encoding: gzip
Header append Vary: Accept-Encoding,User-Agent
#Header append Vary: Accept-Encoding

# Кэширование статики
#Header set Cache-Control "max-age=2592000"

ErrorDocument 403 /403.html

ErrorDocument 404 /404.html

###############################################
           #### РЕДИРЕКТЫ #####
###############################################

# Редирект c без слэша на со слэшем 
#RewriteCond %{REQUEST_URI} !\?
#RewriteCond %{REQUEST_URI} !\&
#RewriteCond %{REQUEST_URI} !\=
#RewriteCond %{REQUEST_URI} !\.
#RewriteCond %{REQUEST_URI} !\/$
#RewriteRule ^(.*[^\/])$ /$1/ [R=301,L]

# Rewrite domain.com -> domain.com/
#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_URI} !\..{1,10}$
#RewriteCond %{REQUEST_URI} !(.*)/$
#RewriteRule ^(.*)$ https://mysite.ru/$1/ [L,R=301]

# Редирект с тега с get параметром
RewriteCond %{QUERY_STRING} ^tag=*
RewriteRule ^(.*)$  /$0? [R=301,L]

# Редирект с безслэша на слэш при пагинации
RewriteCond %{REQUEST_URI} ^(.*/)page/(\d+)$
RewriteRule ^ %1page\/%2\/ [R=301,L]


# Редирект со слэша на без слэша
#RewriteRule ^(.*)\/$ $1 [R=301,L]

### Редирект на правильную страницу при переходе по битой ссылке с неправильным окончанием после точки
### Но вначале 404, если после .html стоит точка и возможно идут какие-то символы, например так: .html.*
#RewriteCond %{REQUEST_URI} ^(.*)\.html\.(.+)*
#RewriteRule ^(.*)$ [R=404]

#RewriteCond %{REQUEST_FILENAME} !-f
#RewriteCond %{REQUEST_FILENAME} !-d
#RewriteCond %{REQUEST_URI} ^(.*)\.html(.+) [OR]
#RewriteCond %{REQUEST_URI} ^(.*)\.htm$ [OR]
#RewriteCond %{REQUEST_URI} ^(.*)\.ht$ [OR]
#RewriteCond %{REQUEST_URI} ^(.*)\.h$ [OR]
#RewriteCond %{REQUEST_URI} ^(.*)\.$
#RewriteRule ^(.*)\.(.*) $1.html [R=301,L]



# Редирект с http на https
RewriteCond %{SERVER_PORT} !^443$
RewriteRule .* https://%{SERVER_NAME}%{REQUEST_URI} [R=301,L]

# Редирект с www.domain.com -> domain.com - используется с плагином SEO Strict URL
# RewriteCond %{HTTP_HOST} .
RewriteCond %{HTTP_HOST} ^www.(.*)$ [NC]
RewriteRule ^(.*)$ https://%1/$1 [R=301,L]

### Редиректы с index.php или index.html на сайт
RewriteCond %{THE_REQUEST} ^[A-Z]{3,9}\ /index\.(php|html)\ HTTP/
RewriteRule .* / [R=301,L]


# Правильно перепишите защищенные запросы, чтобы предотвратить предупреждения SSL-сертификата, например. предотвращать 
# https://www.domain.com, когда ваш сертификат разрешает только https://secure.domain.com
#RewriteCond %{SERVER_PORT} !^443
#RewriteRule (.*) https://example-domain-please-change.com/$1 [R=301,L]



# Перенаправить менеджера в определенный домен - не переименовывать файл ht.access
# в папке менеджера, чтобы использовать это правило
#RewriteCond %{HTTP_HOST} !^example-domain-please-change\.com$ [NC]
#RewriteCond %{REQUEST_URI} ^/manager [NC]
#RewriteRule ^(.*)$ https://example-domain-please-change.com/$1 [R=301,L]



# Параметр Friendly URLs
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^(.*)$ index.php?q=$1 [L,QSA]



# Make sure .htc files are served with the proper MIME type, which is critical
# for XP SP2. Un-comment if your host allows htaccess MIME type overrides.

#AddType text/x-component .htc



# If your server is not already configured as such, the following directive
# should be uncommented in order to set PHP's register_globals option to OFF.
# This closes a major security hole that is abused by most XSS (cross-site
# scripting) attacks. For more information: http://php.net/register_globals
#
# To verify that this option has been set to OFF, open the Manager and choose
# Reports -> System Info and then click the phpinfo() link. Do a Find on Page
# for "register_globals". The Local Value should be OFF. If the Master Value
# is OFF then you do not need this directive here.
#
# IF REGISTER_GLOBALS DIRECTIVE CAUSES 500 INTERNAL SERVER ERRORS :
#
# Your server does not allow PHP directives to be set via .htaccess. In that
# case you must make this change in your php.ini file instead. If you are
# using a commercial web host, contact the administrators for assistance in
# doing this. Not all servers allow local php.ini files, and they should
# include all PHP configurations (not just this one), or you will effectively
# reset everything to PHP defaults. Consult www.php.net for more detailed
# information about setting PHP directives.

#php_flag register_globals Off



# For servers that support output compression, you should pick up a bit of
# speed by un-commenting the following lines.

#php_flag zlib.output_compression On
#php_value zlib.output_compression_level 5



# The following directives stop screen flicker in IE on CSS rollovers. If
# needed, un-comment the following rules. When they're in place, you may have
# to do a force-refresh in order to see changes in your designs.

#ExpiresActive On
#ExpiresByType image/gif A2592000
#ExpiresByType image/jpeg A2592000
#ExpiresByType image/png A2592000
#BrowserMatch "MSIE" brokenvary=1
#BrowserMatch "Mozilla/4.[0-9]{2}" brokenvary=1
#BrowserMatch "Opera" !brokenvary
#SetEnvIf brokenvary 1 force-no-vary
Дмитрий
13 ноября 2019, 17:01
0
Про часть кода с index.php я уже понял. Сразу туда заглянул, но не понял почему может быть такое. После твоих разъяснений стало понятно. Хотя возможно не в конфиге сервера дело.

Хотя не исключено, сейчас вспомнил, что на предыдущем сервере такого не было. Но там случался какой-то др. глюк, хостер перенес мой аккаунт на др. сервер. Может на этом сервере теперь уже другой глюк случается.

Вот скриншот:
Дмитрий
14 сентября 2019, 02:11
0
Ничего лучше не придумал, как сделать следующим образом.

id 38 — это основной раздел (родитель) всех разделов консультации.

{var $dlyaOnKons = $_modx->resource.dlyaOnlineKonsultacii}


    {var $id_DlyaOnKons = 'pdoResources'|snippet:[
      'parents' => 38,
      'includeTVs' => 'dlyaOnlineKonsultacii',	   
      'tpl' => '@INLINE {$id}',      
	  'where' => [ 
	  'dlyaOnlineKonsultacii:=' => $dlyaOnKons,
	  'AND:isfolder:=' => 1 
	  ]
    ]}

{$id_DlyaOnKons}

Покритикуйте…
Может можно сделать как-то менее ресурсоемко, а то 7 запросов к базе.
Дмитрий
30 апреля 2019, 01:27
+1
@tolanych по почте ответил:
Чтобы победить этот баг надо исследовать и протестировать все пограничные случаи как заморозка повлияет на тикеты и что надо будет еще пофиксить, т.е. займет какое-то время. По срокам ничего обещать не могу, на следующей неделе попробую выкроить время и разобраться.

Можешь себе пофиксить это поведение в этом фрагменте кода:

github.com/bezumkin/Tickets/blob/master/core/components/tickets/model/tickets/ticket.class.php#L621

убрать в условии
"$new_parent ||"

но на тестовом сервере на свой страх и риск, т.к. не просто так Василий это условие ставил, и значит есть вероятность, что что-то сломается.

Я пофиксил и оказалось, что уудалить в условии только лишь вышеуказанную часть условия недостаточно, поэтому я удалил еще и:
$this->isDirty('published') ||

То есть не удалил, а убрал пока из условия эти части условия, закомментировав их:
if (/*$new_parent ||*/ $this->isDirty('alias') || /*$this->isDirty('published') ||*/ ($this->get('uri_override') && !$this->get('uri'))) {
Теперь вроде все нормально и замороженный URL не меняется. Да и по моему ничего не сломалось.

Надеюсь что @tolanych, как и обещал, проверит все и разберется, как будет время.

Не поборол пока ошибку:
...../core/xpdo/om/xpdoquery.class.php: 764) Encountered empty IN condition with key id
Однако @tolanych посоветовал:
… попробуй в сист настройках MODX установи уровень логирования на максимальный: log_level = 4
Мб повезет и в лог запишутся действия или запросы предшествующие этой ошибке.
Эта ошибка, я так понимаю, не общая, а только у меня на одном сайте, поэтому буду искать причины.
Дмитрий
27 апреля 2019, 21:49
0
Хорошо бы… Написал @tolanych, а также Василию (@Василий Наумкин) просьбы о помощи.
Возможно помощь уже близко :))
Дмитрий
23 апреля 2019, 19:05
0
Неужели никто не знает в чем может быть проблема. Ведь замороженный URL в Tickets не должен меняться.
Дмитрий
17 апреля 2019, 18:04
0
На другом сайте ошибки нет, но меняется замороженный URL при смене родительского ресурса.
Дмитрий
17 апреля 2019, 17:32
0
Так что же это может быть?
Где пустое значение?
Куда хоть копать, подскажите?