Всего 112 162 комментария

Algirdas
34 минуты назад
0
Проблема в том, что это не мой код, я его взял на просторах интернета. Сам я писать вообще не умею. И в оригинале там так и было:

$tv = $resource->getTVValue($tvname);
Но в таком случае у меня выдает ошибку:

Fatal error: Uncaught Error: Call to a member function getTVValue() on null in C:\bla-bla\core\cache\includes\elements\modsnippet\34.include.cache.php:11 Stack trace: #0 C:\bla-bla\core\model\modx\modscript.class.php(76): include() #1 C:\bla-bla\core\model\modx\modparser.class.php(537): modScript->process(NULL) #2 C:\bla-bla\core\components\pdotools\model\pdotools\pdoparser.class.php(273): modParser->processTag(Array, true) #3 C:\bla-bla\core\model\modx\modparser.class.php(251): pdoParser->processTag(Array, true) #4 C:\bla-bla\core\components\pdotools\model\pdotools\pdoparser.class.php(65): modParser->processElementTags('', '<!DOCTYPE html>...', true, false, '[[', ']]', Array, 9) #5 C:\bla-bla\core\model\modx\modresource.class.php(546): pdoParser->processElementTags('', '<!DOCTYPE html>...', true, false, '[[', ']]', Array, 10) #6 C:\bla-bla\core\model\modx\modresou in C:\bla-bla\core\cache\includes\elements\modsnippet\34.include.cache.php on line 11
Павел Гвоздь
Сегодня в 05:10
0
Учитывая, что у вас помимо Tickets на сайте ещё что-то есть, стоило бы удостовериться точно, что в нём дело. А по поводу «как решить», если в Тикетс дело, то доработать Тикетс в том месте, где он затирает неугодные ему properties. Но мне больше интересно, почему свойство «ms2gallery» остаётся на месте…
Артур
Вчера в 22:33
0
Ну ты же получил объект ресурса в переменную, чтобы получить значение ТВ надо делать так $resource->getTVValue(tvname); А $modx->resource->getTVValue получает значение ТВ ресурса в котором ты вызываешь сниппет. И лучше конечно делать запрос в БД через newQuery и сразу получать сумму, а не вот это вот всё. Твой код прям сильно неоптимальный.
Shedko
Вчера в 00:16
0
OK. c pdo — все норм, но как отловить
[2021-07-23 23:56:45] (ERROR @ /home/***/public_html/core/model/modx/modparser.class.php : 541) Could not find snippet with name Рассрочка под 0%.
да понимаю, что это парень-«набивщик» который наполняет сайт заказанными текстами ошибся где-то в скобках, но ИМХО как-то не очень удачно (опять же по моему мнению) сделан лог ошибок — не видно где ошибка, если вызов чанков/снипетов.
добавил доп поля вывода в логах в
case E_STRICT:
но не уверен, что эта ошибка там «отметится»
Дима Сайт
23 июля 2021, 20:57
0
@Наумов Алексей, спасибо, отличный пример!
Не занудства ради, ибо сам не привыкну никак, но хочется уточнить что в «новом модном JS» принято неизменяемые переменные объявлять через const, то есть:
const override_field ... const enabled ... const available ... const override_fields
А изменяемые, если им не нужна глобальная область видимости, через
let tmp;
Andrey
23 июля 2021, 19:11
0
Можно по условию дебажить прямо в сниппете с выводом различных данных. Что-то такое добавить в pdopage:
if (!is_int($scriptProperties['limit']) || $scriptProperties['limit'] < 1) {
    $modx->log(MODX_LOG_LEVEL_ERROR, 'Ошибка pdopage. Параметр limit содержит: [' . $scriptProperties['limit'] . ']. В ресурсе: ' . $modx->resource->get('id'));
}
В общем, можно поиграться по-всякому.
Shedko
23 июля 2021, 17:59
0
Огромное спасибо.
Теперь хоть будет понятно где искать.

в файле \core\model\modx\error\moderrorhandler.class.php

case E_WARNING:
                $handled= true;
                $errmsg= 'PHP warning: ' . $errstr;
                $this->modx->log(modX::LOG_LEVEL_ERROR, $errmsg, '', '', $errfile, $errline);
                break;
поменял на
case E_WARNING:
                $handled= true;
                $errmsg= 'PHP warning: ' .  $this->modx->resource->get('id') . ' ' . $errstr;
                $this->modx->log(modX::LOG_LEVEL_ERROR, $errmsg, '', '', $errfile, $errline);
                break;
и да теперь хоть вижу на какой странице искать ошибку/опечатку.

в первой попавшейся было
[[pdoPage? &element=`msProducts`&parents=`26` &limit='250' &sortby=`{"menuindex":"asc"}` ]]`]]
т.е. не кавычки в limit=
Andrey
23 июля 2021, 17:39
1
+1
Ну, можно побаловаться с выводом в журнал… Вот вывод id ресурса, например:
$modx->log(MODX_LOG_LEVEL_ERROR, $modx->resource->get('id'));
Можно с пояснительным текстом:
$modx->log(MODX_LOG_LEVEL_ERROR, 'ID ресурса: ' . $modx->resource->get('id'));
Shedko
23 июля 2021, 16:59
0
Проблема в том что:


Да это число можно уменьшить в разы, тут считает все вызовы pdoPage даже в снипетах, но число зашкаливает все равно.

Потому и хотелось бы узнать страницу(ы) источник ошибки.
Andrey
23 июля 2021, 16:43
0
В вызове pdopage посмотрите не стоит ли в лимите 0.
Наумов Алексей
23 июля 2021, 16:38
0
{$_modx->runSnippet('mapexMap', [
		'resource' => '8',
               'tvName' => 'ИМЯ ВАШЕГО TV ПОЛЯ',
		'width' => '100%',
		'height' => '460px',
		'mapId' => 'mapexMap1'
])}
Сергей
23 июля 2021, 16:05
0
Подскажите код на fenom если поле с карты заполнено на другом ресурсе.
Так не работает
{$_modx->runSnippet('mapexMap', [
		'map' => $_modx->resource.karta,
		'resource' => '8',
		'width' => '100%',
		'height' => '460px',
		'mapId' => 'mapexMap1'
])}
Shedko
23 июля 2021, 15:33
0
Спасибо за ответы.

Но есть нюанс — уж больно много страниц и не понимаю как отследить на какой странице и в каком чанке/снипете эта(и) ошибки.

Можно ли как-то в логи об ошибках MODX добавить URI источника ошибки?
Наумов Алексей
23 июля 2021, 12:40
0
Если исходные фото большие — то ms2Gallery может пережимать их на стороне клиента и фактически на сервер придет уже другой файл, в этом разница при загрузке через API и через интерфейс.

А почему думает что дубли… наверное алгоритм так срабатывает) Эту проверку можно выключить в настройках.
Columb
23 июля 2021, 11:45
0
Добрый день, Павел! Спасибо, что откликнулись! Вы совершенно правы — Tickets после публикации отредактированного ресурса перезаписывает properties, удаляя запись парсера

1. properties tickets при создании (не опубликован)
{"tickets":{"disable_jevix":true,"process_tags":false,"was_published":false},"xpUnique":"a128300e31a340c3bb649bb25f3b7d1d9fc0b2c4","xpTask":"203","ms2gallery":{"media_source":"3"}}
2. properties tickets после редактирования (не опубликован)
{"tickets":{"disable_jevix":true,"process_tags":false,"was_published":false},"xpUnique":"a128300e31a340c3bb649bb25f3b7d1d9fc0b2c4","xpTask":"203","ms2gallery":{"media_source":"3"}}
3. properties tickets после редактирования (опубликован)
{"tickets":{"disable_jevix":true,"process_tags":false},"ms2gallery":{"media_source":"3"}}

«Виновник» найден, но как решить данную проблему? Очень бы хотелось «подружить» между собой Tickets и xParser
Тодор
23 июля 2021, 11:34
0
тоесть не пустой, а такой
Array(
    [success] => 
    [message] => Такое изображение уже есть в галерее товара.
    [total] => 0
    [errors] => Array(        )
    [object] => Array(        )
)
Тодор
23 июля 2021, 11:09
0
да ето код пример )
у 2-4 такой масив,
Array
    [success] => 
    [message] => Такое изображение уже есть в галерее товара.
    [total] => 0
    [errors] => Array(        )
    [object] => Array(        )
)
а у остальних
Array(
    [success] => 1
    [message] => 
    [total] => 0
    [errors] => Array(        )
    [object] => Array(
        [id] => 15637
        [product_id] => 2017
        [source] => 2
        [parent] => 0
        [name] => 8926e70d-c6af-11eb-9377-18c04d68439c
        [description] => 
        [path] => 2017/
        [file] => 8926e70d-c6af-11eb-9377-18c04d68439c.jpeg
        [type] => image
        [createdon] => 2021-07-23 11:04:14
        [createdby] => 1
        [rank] => 0
        [url] => /assets/images/products/2017/8926e70d-c6af-11eb-9377-18c04d68439c.jpeg
        [properties] => Array(
            [size] => 115653
            [width] => 2000
            [height] => 1600
            [bits] => 8
            [mime] => image/jpeg
        )
        [hash] => 9ee73b013db3030f41d162a0525314fc3b97e806
        [active] => 1
    )
)
ето при первой загрузке фоток, а дальше у всех пустой масив
Наумов Алексей
23 июля 2021, 09:16
+1
Это же код пример?
Просто 'id' => 'resource_id' выглядит странно :)

Какой вывод у responce?
Николай Савин
23 июля 2021, 09:04
0
Проще всего разместить код на странице благодарности за заказ, чанк сниппета msGetOrder