cronAbs

cronAbs

С нами с 30 мая 2023; Место в рейтинге пользователей: #1008
02 апреля 2025, 10:27
0
Сменил системную настройку cache_format с сериализации на PHP и заработало.
Странно то, что с сериализацией всё работало нормально.
01 апреля 2025, 17:47
0
Тоже не нашлось решения, лаг настроек с php или mysql. Мол сохраняешь сниппет и батс, удаляешь папку кэша — работает, снова сохраняешь там чанк/сниппет, опять ошибка кэша.

<<< В настройках MySQL
query-cache-limit	        4194304	                1048576	                Изменено
query-cache-min-res-unit	8192	                4096	                Изменено
query-cache-size	        12582912	        1048576	                Изменено
query-cache-type	        ON	                OFF	                Изменено
table-definition-cache	        2000	                1400	                Изменено
table-open-cache	        200000	                2000	                Изменено
thread-cache-size	        900	                9	                Изменено
binlog-cache-size	        32768	                32768	                По умолчанию
binlog-stmt-cache-size	        32768	                32768	                По умолчанию
host-cache-size	                279	                279	                По умолчанию
innodb-disable-sort-file-cache	FALSE	                FALSE	                По умолчанию
innodb-ft-cache-size	        8000000	                8000000	                По умолчанию
innodb-ft-result-cache-limit	2000000000	        2000000000	        По умолчанию
innodb-ft-total-cache-size	640000000	        640000000	        По умолчанию
key-cache-age-threshold	        300	                300	                По умолчанию
key-cache-block-size	        1024	                1024	                По умолчанию
key-cache-division-limit	100	                100	                По умолчанию
max-binlog-cache-size	        18446744073709547520	18446744073709547520	По умолчанию
max-binlog-stmt-cache-size	18446744073709547520	18446744073709547520	По умолчанию
metadata-locks-cache-size	1024	                1024	                По умолчанию
query-cache-wlock-invalidate	FALSE	                FALSE	                По умолчанию
stored-program-cache	        256	                256	                По умолчанию
table-open-cache-instances	16	                16	                По умолчанию

<<< В настройках PHP
mysqli	                mysqli.rollback_on_cached_plink	        On
Zend OPcache	        opcache.enable	                        Off
Zend OPcache	        opcache.enable_cli	                Off
Zend OPcache	        opcache.file_cache_consistency_checks	Off
Zend OPcache	        opcache.file_cache_only	                Off
Zend OPcache	        opcache.interned_strings_buffer	        64
Zend OPcache	        opcache.max_accelerated_files	        150000
Zend OPcache	        opcache.memory_consumption	        512
Zend OPcache	        opcache.protect_memory	                On
Zend OPcache	        opcache.revalidate_freq	                1
Core	                realpath_cache_size	                4096K

Может есть у кого какой совет, как исправить такое кэширование?
a:2:{s:7:"expires";i:1746182659;s:7:"content";a:870:{s:23:"access_category_enabled";s:1:"1";s:22:"access_context_enabled";s:1:"1";s:29:"access_resource_group_enabled";s:1:"1";s:29:"allow_forward_across_contexts";s:1:"0";s:35:"allow_manager_login_forgot_password";s:1:"1";s:21:"allow_multiple_emails";s:1:"1";s:18:"allow_tags_in_post";s:0:"";s:12:"archive_with";s:0:"";s:14:"auto_menuindex";s:1:"1";s:22:"auto_check_pkg_updates";s:1:"1";s:35:"auto_check_pkg_updates_cache_expire";s:2:"15";s:15:"automatic_alias";s:1:"1";s:13:"base_help_url";s:37:"//rtfm.modx.com/display/revolution20/";s:15:"blocked_minutes";s:2:"60";s:16:"cache_action_map";s:1:"0";s:15:"cache_alias_map";s:1:"0";s:22:"cache_context_settings";s:1:"0";s:8:"cache_db";s:1:"0";s:16:"cache_db_expires";s:1:"0";s:16:"cache_db_session";s:1:"1";s:25:"cache_db_session_lifetime";s:6:"604800";s:13:"cache_default";s:1:"1";s:29:"automatic_template_assignment";s:6:"parent";s:13:"cache_expires";s:7:"2678400";s:12:"cache_format";s:1:"2";s:13:"cache_handler";s:13:"xPDOFileCache";s:13:"cache_lang_js";s:1:"0";s:20:"cache_lexicon_topics";s:1:"1";s:28:"cache_noncore_lexicon_topics";s:1:"0";s:14:"cache_resource";s:1:"1";s:22:"cache_resource_expires";s:4:"1500";s:13:"cache_scripts";s:1:"1";s:21:"cache_system_settings";s:1:"1";s:25:"clear_cache_refresh_trees";s:1:"1";s:12:"compress_css";s:1:"0";s:11:"compress_js";s:1:"0";s:21:"compress_js_max_files";s:2:"10";s:18:"confirm_navigation";s:1:"1";s:16:"container_suffix";s:0:"";s:17:"context_tree_sort";s:0:"";s:19:"context_tree_sortby";s:4:"rank";s:20:"context_tree_sortdir";s:3:"ASC";s:10:"cultureKey";s:2:"ru";s:13:"date_timezone";s:0:"";s:5:"debug";s:0:"";s:32:"default_duplicate_publish_option";s:9:"unpublish";s:20:"default_media_source";s:1:"1";s:16:"default_per_page";s:2:"20";s:15:"default_context";s:3:"web";s:16:"default_template";s:1:"0";s:20:"default_content_type";s:1:"1";s:15:"editor_css_path";s:0:"";s:20:"editor_css_selectors";s:0:"";s:12:"emailsubject";s:33:"Your login details is 5.16.33.153";s:15:"enable_dragdrop";s:1:"1";s:10:"error_page";s:2:"15";s:21:"failed_login_attempts";s:1:"5";s:14:"fe_editor_lang";s:2:"en";s:14:"feed_modx_news";s:22:"feed_modx_news_enabled";s:1:"0";s:18:"feed_modx_security";s:66:"https://community.modx.com/c/announcements/security-notices/26.rss";s:26:"feed_modx_security_enabled";s:1:"0";s:16:"filemanager_path";s:0:"";s:25:"filemanager_path_relative";s:1:"1";s:15:"filemanager_url";s:0:"";s:24:"filemanager_url_relative";s:1:"1";s:18:"forgot_login_email";s:591:" Hello [[+username]], A request for a password reset has been issued for your MODX user. If you sent this, you may follow this link and use this password to login. If you did not send this request, please ignore this email. Activation Link: [[+url_scheme]][[+http_host]][[+manager_url]]?modahsh=[[+hash]] Username: [[+username]] Password: [[+password]] After you log into the MODX Manager, you can change your password again, if you wish. Regards, Site Administrator
14 марта 2025, 16:06
0
Добрый день, Оператор LIKE В строке не работает.

Задаём условие в Настройках предложений по полю pagetitle определяем оператор LIKE %то, что содержится в заголовке%, но ничего не находит.

Подскажите может, где-то в компоненте строчку заменить?
28 января 2025, 17:03
0
Добрый день, а как сделать посадочную страницу по нескольким значениям одной опции одновременно?
11 декабря 2024, 11:13
0
Спасибо добрейшее. А тип поля «Текстовая область», как-то можно сменить на TinyMCE RTE?
06 декабря 2024, 14:06
0
Здравствуйте, хотели опробовать, но при установке пакета ошибка:
[CronTabManager] Не удалось найти политику доступа CronTabManagerPolicy!

При этом пакет успешно установлен:


Печалька. Политика доступа не создалась.

MODX Revolution 2.8.3-pl
04 декабря 2024, 12:05
0
Нужно проверять метод save в файле assets/components/tickets/js/web/default.js
Там лаг с label id и input id и как раз если убрать из label id, то и произойдёт ошибка. Конечно если важно, чтобы валидатор был без ошибок, то нужно добавить class и в скрипте поменять "#" на "."
// Чанк с формой
<label for="comment-captcha" class="comment-captcha"[[-id="comment-captcha"]]>[[+captcha]]</label>
<input type="text" name="captcha" value="" id="comment-captcha" class="form-control" />
// Метод save
save: function (form, button) {
    $(form).ajaxSubmit({
        data: {action: 'comment/save'},
        url: TicketsConfig.actionUrl,
        form: form,
        button: button,
        dataType: 'json',
        beforeSubmit: function () {
            clearInterval(window.timer);
            $('.error', form).text('');
            $(button).attr('disabled', 'disabled');
            return true;
        },
        success: function (response) {
            form = '#comment-form';
            $(button).removeAttr('disabled');
            $(document).trigger('tickets_comment_save', response);
            if (response.success) {
                Tickets.forms.comment(false);
                $('input[name="captcha"]', form).val('');
                $('#comment-preview-placeholder').html('').hide();
                $('#comment-editor', form).val('');
                $('.ticket-comment .comment-reply a').show();

                // autoPublish = 0
                if (!response.data.length && response.message) {
                    Tickets.Message.info(response.message);
                }
                else {
                    Tickets.comment.insert(response.data.comment);
                    Tickets.utils.goto($(response.data.comment).attr('id'));
                }

                Tickets.comment.getlist();
                prettyPrint();
            }
            else {
                var cap = $('#comment-form-placeholder label[for=comment-captcha]').text().replace(/[^0-9+]/gi, '');
                if (cap.indexOf('+') > 0 ) {
                    numbers = cap.split('+');
                } else {
                    numbers = cap.split('-');
                }
                var sum = numbers.reduce(function(a, b) {
                    return parseInt(a) + parseInt(b);
                }, 0);
                
                if (response.data && $('input[name="captcha"]', form).val() != sum) {
                    Tickets.Message.error(response.message);
                    var errors = [];
                    var i, field;
                    for (i in response.data) {
                        field = response.data[i];
                        var elem = $(form).find('[name="' + field.field + '"]').parent().find('.error');
                        if (!elem.length) {
                            elem = $(form).find('.' + field.field + '-error');
                        }
                        if (elem.length) {
                            elem.text(field.message)
                        }
                        else if (field.field && field.message) {
                            errors.push(field.field + ': ' + field.message);
                        }
                    }
                    if (errors.length) {
                        Tickets.Message.error(errors.join('
'));
                    }
                    $('input[name="captcha"]', form).val('');
                }
            }
            if (response.data.captcha) {
                $('.comment-captcha', form).text(response.data.captcha);
            }
        }
        
    });
    return false;
},

К слову: Только вот непонятно почему после этих изменений отправляется только после второго раза, как жмешь кнопку отправить. То есть приходится вводить капчу 2 раза или/ жмешь отправить, а потом только вводишь, зато хоть работает, пример выше.
06 ноября 2024, 11:13
0
MODX Revolution 2.8.3-pl
87.include.cache.php — Плагин: webpgenerator (87)

[2024-11-06 11:08:33] (ERROR @ /var/www/www-root/data/www/site.ru/core/components/webpgenerator/classes/ImageConverter.php : 145) PHP warning: exif_imagetype(/var/www/www-root/data/www/site.ru/assets/components/phpthumbof/cache/7040%2821%29.0211e0a20652fcdffc397d1f517afe76.jpg): failed to open stream: No such file or directory
[2024-11-06 11:08:33] (ERROR @ /var/www/www-root/data/www/site.ru/core/components/webpgenerator/classes/ImageConverter.php : 147) PHP warning: array_key_exists(): The first argument should be either a string or an integer
[2024-11-06 11:08:33] (ERROR @ /var/www/www-root/data/www/site.ru/core/components/webpgenerator/elements/plugins/plugin.webpgenerator.php : 143) User warning: InvalidArgumentException: Cannot detect /var/www/www-root/data/www/site.ru/assets/components/phpthumbof/cache/7040%2821%29.0211e0a20652fcdffc397d1f517afe76.jpg extension in /var/www/www-root/data/www/site.ru/core/components/webpgenerator/classes/ImageConverter.php:148
Stack trace:
#0 /var/www/www-root/data/www/site.ru/core/components/webpgenerator/classes/ImageConverter.php(43): ImageConverter->getRealExtension('/var/www/www-ro...')
#1 /var/www/www-root/data/www/site.ru/core/components/webpgenerator/classes/ImageConverter.php(33): ImageConverter->loadImage('/var/www/www-ro...')
#2 /var/www/www-root/data/www/site.ru/core/components/webpgenerator/elements/plugins/plugin.webpgenerator.php(141): ImageConverter->convert('/var/www/www-ro...', '/var/www/www-ro...', 95)
#3 /var/www/www-root/data/www/site.ru/core/cache/includes/elements/modplugin/87.include.cache.php(2): include_once('/var/www/www-ro...')
#4 /var/www/www-root/data/www/site.ru/core/model/modx/modscript.class.php(76): include('/var/www/www-ro...')
#5 /var/www/www-root/data/www/site.ru/core/model/modx/modx.class.php(1674): modScript->process(NULL)
#6 /var/www/www-root/data/www/site.ru/core/model/modx/modresponse.class.php(83): modX->invokeEvent('OnWebPagePreren...')
#7 /var/www/www-root/data/www/site.ru/core/model/modx/modrequest.class.php(138): modResponse->outputContent(Array)
#8 /var/www/www-root/data/www/site.ru/core/model/modx/modrequest.class.php(122): modRequest->prepareResponse()
#9 /var/www/www-root/data/www/site.ru/core/model/modx/modx.class.php(1461): modRequest->handleRequest()
#10 /var/www/www-root/data/www/site.ru/index.php(54): modX->handleRequest()
#11 {main}
10 июля 2024, 17:03
0
Из примера сниппета title можно сделать [[+pagetitle:title]] или {$_pls['pagetitle']|title}, на крайний случай экранировать [[+pagetitle:esc]]
27 июня 2024, 18:41
0
Вы можете не использовать MinifyX для некоторых компонентов, например ms2. Для этого надо унаследовать класс miniShop2 вместе с методом initialize(), и там где вызывается regClientScript() указать скрипт статично, далее обвернуть его каким-нибудь условием, например для определённых страниц или шаблонов, чтобы не боятся за то, что при обновлении что-то затрётся.

// Пример версионности статичного файла.
public function initialize($ctx = 'web', $scriptProperties = array())
{
    ...
        // Register JS
        $js = trim($this->modx->getOption('ms2_frontend_js'));
        if (!empty($js) && preg_match('/\.js/i', $js)) {
            $jsFile = 'assets/components/minishop2/js/web/minishop.js';
            $jsFileSize = filesize($_SERVER['DOCUMENT_ROOT'].'/'.$jsFile);
            $this->modx->regClientScript($jsFile.'?v='.$jsFileSize);
            ...
        }
    ...
}
miniShop2Config, а также можно обвернуть в условие. Или как в примере выше добавить конфиги.

По поводу
и продолжает сохранять файлы в /assets/minifyx/ хотя указано /assets/cache/
Тут лучше дождаться ответа разработчика, так как путь assets/components/minifyx/cache обычно идёт по умолчанию, возможно погрешность с вашей стороны или установлен кэш. Логируйте ошибки в журнал и смотрите, что там не так. Да, и ещё указывать из /assets/cache/ нельзя, так как это временная папка, которая очищается.
27 мая 2024, 14:06
1
0
А вот этот код, передаёт нормально через конфиг:
<?php
class msCartCustomHandler extends msCartHandler {
    /**
    * msCartCustomHandler constructor.
    *
    * @param miniShop2 $ms2
    * @param array $config
    */
    public function __construct(miniShop2 $ms2, array $config = array())
    {
        $this->ms2 = $ms2;
        $this->modx = $ms2->modx;

        $cityFields = $this->modx->getService('cityfields','cityFields', $this->modx->getOption('cityfields.core_path', null, $this->modx->getOption('core_path').'components/cityfields/').'model/cityfields/');
        if ($cityFields instanceof cityFields) {
            if (!empty($cityFields->currentCityId)) {
                $currentCityId = $cityFields->currentCityId;
            }
            
        }
        $this->config = array_merge(array(
            'currentCityId' => $currentCityId,
            'cart' => & $_SESSION['minishop2']['cart'],
            'max_count' => $this->modx->getOption('ms2_cart_max_count', null, 1000, true),
            'allow_deleted' => false,
            'allow_unpublished' => false,
        ), $config);

        $this->cart = &$this->config['cart'];
        $this->modx->lexicon->load('minishop2:cart');

        if (empty($this->cart) || !is_array($this->cart)) {
            $this->cart = array();
        }
    }
    
   /**
     * @param array $data
     *
     * @return array
     */
    public function status($data = array())
    {
        $status = [
            'total_count' => 0,
            'total_cost' => 0,
            'total_weight' => 0,
            'total_discount' => 0,
            'total_positions' => count($this->cart),
        ];
        foreach ($this->cart as $item) {
            if (empty($item['ctx']) || $item['ctx'] == $this->ctx) {
                $status['total_count'] += $item['count'];
                $status['total_cost'] += $item['price'] * $item['count'];
                $status['total_weight'] += $item['weight'] * $item['count'];
                $status['total_discount'] += $item['discount_price'] * $item['count'];
            }
        }

        $status = array_merge($data, $status);

        $response = $this->ms2->invokeEvent('msOnGetStatusCart', [
            'status' => $status,
            'cart' => $this,
        ]);
        if ($response['success']) {
            $status = $response['data']['status'];
        }
        $this->modx->log(1, print_r($this->config['currentCityId'], 1));

        return $status;
    }
}
?>
27 мая 2024, 11:11
0
Не получается присоединить конструктор, а при вызове someMethod() ошибка 500.
<?php
class msCartCustomHandler extends msCartHandler {
    public function __construct(modX & $modx, array $config = array()) {
        parent::__construct($modx, $config);
        // Ваш код инициализации здесь
    }

    public function someMethod() {
        // Пример вызова метода getService
        $cityFields = $this->modx->getService('cityfields','cityFields', $this->modx->getOption('cityfields.core_path', null, $this->modx->getOption('core_path').'components/cityfields/').'model/cityfields/');
        
        if ($cityFields instanceof cityFields) {
            // Использование методов компонента
            return $cityFields->currentCityId();
        }
    }
	
    /**
     * @param array $data
     *
     * @return array
     */
    public function status($data = array())
    {
        $status = [
            'total_count' => 0,
            'total_cost' => 0,
            'total_weight' => 0,
            'total_discount' => 0,
            'total_positions' => count($this->cart),
        ];
        foreach ($this->cart as $item) {
            if (empty($item['ctx']) || $item['ctx'] == $this->ctx) {
                $status['total_count'] += $item['count'];
                $status['total_cost'] += $item['price'] * $item['count'];
                $status['total_weight'] += $item['weight'] * $item['count'];
                $status['total_discount'] += $item['discount_price'] * $item['count'];
            }
        }

        $status = array_merge($data, $status);

        $response = $this->ms2->invokeEvent('msOnGetStatusCart', [
            'status' => $status,
            'cart' => $this,
        ]);
        if ($response['success']) {
            $status = $response['data']['status'];
        }
        $this->modx->log(1, print_r($this->someMethod(), 1));

        return $status;
    }
}
?>
13 мая 2024, 11:21
0
[2024-05-13 11:18:51] (ERROR @ Unknown0) PHP warning: Unknown: Cannot call session save handler in a recursive manner
Запись в базу работает, но в журнале эта запись. Кто-то уже сталкивался с этим нюансом?
07 мая 2024, 11:38
0
MODX Revolution 2.8.3-pl
Ace 1.9.4-pl
При выборе ACE ошибка:
Uncaught TypeError: Cannot read properties of null (reading 'match')
    at a.$detectNewLine (ace.min.js?v=2.9.3-pl:1:120718)
    at a.insert (ace.min.js?v=2.9.3-pl:1:122464)
    at a.setValue (ace.min.js?v=2.9.3-pl:1:120356)
    at p.setValue (ace.min.js?v=2.9.3-pl:1:153026)
    at S.setValue (modx.texteditor.js?v=2.9.3-pl:185:38)
    at constructor.setValues (ext-all.js:21:603600)
    at miniShop2.panel.UpdateCategory.setup (modx.panel.resource.js?v=2.9.3-pl:57:28)
    at h.Event.fire (ext-all.js:21:3699)
    at miniShop2.panel.UpdateCategory.fireEvent (ext-all.js:21:687)
    at MODx.FormPanel [as constructor] (modx.panel.js:62:14)
Как выбрать текстовый редактор?
28 марта 2024, 16:49
0
Добрый день, прикрутите возможность поиска товаров по ТВ/значению
14 февраля 2024, 10:34
0
Плохая практика отвечать вопросом на вопрос. Артур, пожалуйста пишите по существу! У нас версия старая: MODX Revolution 2.8.3-pl.
07 февраля 2024, 15:17
0
Тоже столкнулись с этим вопросом. Функция getConditions пишет оповещения про метод, который вызывается, но не существует в классе, зачем тогда этот несуществующий подсчёт и может быт это решается просто условием если count > 0, то вызывать этот метод или напросто после обновления метод убрали, а из класса убрать забыли?
30 декабря 2023, 13:07
0
А с такой ошибкой не кто не сталкивался?
/core/components/seofilter/model/seofilter/sfcount.class.php : 496) [SeoFilter] Counting error: Method "getMsProductConditions" not exists in class "sfCountHandler ".
28 декабря 2023, 17:28
0
Не работает, ругается на конкретный код в переменной var:
<script type="text/javascript">
    if (typeof(xLikeCls) == "undefined") {
        var xLikeCls = new xLike({"actionUrl":"\/assets\/components\/xlike\/action.php"});
    }
</script>
13 декабря 2023, 16:19
0
В феноме чанка tpl.yandexMaps надо заменить счетчик.
{include ++$count}
на
{var $count = ++$count}