Всего 123 797 комментариев

Николай Савин
06 декабря 2023, 14:48
0
Вероятно у автора сама авторизация слетает, а не страница
Руслан Алеев
06 декабря 2023, 12:16
0
Здравствуйте, а вроде не слетает путь при обновлении, MODX важна папка core при обновлении, и то ее можно указать свою, если установщик не найдет.
Наумов Алексей
06 декабря 2023, 11:02
1
+1
Почитайте теперь здесь:
docs.modx.pro/components/minishop2/development/events

Вот реально там в первом же примере написано, что нужно сделать.
Giant Dad
06 декабря 2023, 09:38
0
А как вернуть из плагина ошибку? Положим, мне нужно проверить для товара его свойство amount и не добавлять в корзину больше, чем указано в этом свойстве
Giant Dad
06 декабря 2023, 09:38
0
Спасибо. А как вернуть из плагина ошибку? Положим, мне нужно проверить для товара его свойство amount и не добавлять в корзину больше, чем указано в этом свойстве
Павел
06 декабря 2023, 09:18
0
Спасибо, помогло. Конечный вариант, если кому понадобится (добавил пробел после запятой)
{foreach $options as $name => $values}
    <li><span class="title"><b>{('ms2_product_' ~ $name) | lexicon}</b>:</span><span class="option">{if $values is array}{$values | join : ', '} {else}{$values}{/if}</span></li>
{/foreach}
Володя
06 декабря 2023, 08:58
+1
docs.modx.pro/components/pdotools/parser#vstroennye-modifikatory
join — объединяет элементы массива в строку, используя первый параметр в качестве соединителя (по умолчанию ,).
{if $values is array} 
    {$values | join}
{else}
    {$values}
{/if}
Viktor
06 декабря 2023, 08:12
0
Разобрался!
Проблемма была в параметре ресайза

Было: w=1920&h=1440&zc=1&q=85&fltr=wmi|/assets/img/wt-big.png|C|30
Стало: w=1920&h=1440&zc=1&q=85&fltr[]=wmi|/assets/img/wt-big.png|C|30

Теперь всё работает!
Артур Шевченко
05 декабря 2023, 22:10
0
Не знаю, надо логгировать процесс.
Артур Шевченко
05 декабря 2023, 21:36
1
+1
А почему именно в классе-обработчике, почему не в плагине?
Евгений Webinmd
05 декабря 2023, 16:55
0
500 пишет текст ошибки в логи сервера, а не MODX, посмотрите что там за ошибка
Возможно проблема еще в версии PHP — на 8 версии не тестировалось
Viktor
05 декабря 2023, 16:41
0
Не генерируется картинка — для ресурсов!



modx 2.8.6
php 8.2.11

Ошибки в консоли:
Failed to load resource: the server responded with a status of 500 () /assets/components/mixedimage/connector.php:1

В журнале ошибок:

[2023-12-05 16:35:59] (ERROR @ /home/867487654/www/site.ru/core/components/mixedimage/elements/tv/input/mixedimage.class.php: 44) PHP warning: Undefined array key «showValue»
Viktor
05 декабря 2023, 16:24
0
Спасибо! Всё работает
Сергей Карпович
05 декабря 2023, 13:49
0
Почему может не отрабатывать параметр spamProtection?
В вызове он включен, но приходит спам, если посмотреть форму через FormIT, то там поле aflsecret пустое, как понимаю, форма не должна отправляться если оно пустое?
Володя
05 декабря 2023, 12:24
0
вероятно можно. Под рукой нет mFiter2.
deleted
05 декабря 2023, 12:12
0
При попытке применить их на моем сайте выплыли проблемы:
1. Redirector не позволял создать редирект на произвольный url, он обязательно хотел видеть в качестве цели существующий ресурс. А мне так не нужно было, у меня страницы генерируются своим плагином, обрабатывающим событие OnPageNotFound, т.е. целевого ресурса как такового на сайте нет.
2. autoRedirector больше заточен на отслеживание измененных url, ну и у него та же особенность — конечный url редиректа должен принадлежать существующему ресурсу.
Есть ещё Seo Suite. Не знаю, есть ли там такие проблемы
Володя
05 декабря 2023, 12:10
0
попробуйте заменить на этот плагин. там добавлен iterator_to_array для $modx->getIterator
<?php
$resourceEvents = array('OnBeforeDocFormSave', 'OnDocFormSave');
if (in_array($modx->event->name, $resourceEvents)) {
    foreach($scriptProperties as & $object){
        if(
            is_object($object)
            AND $object instanceof modResource
            AND $original = $modx->getObject('modResource', $object->id)
        ){
            $resource = $object;
            break;
        }
    }
}
switch ($modx->event->name) {
    case "OnManagerPageInit":
        $cssFile = MODX_ASSETS_URL.'components/autoredirector/css/mgr/main.css';
        $modx->regClientCSS($cssFile);
        break;

    case "OnBeforeDocFormSave":
        $resources = array(
            $resource,
            $modx->getObject('modResource',$resource->get('parent'))
        );
        if($child_ids = $modx->getChildIds($resource->id,50,array('context' => $resource->context_key))){
            $resources = array_merge($resources, iterator_to_array($modx->getIterator('modResource',array("id:IN" => $child_ids))));
        }
    case "OnResourceBeforeSort":
        if (empty($resources)) {
            foreach ($nodes as $node) {
                $resources[] = $modx->getObject('modResource',$node['id']);
            }
        }
        foreach ($resources as $res) {
            if (!empty($res)) {
                if (!$res->getProperty('old_uri','autoredirector')) {
                    $res->setProperty('old_uri',$res->get('uri'),'autoredirector');
                    $res->save();
                }
            }
        }
        break;
    case "OnDocFormSave":
        $resources = array(
            $resource,
            $modx->getObject('modResource',$resource->get('parent'))
        );
        if($child_ids = $modx->getChildIds($resource->id,50,array('context' => $resource->context_key))){
            $resources = array_merge($resources, iterator_to_array($modx->getIterator('modResource',array("id:IN" => $child_ids))));
        }
    case "OnResourceSort":
        if (empty($resources)) {
            foreach ($nodesAffected as $node) {
                $resources[] = $node;
            }
        }
        $modelPath = $modx->getOption('autoredirector_core_path',null,$modx->getOption('core_path').'components/autoredirector/').'model/';
        $modx->addPackage('autoredirector', $modelPath);
        $processorProps = array('processors_path' => $modx->getOption('autoredirector_core_path',null,$modx->getOption('core_path').'components/autoredirector/').'processors/');
        foreach ($resources as $res) {
            if (!empty($res)) {
                $old_uri = $res->getProperty('old_uri','autoredirector');
                $current_uri = $res->getAliasPath($res->get('alias'));
                if ($old_uri && $current_uri != $old_uri) {
                    $currentRuleQ = array('uri' => $current_uri);
                    if (!$modx->getOption('global_duplicate_uri_check')) {
                        $currentRuleQ['context_key'] = $res->get('context_key');
                    }
                    if ($currentRule = $modx->getObject('arRule', $currentRuleQ)) {
                        $response = $modx->runProcessor('mgr/item/remove', $currentRule->toArray(), $processorProps);
                        if ($response->isError()) {
                            $modx->log(modX::LOG_LEVEL_ERROR, 'AutoRedirector removing error. Message: '.$response->getMessage());
                        }
                    }
                    $arRule = array('uri' => $old_uri
                                    , 'context_key' => $res->get('context_key')
                                    , 'res_id' => $res->get('id'));
                    if (!$modx->getObject('arRule', $arRule)) {
                        $response = $modx->runProcessor('mgr/item/create', $arRule, $processorProps);
                        if ($response->isError()) {
                            $modx->log(modX::LOG_LEVEL_ERROR, 'AutoRedirector creating error. Message: '.$response->getMessage());
                        }
                    }
                }
                $res->setProperty('old_uri',$current_uri,'autoredirector');
                $res->save();
            }
        }
        break;
    case "OnPageNotFound":
        $uri = $_SERVER['REQUEST_URI'];
        $uri = str_replace($modx->getOption("site_url"),"",$uri);
        if (substr($uri, 0, 1) == "/") $uri = substr($uri, 1);
        $getparams = '';
        if (mb_strpos($uri,'?') !== FALSE) {
            $uri_split = explode('?',$uri);
            $uri = $uri_split[0];
            if(!$modx->getOption("autoredirector_clear_get",null, 0)) {
                $getparams = $uri_split[1];
            }
        }
        $uri = urldecode($uri);

        $RuleQ = array('uri' => $uri);
        if (!$modx->getOption('global_duplicate_uri_check')) {
            $RuleQ['context_key'] = $modx->context->get('key');
        }
        $modelPath = $modx->getOption('autoredirector_core_path',null,$modx->getOption('core_path').'components/autoredirector/').'model/';
        $modx->addPackage('autoredirector', $modelPath);
        if ($Rule = $modx->getObject('arRule', $RuleQ)) {
            if ($url = $modx->makeUrl($Rule->get('res_id'),'',$getparams)) {
                $modx->sendRedirect($url,array('responseCode' => 'HTTP/1.1 301 Moved Permanently'));
            }
        }
        break;
}
Giant Dad
05 декабря 2023, 12:01
0
Прошу прощения, изначально вопрос был некорректно сформулирован. Можно ли сделать сортировку по ajax (по кнопке Сортировать по цене) таким образом, чтобы товары с нулевой ценой всегда были в конце выдачи?