Всего 125 943 комментария

Артур Шевченко
21 октября 2022, 20:34
0
Логично. Тогда надо переписывать основной класс, который отвечает за расчёт доставки. Ну как переписывать переопределить метод getSenderCity() в core/components/ms_cdek2/model/ms_cdek2.class.php Правда после этого обновлять компонент будет нельзя.
snowdog178
21 октября 2022, 20:28
0
Так она тогда поменяется для всех пользователей, делающих заказ в этот момент.
Артур Шевченко
21 октября 2022, 20:21
0
Поскольку пункт отправления берётся из системных настроек, надо менять системную настройку. Я б попробовал менять на событие msOnAddToOrder.
R2m0x94 (Vasily)
21 октября 2022, 20:06
0
Нет, я сделал по другому, всё работает)) В целом просто попробовал через закуску сделать, но не вышло) А так всё гуд.
Артур Шевченко
21 октября 2022, 20:03
0
снипет он видит точно так как выдает ошибку
Какую ошибку?
Артур Шевченко
21 октября 2022, 19:44
0
У меня например Error `core/model/modx/processors/web/orders/send.php does not exist; Array()`
Это ядро modx, не уверен что там должен быть какой-либо процессор для отправки каких-то заказов, вероятно ты неверно указал путь к процессору.

виснет из-за fenom, а отключить не могу
А каким образом у тебя ответ от сервера попадает на страницу как есть?

Ну и в целом мне не очень понятно какое отношение твоё сообщение имеет к чути заметки?
R2m0x94 (Vasily)
21 октября 2022, 18:51
0
У меня например Error `core/model/modx/processors/web/orders/send.php does not exist; Array()`, так как нет в процессорах 'web/orders/send'

Делаю выставить счёт в msProfile получаю {«success»:true,«message»:"",«data»:{«redirect»:«https:\/\/сайт.ru\/?msorder=40»}} виснет из-за fenom, а отключить не могу, так как нужен всё на нём построено
Марат
20 октября 2022, 20:14
0
Можно ли использовать msCategoryOptions для обычных ресурсов modx и категорий товаров?
Как это сделать?
Николай Савин
20 октября 2022, 18:39
+3
Очень плохой код.
Вот эта строка не нужна
$product = $modx->getObject('msProduct', $modx->resource->get("id"));
$modx->resource это и есть $product;

Вот тут ошибка
$options = $product->getMany('options');
Если используете getMany и getOne — там всегда будет слово с большой буквы. Потому и не срабатывает код, что вызов неверный.

Сниппет должен возвращать значение, а не вызывать его. Никаких echo, print_r, и var_dump
Ну и желательно использовать строгое сравнение.

Итого корректный код будет таким

<?php

$options = $modx->resource->getMany('Options');
foreach ($options as $option) {
    if ($option->get('key') === 'type_food') {
        return $option->get('value');
    }
}
Александр
20 октября 2022, 18:31
+1
Решение для условия нашёл такое
{if $_modx->resource.type_toy.0 == "Кукла"}
    Кукла
{else}
    Машина
{/if}
Забавно что за кучу лет ни одного решения нет ни на форуме, ни вообще в интернете для подобной задачи. Даже сниппета готового никто не написал. Надеюсь когда-то пригодится таким как я бедолагам.
Alexey
20 октября 2022, 18:09
0
Если костылить, то можно попробовать в самом сниппете подключить pdoTools

$pdoTools = $modx->getService('pdoTools');
и переписать вызовы чанков все с
$modx->getChunk(
на
$pdoTools->getChunk(

Но лучше вначале скопировать сниппет, подключить в свой вызов скопированный и уже с ним экспериментировать
Alexey
20 октября 2022, 17:59
0
Может, потому что в самом сниппете fenom не подключается?

skrinshoter.ru/s/201022/BHz7cPvL
Александр Туниеков
20 октября 2022, 17:51
0
Чтобы решать вопросы надо их вообще знать :-). Я тоже предпочитаю без решений не выступать, но эту тему поднял уже для того что разобраться в проблеме. Какие вопросы возникают? И обзор их решений. Исследование в общем. Так что ваши вопросы к mFilter2 мне интересны
Giant Dad
20 октября 2022, 17:44
0
да я эти варианты в первую очередь проверил, не выводит ничего
Алексей Смирнов
20 октября 2022, 17:39
0
У меня тоже есть вопросы к msFilter2 но я их пока стараюсь не озвучивать )
тк с моей стороны не было предложений и решений этих вопросов.
Как только будут, будут и решения. )
по оптимизации буду держать в голове тему.
Александр Туниеков
20 октября 2022, 17:30
0
39с это из-за того что на тестовой инсталяции значения из msProductData брал.
{'!mFilter2' | snippet : [
                'showLog'=>1,
                'suggestions'=>1,
                'parents'   =>  $_modx->resource.id,
                'cacheTime'=>600,
                'limit'=>100,
                'suggestionsMaxFilters'=>10000,
                'filters'=>'
                ms|size:default,
                ms|insert:default,
                ms|material:default,
                ms|style:default,
                ms|metal_color:default,
                ms|sample_material:default,
                ms|insert_color:default,
                ms|insert_form:default,
                ms|cover:default,
                ms|appointment:default,
                ms|weaving_type:default,
                ms|for_whom:default',
            ]}
В коде msearch
foreach ($filters as $table => &$fields) {
				$method = 'get' . ucfirst($table) . 'Values';
				$keys = !empty($duplicates[$table])
					? array_diff(array_keys($fields), array_keys($duplicates[$table]))
					: array_keys($fields);
				if (method_exists($this->filtersHandler, $method)) {
					$fields = call_user_func_array(array($this->filtersHandler, $method), array($keys, $ids));
То есть, значения собираются для каждой опции отдельно. 12 раз пробегается по каталогу из 11к товаров.
Блин 1 раз пробегается :-(
Вот я повернут на объективности. Обманывая других часто обманываешь и себя. А это уже чревато. Лучше честно признать ошибку и придумать новое лучшее. Это не к Вам если что. Просто лирика про себя :-).
Скорость отдачи страницы больше секунды это уже плохо. Тем более если страница для покупателей.
Спасибо что поделились своим опытом. Будет интересно взглянуть на результаты Ваших тестов.
Артур Шевченко
20 октября 2022, 17:11
0
Ну это нормально, почему так не скажу, но используй $_modx->getPlaceholder('code') или $_pls['code'] или 'code' | placeholder. Первое и последнее одно и то же.