Артур Шевченко

Артур Шевченко

С нами с 24 мая 2019; Место в рейтинге пользователей: #3
Отправить деньги
02 мая 2021, 10:23
+2
Спасибо за пояснение. Убрал под cut.
29 апреля 2021, 16:08
0
Обновлять пробовали и админку и ajaxForm?
29 апреля 2021, 15:58
+1
У ресурса может быть несколько стран в которые он не поставляется? Если да, то надо расширять класс фильтрации. Я делал фильтр по регионам, суть такая: у каждого ресурса есть поле, в котором хранится список в котором будем искать совпадения, сам фильтр это select с одиночным выбором.
<?php

class CustomFilter extends mse2FiltersHandler
{

    public function getPolyFieldValues(array $keys, array $ids)
    {
        $filters = array();

        $q = $this->modx->newQuery('msProductData');
        $q->where(array('id:IN' => $ids));
        $q->select('id,' . implode(',', $keys));
        $tstart = microtime(true);
        if ($q->prepare() && $q->stmt->execute()) {
            $this->modx->queryTime += microtime(true) - $tstart;
            $this->modx->executedQueries++;
            while ($row = $q->stmt->fetch(PDO::FETCH_ASSOC)) {
                foreach ($row as $k => $v) {
                    $values = json_decode($v, 1);
                    if ($k == 'id') {
                        continue;
                    } elseif(is_array($values)){
                        foreach ($values as $val) {
                            $filters[$k][$val][] = $row['id'];
                        }
                    }
                }
            }
        } else {
            $this->modx->log(modX::LOG_LEVEL_ERROR, "[mSearch2] Error on get filter params.\nQuery: " . $q->toSql() . "\nResponse: " . print_r($q->stmt->errorInfo(), 1));
        }

        return $filters;
    }

    public function buildPolyFieldFilter(array $values, $name = '')
    {
        if (count($values) < 2 && empty($this->config['showEmptyFilters'])) {
            return array();
        }
        $results = array();
        foreach ($values as $value => $ids) {
            $results[$value] = array(
                'title' => $value
            , 'value' => $value
            , 'type' => 'default'
            , 'resources' => $ids
            );
        }

        ksort($results);
        return $results;
    }


    public function filterPolyField(array $requested, array $values, array $ids)
    {

        $matched = array();
        $tmp = array_flip($ids);
        foreach ($requested as $value) {
            if (isset($values[$value])) {
                $resources = $values[$value];
                foreach ($resources as $id) {
                    if (isset($tmp[$id])) {
                        $matched[] = $id;
                    }
                }
            }
        }

        $match = $matched;
        $matched = array();
        $count = count($requested);
        $count_values = array_count_values($match);

        foreach ($count_values as $id => $value) {
            if ($value >= $count) {
                $matched[] = $id;
            } else {
                $matched[] = 0;
            }
        }
        //$this->modx->log(1, print_r($matched,1));
        return $matched;
    }

    public function getSuggestions($ids, array $request, array $current = array()) {}

}
29 апреля 2021, 10:18
0
Всё правильно ты думаешь ссылка должна быть такой site.ru/stranicza-polzovatelya?user=18, а на странице /stranicza-polzovatelya пиши так
{$.get['user'] | user: 'username'}
29 апреля 2021, 00:09
0
А ты где этот код пишешь в чанке item? Тогда понятно почему не срабатывает, надо так писать $_pls['tovar_id']
28 апреля 2021, 23:14
0
Я бы сделал модификации через msOprtionsPrice2, а остальное ручками-ручками.
28 апреля 2021, 23:09
0
А что, после первого нажатия перестает работать?
28 апреля 2021, 23:07
0
По-моему логично было бы проверять $_modx->resource.tovar_id.
27 апреля 2021, 20:47
0
Не совсем понятно, где ты хочешь передавать. Но если на фронте то
[[#[[*parent]]]]
{$parent | resource: 'tvname'}
Если в админке то можно использовать такую конструкцию
@SELECT `value` FROM `modx_site_tmplvar_contentvalues` WHERE `tmplvarid` = tvid AND `contentid` = parentid
23 апреля 2021, 14:07
0
Спасибо за уделенное время. Исправления внёс:-)
23 апреля 2021, 12:11
0
Нет.
23 апреля 2021, 10:04
+1
Нет, я не приемлю принцип «сдал и меня нет», я поддерживаю свои проекты. И стараюсь заранее все нюансы у заказчика узнать, чтобы доработок было минимум. Понятно, что потом аппетиты могут у заказчика вырасти, тогда и переделаем. А за то, что опытом делитесь респект!
23 апреля 2021, 09:51
0
Вечно эти опытные программисты находят изъяны и не дают насладиться маленьким триумфом от собственного роста? Я понял вас, спасибо. Что до повторной отправки, можно предусмотреть: пишем в поле comment ссылку domain.ru?msorder=2 и выводим это поле в таблице заказов. Логгирование ошибок в скрипте отправки есть, надо только возвращать false и наверное уведомлять админа. Про чтение json это прям сильно))) А вот когда вырастет, тогда можно будет переделать и ещё немного заработать ?
23 апреля 2021, 09:24
0
Понимаете какое дело, бо́льшую часть времени крон будет работать в холостую. Получается он должен раз в минуту, пусть даже раз в пять минут запускать скрипт который будет делать запрос в БД, и если есть письмо, отправлять, если нет, то ничего не делать. Но мероприятия маленькие до 500-600 человек, это примерно по 1 письму в час, если продажу начинать за месяц, в лучшем случае. В общем у меня нет каких-то обоснованных аргументов, но сам факт того что скрипт будет срабатывать впустую мне не нравится))) Я лучше пятисекудный таймер добавлю, чтобы ajax точно скрипт запустил типа «Отправляем билеты. Ждите 5...4...3...2...1 Билеты отправлены. До скорой встречи!»)))
23 апреля 2021, 09:09
0
Спасибо за комментарии. По первым двум пунктам спорить не буду, особенно по второму. Что касается третьего, изначально так и было, однако отправка письма с вложением при покупке разом больше одного билета вызывала зависание от 3 секунд, возможно это связано с логикой работы ms2, поэтому я решил данный функционал вынести на отдельную страницу, потому как пользователь на неё в любом случае переходит и там он уже ничего не заметит. Если будет сбоить, повешу задачу в крон. А что до ms2 и его нужности, будь к меня скилл повыше, наверное, я его бы не использовал, но с другой стороны ms2 дал почти весь функционал, я ведь совсем немного логику подправил и генерацию билета прикрутил и всё, к тому же ещё оплату подключать, а для ms2 уже есть модули.
19 апреля 2021, 21:48
0
msProfile я не пользовался, поэтому использование этого дополнения мне скорее всего задачу бы усложнило. А с другой стороны, таблица есть? Есть! Значит и запись в неё можно сделать. Напиши плагин который при регистрации будет создавать запись в этой таблице и всё. Конечно надо смотреть как в этом допе ссылка генерируется, скорее всего нужно будет ещё процессор запустить для её генерации. Ни пополнение также плагином, при создании заказа проверяешь есть ли у заказчика реферал, если да, то начисляешь баллы. Но если тебе это придётся самому делать, зачем тогда доп? Мне кажется он должен это уметь из коробки или что-то очень похожее, по крайней мере в части начисления баллов.