cronAbs

cronAbs

С нами с 30 мая 2023; Место в рейтинге пользователей: #7237
cronAbs
02 апреля 2025, 10:27
0
Сменил системную настройку cache_format с сериализации на PHP и заработало.
Странно то, что с сериализацией всё работало нормально.
cronAbs
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
cronAbs
14 марта 2025, 16:06
0
Добрый день, Оператор LIKE В строке не работает.

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

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

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


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

MODX Revolution 2.8.3-pl
cronAbs
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 раза или/ жмешь отправить, а потом только вводишь, зато хоть работает, пример выше.
cronAbs
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}
cronAbs
10 июля 2024, 17:03
0
Из примера сниппета title можно сделать [[+pagetitle:title]] или {$_pls['pagetitle']|title}, на крайний случай экранировать [[+pagetitle:esc]]
cronAbs
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/ нельзя, так как это временная папка, которая очищается.
cronAbs
27 мая 2024, 14:06
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;
    }
}
?>
cronAbs
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;
    }
}
?>
cronAbs
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
Запись в базу работает, но в журнале эта запись. Кто-то уже сталкивался с этим нюансом?
cronAbs
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)
Как выбрать текстовый редактор?
cronAbs
28 марта 2024, 16:49
0
Добрый день, прикрутите возможность поиска товаров по ТВ/значению
cronAbs
14 февраля 2024, 10:34
0
Плохая практика отвечать вопросом на вопрос. Артур, пожалуйста пишите по существу! У нас версия старая: MODX Revolution 2.8.3-pl.
cronAbs
07 февраля 2024, 15:17
0
Тоже столкнулись с этим вопросом. Функция getConditions пишет оповещения про метод, который вызывается, но не существует в классе, зачем тогда этот несуществующий подсчёт и может быт это решается просто условием если count > 0, то вызывать этот метод или напросто после обновления метод убрали, а из класса убрать забыли?
cronAbs
30 декабря 2023, 13:07
0
А с такой ошибкой не кто не сталкивался?
/core/components/seofilter/model/seofilter/sfcount.class.php : 496) [SeoFilter] Counting error: Method "getMsProductConditions" not exists in class "sfCountHandler ".
cronAbs
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>
cronAbs
13 декабря 2023, 16:19
0
В феноме чанка tpl.yandexMaps надо заменить счетчик.
{include ++$count}
на
{var $count = ++$count}