Василий Столейков

Василий Столейков

С нами с 19 декабря 2012; Место в рейтинге пользователей: #23
06 апреля 2017, 12:06
0
Ответ в чём была проблема был найден тут.
06 апреля 2017, 12:06
0
Ответ в чём была проблема был найден тут.
06 апреля 2017, 12:04
0
Это убери, ломает весь сайт:
<base href="//{$_modx->config.http_host}/" />
Добавь ту что я тебе писал выше.
06 апреля 2017, 12:02
1
0
Действительно, зачем это я… Тупое копирование с примеров, которые у других работали.
Спасибо тебе, добрый человек, всё работает как и задумывалось!

Вот что получилось (на будущее):
Плагин:
<?php
switch ($modx->event->name) {
    case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart': 
        $total_count = $cart->status()['total_count'];
        $total_weight = $cart->status()['total_weight'];
        
        $procent = 20;
        
        $tmp = $cart->get();
        
        if ($total_weight > 400) {
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {

                    $price = $product->get('price');
                    $rate = $procent * $price / 100;
                    $price = $price - $rate;
                	$tmp[$key1]['price'] = $price;
                    $modx->log(modX::LOG_LEVEL_ERROR, "cart: ".print_r($price,1) );
                	
                	
                }
            }
        }
        else {
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$tmp[$key1]['price'] = $product->get('price');
                }
            }
        }
        $cart->set($tmp);
    break;
}
Ну и на фронтенде повторение функционала:
<script>
    miniShop2.Callbacks.add('Cart.change.response.success', 'response_log', function(e) {
        var total_weight = e.data.total_weight;
        if(total_weight > 400) {      
            console.log('opt');
            $('#msCart .price .procent').text('-20%');
        } else {
            $('#msCart .price .procent').text('');
        }
    });
    miniShop2.Callbacks.add('Cart.remove.response.success', 'response_log', function(e) {
        var total_weight = e.data.total_weight;
        if(total_weight > 400) {      
            console.log('opt');
            $('#msCart .price .procent').text('-20%');
        } else {
            $('#msCart .price .procent').text('');
        }
    });
</script>
06 апреля 2017, 09:15
0
Не то добавил. Добавь прямо текст который я тебе написал:
<base href="http://b2b-open.ru/" />
06 апреля 2017, 08:47
0
Не вижу этого тега в коде страницы. Добавь как я написал чуть выше, чтобы он был в коде. Может ты не в тот шаблон добавил?
06 апреля 2017, 08:45
0
Может всё-таки добавишь тег base и тогда посмотриш будет ли редирект?
Вот код для твоего сайта, вставь в тег head в шаблоне:
<base href="http://b2b-open.ru/" />
06 апреля 2017, 07:53
0
1. Проверь тег base в head шаблона. Должен быть примерно таким:
<base href="//{$_modx->config.http_host}/" />
2. А ничего, что у тебя данные никуда не отправляются? У select-а должен быть name.
06 апреля 2017, 06:58
0
Если хочешь чтобы тебе кто-то ответил, уточняй ситуацию, приводи примеры.
  • Форма у тебя отправляется на Ajax или обычным способом?
  • Форма твоя лично или от какого-то компонента, например AjaxForm?
  • Данные куда отправляются? Успешно?
  • Приведи кусок кода или всю форму чтобы увидеть где ошибка.
Извини, но тут никто не телепат.
31 марта 2017, 13:29
0
Неа, не подходит. У меня своя логика формирования цены должна быть, и она зависит от веса (weight), а не от количества.
Если в коротко, то при достижении например 400 грамм суммарно для всех товаров в корзине должна применяться для всех них скидка в 20% например.
Этот плагин идеально подходил бы к моей задаче, если бы не плевался в логи…
31 марта 2017, 11:45
0
Ругается именно на эту строчку в плагине:
$miniShop2->initialize($modx->context->key, $scriptProperties);
31 марта 2017, 11:43
0
Этот плагин ещё работает?

У меня плагин ругается при попытке инициализации класса:
[2017-03-31 11:34:26] (ERROR @ /home/s7102/www/core/components/minishop2/model/minishop2/minishop2.class.php : 95) Recoverable error: Object of class msCartHandler could not be converted to string
[2017-03-31 11:34:26] (ERROR @ /home/s7102/www/core/components/minishop2/model/minishop2/minishop2.class.php : 104) Recoverable error: Object of class msCartHandler could not be converted to string

В файле minishop2.class.php на этих строчках регистрация клиентского скрипта:
$this->modx->regClientCSS(str_replace($config['pl'], $config['vl'], $css)); // 95 строчка
$this->modx->regClientScript(str_replace($config['pl'], $config['vl'], $js)); // 104 строчка

И понятное дело плагин не срабатывает как задумывалось. В чём может быть проблема? Или minishop2 с тех пор настолько изменился что конфликтует?
31 марта 2017, 11:40
0
Этот плагин ругается при попытке инициализации класса:
[2017-03-31 11:34:26] (ERROR @ /home/s7102/www/core/components/minishop2/model/minishop2/minishop2.class.php : 95) Recoverable error: Object of class msCartHandler could not be converted to string
[2017-03-31 11:34:26] (ERROR @ /home/s7102/www/core/components/minishop2/model/minishop2/minishop2.class.php : 104) Recoverable error: Object of class msCartHandler could not be converted to string

В файле minishop2.class.php на этих строчках регистрация клиентского скрипта:
$this->modx->regClientCSS(str_replace($config['pl'], $config['vl'], $css)); // 95 строчка
$this->modx->regClientScript(str_replace($config['pl'], $config['vl'], $js)); // 104 строчка

И понятное дело плагин не срабатывает как задумывалось. В чём может быть проблема? Или minishop2 с тех пор настолько изменился что конфликтует?
24 марта 2017, 21:35
+1
)))) ага, я знаю, вообще-то это было утверждение, а не вопрос. Не заметил этой мысли в статье и решил дополнить. )))
24 марта 2017, 12:24
+4
Круто, спасибо, очень нужная вещь!
А то каждый раз приходилось удалять все старые пакеты, а при возвращении в менеджер пакетов не запоминалась пагинация и снова нужно было листать до следующего компонента…

А этот скрипт можно повесить на крон.
24 марта 2017, 11:20
0
Спасибо за помощь! Твой вариант подходит.
Системная настройка с максимальным значением и параметр для сниппета в разных вызовах.
24 марта 2017, 11:18
0
каюсь, недопроверил. Забыл про проверку в БД при отправке редактированного коммента…

А вот в системной настройке (tickets.comment_edit_time), видимо, нужно указать максимальный, по сайту, период возможности менять комментарий.
только так.

Похоже действительно только у себя прийдётся копию сниппета создать и юзать везде с этим параметром…
24 марта 2017, 10:44
0
Не знаю, правильно ли я подал pull-request, но вроде бы получилось (если честно, то я там запутался, я не плотно знаком с гитхабом).
Вкратце, изменил 9-ю строчку на следующую:
$scriptProperties['commentEditTime'] = $modx->getOption('commentEditTime', $scriptProperties, $modx->getOption('tickets.comment_edit_time', null, 180));
то есть если не указан параметр, значение берётся из системной настройки.
24 марта 2017, 10:05
0
onMODXInit не получает текущие данные ресурса, лишь 2 бесполезных параметра: contextKey и пустой options.
Но спасибо за идею, достаточно лишь подобрать нужное событие!