Alexey

Alexey

С нами с 02 августа 2015; Место в рейтинге пользователей: #109
18 февраля 2021, 09:36
0
В сниппете выбирается последний заказ. А если в течение этой минуты ещё заказ прилетит? Сниппет его возьмет, обработает, а предыдущий заказ пролетит, получается.
18 февраля 2021, 09:00
0
В чанке pdoMenu tv-поле по умолчанию вызывается без префикса tv
14 февраля 2021, 22:31
1
+2
Привет! В файле core/components/minishop2/custom/payment/robokassa.class.php заменить метод getPaymentLink на следующий код:

public function getPaymentLink(msOrder $order)
    {
        $id = $order->get('id');
        $sum = number_format($order->get('cost'), 2, '.', '');
	//список товаров в заказе
	$order_goods = $this->modx->getCollection('msOrderProduct', ['order_id' => $id]);
	$tmp = [];
	foreach($order_goods as $key => $good) {
	    $tmp[$key]['name'] = $good->name;
	    $tmp[$key]['quantity'] = $good->count;
	    $tmp[$key]['sum'] = $good->cost;
	    $tmp[$key]['tax'] = 'none';
	}
		
        //номенклатура заказа
        $receipt = ['items' => array_values($tmp)];
	$receipt_json = json_encode($receipt, JSON_UNESCAPED_UNICODE);
	$SignatureValue = md5($this->config['login'] . ':' . $sum . ':' . $id. ':' . $receipt_json . ':' . $this->config['pass1']);
        $request = array(
            'url' => $this->config['checkoutUrl'],
            'MrchLogin' => $this->config['login'],
            'OutSum' => $sum,
            'InvId' => $id,
            'Desc' => 'Payment #' . $id,
            'IncCurrLabel' => $this->config['currency'],
            'Culture' => $this->config['culture'],
            'Receipt' => $receipt_json,
            'SignatureValue' => $SignatureValue,
        );
        
        if (!empty($this->config['test_mode'])) {
            $request['isTest'] = 1;
        }
        $link = $this->config['checkoutUrl'] . '?' . http_build_query($request);
        return $link;
    }

Компонент давно не обновляется, нужна была оперативность, поэтому правил исходники компонента. Нужно иметь в виду, что если выйдет апдейт, то эти правки будут затерты. Про расширение классов, думаю, можно немало информации найти, хотя бы здесь.

Делал под конкретный сайта, поэтому передавал только необходимые параметры. Советую почитать тут ( skrinshoter.ru/s/140221/5d2fQ6PK?a ), возможно, нужно передать другую систему налогообложения, налоговую ставку и т.д…
11 февраля 2021, 20:26
0
Сам сниппет отдельно проверяли? Корректно выводит дату?

<?php
setlocale(LC_ALL, 'en_US.UTF-8');
if ( $val == '' ) $val=time();
if ($format == '' ) $format = "%a, %d %b %Y %H:%M:%S";
return strftime($format, $val);

Я про этот говорю. Первый — укороченный — не будет работать.
11 февраля 2021, 19:47
0
Проверил на тестовом сайте

[[!dateLocale? &val=`[[+publishedon]]`]]

Всё корректно выводит. Нигде кириллица не затесалась часом?
11 февраля 2021, 18:35
0
[[+publishedon]] — так что выводит?
11 февраля 2021, 18:20
0
А так?

[[!dateLocale? &val=`[[+publishedon]]`]]
11 февраля 2021, 13:49
0
Прямо глаз режет тире в названии tv-поля. Могу ошибаться, но где-то видел пост, как раз связанный с такого плана именованием и проблемой в выполнении запроса.

Не зря же тире не входит в список разрешенных символов для именования переменных в php. Попробуйте сменить тире на нижнее подчеркивание.

И, да — LIKE в данном случае неуместен, полностью согласен с Артуром и Александром.
09 февраля 2021, 15:58
0
msProducts делает выборку товаров по заданным условиям. В списке этот товар и показан. А когда переходишь на него, тогда уж сорри — 404
09 февраля 2021, 14:16
0
Неопубликованные товары и не должны на фронте выводиться, если не авторизован в админке. Скорее всего, страница 404 не настроена, вот и кидает на главную — по умолчанию. Странное решение — выводить товар, снятый с публикации. Есть веские причины?

Думаю, правильнее было бы фильтровать список по какому-нить свойству товара или доп. полю, а не снимать с публикации.
02 февраля 2021, 14:05
0
Тут какой-то винегрет) Боюсь спросить: а что делает гугл тег менеджер и аналитикс в админке сайта?

И тут пишется, что отсутствует тег "<" в каком-то скрипте — skrinshoter.ru/s/020221/BKmYYort

Ручками в файлы админки не залезали?
02 февраля 2021, 12:46
0
Покажите скрин с ошибками консоли
02 февраля 2021, 09:14
0
Привет! В консоли браузера есть ошибки?

Как это не тривиально звучит, в первую очередь я бы почистил папку с кешем (именно, физически удалить). Если не помогает, стал бы по очереди отключать плагины и смотреть результат
30 января 2021, 16:07
0
Привет! Попробуй в чанке письма заказчику — по дефолту это tpl.msEmail — вывести что-то такого плана:

<a href="{$total.payment_link}">Ссылка на оплату</a>

Если правильно помню содержимое класса минишопа, если класс платежа есть в настройках (и в платежном классе есть метод getPaymentLink), то автоматом генерируется плейсхолдер со ссылкой на оплату.
29 января 2021, 15:25
0
Если честно, я не сильно вчитывался в код, приведенный в условии. Но я бы в принципе по-другому пути пошел.

  1. Вначале вытащил бы в отдельный массив данные нужных ресурсов (ключ-id, значение-menuindex)
  2. Сохранил бы в отдельные переменные новый menuindex и его id (в плагине он и так доступен)
  3. И спокойно бы раскурочил массив из п.1 так как нужно — не в пример нагляднее, чем перебирать ресурсы. Есть методы сортировки, array_flip и так далее..
  4. Полученный в результате «пыток» в п.3 массив должен содержать: ключ — id ресурса, значение — новое значение menuindex, которое соответствует условиям
  5. Сохраняем menuindex из массива в ресурсы, id которых в ключе

Тут всё наглядно, при работе с массивом можно каждый шаг дебажить и тестить. А так с наскока — перебирая ресурсы — мне, к примеру, тяжеловато сообразить
29 января 2021, 10:44
0
>>>У меня не далее как вчера сохранялась.
Серьезно? На событие OnBeforeDocFormSave? skrinshoter.ru/s/290121/E2iWCCxq

>>>т.е. в плагин приходит уже новое значение.
В плагин на событие OnBeforeDocFormSave приходит новые значение, а вы заметили, откуда я извлекаю старое? Пытались мой пример протестить?
29 января 2021, 09:44
0
Если плагин повесить на OnBeforeDocFormSave, то можно обойтись без промежуточного TV

<?php
$eventName = $modx->event->name;
switch($eventName) {
    case 'OnBeforeDocFormSave':
        $menuindex = $modx->getObject('modResource', $id)->get('menuindex');
        $new_menuindex = strip_tags($_POST['menuindex']);
        
        $modx->log(1, print_r($menuindex, 1));
        $modx->log(1, print_r($new_menuindex, 1));
        
        break;
}

В этом случае нужно помнить, что не срабатывает сохранение TV-поля из плагина. Но оно в данном случае нам и не нужно.
28 января 2021, 12:13
0
Спасибо, как всегда — круто!

Подскажите, а момент с оформлением заказа на другого юзера по номеру телефона планируется пофиксить в будущем?

github.com/Ibochkarev/miniShop2/issues/440
27 января 2021, 22:26
1
+3
В общем, оказалось так. В коде формы кнопки очистки

<form method="post">
      <button type="submit" name="ms2_action" value="cart/clean" class="btn btn-danger">Очистить</button>
 </form>
нужно добавить

<form method="post" action="/">
      <button type="submit" name="ms2_action" value="cart/clean" class="btn btn-danger">Очистить</button>
 </form>

Скрипт минишопа смотрит в action формы кнопки очистки корзины, если его нет — подставляет из своих настроек. Это касается именно кнопки очистки. Если товары удалять по очереди, то тут либо плагин, либо — правка js-файла, как описывал выше.