mekirile

mekirile

С нами с 06 февраля 2015; Место в рейтинге пользователей: #93

Как вывести связанные товары независимо от типа связи?

Добрый день.
Ранее в каталоге были товары, у которых была добавлена связь один к одному (id=4).
Я выводил их следующим кодом:
{var $links = '!msProducts' | snippet : [
                                'parents' => 0,
                                'link' => 4,
                                'master' => $_modx->resource.id,
                                'tpl' => '@INLINE <div class="col-6 col-md-4 col-lg-3">{include "file:new/chunks/product.tpl"}</div>'
                                ]}
                                {if $links?}
                                        <h3>Купите также:</h3>
                                        {$links}
                                {/if}
Сейчас же появилась необходимость сделать, у некоторых товаров связь один ко многим (id=5).
Перечисление айдишников в коде выше не работает. Как указать вызов сниппета, чтобы связанные товары выводились независимо от того, какая связь добавлена у товара?
mekirile
28 октября 2022, 10:09
modx.pro
137
0

Как в mFilter2 вывести модификации с ненулевым остатком

Имеются товары с модификациями подобного вида — prntscr.com/scgm57
Проделал манипуляции с кастомным классом, чтобы фильтровать по модификациям, но в фильтре выводит все доступные модификации — prntscr.com/scgo3c.

А я бы хотел выводить только те, у которых ненулевой остаток. Подскажите, как прописать это условие. Вот вызов mFilter2:
mekirile
07 мая 2020, 12:12
modx.pro
264
0

Почему не работает условие в pdoPage?

Вывожу товары конструкцией
{$_modx->runSnippet('!pdoPage',[
   'parents' => '2678',
   'includeTVs'=>'team',
    'where' => '{"team: LIKE":"Спартак"}',
   'element' => 'msProducts',
   'limit' => 5,
   'sortby' =>  '{ "createdon":"DESC" }',
	'showLog'	=> 1,	   
   'ajaxMode' =>  'default',
])}
В этом случае всё работает корректно. Если меняю условие на
'where' => '{"team: LIKE":"{$_modx->resource.pagetitle}"}',
То товары не отображаются. Хотя лог показывает одно и то же в запросе SQL в обоих случаях.

Товаров нет — prntscr.com/s9ut89
Товары есть — prntscr.com/s9utpz

В чем может быть дело и как это поправить?
mekirile
03 мая 2020, 00:23
modx.pro
266
0

Включить Fenom для контекста

Добрый день. Хочу аккуратно перенести элементы своего сайта на Fenom. Я создал контекст для поддомена вида dev.mysite.ru. На основном сайте настройка pdotools_fenom_parser указана со значением Нет.

Пытаюсь переопределить её в новом контексте — prntscr.com/s7wr3d, но на странице вместо содержимого всё равно вижу
{include 'file:dev/templates/main.html'}
.
Если поменять значение в системных настройках, то в контексте всё работает ок.
Подскажите, в чем может быть дело?
mekirile
29 апреля 2020, 13:08
modx.pro
237
0

Выгрузка товаров на Ozon

Кто-нибудь размещается на Ozon?
Как организовали выгрузку и обновление товарных предложений? К сожалению yml от Маркета не принимают, руками долго, а по API не смогу.
mekirile
10 декабря 2019, 17:21
modx.pro
1 120
0

Вопрос по mSync (mSklad)

Здравствуйте, при выгрузке заказа с сайта в МойСклад не добавляется его модификация.
В данном случае модификация — это TV параметр размер.

Вот как выглядит при создании заказа в МойСклад — prntscr.com/mwn6jb
Вот как должно быть — prntscr.com/mwn7ck
Вот так выбирается размер на сайте — prntscr.com/mwn7xp

Сами значения размеров (TV-параметры) как раз-таки и берутся из МоегоСклада, поле заполняется модификациями при импорте товаров на сайт.

Подскажите, в каком файле можно добавить указание модификации к товарам в заказе.
msklad-1.0.10-pl
mekirile
12 марта 2019, 17:54
modx.pro
397
0

Как вывести ссылку на оплату на странице успешного заказа?

Здравствуйте. Хочу немного переделать логику оформления заказа. Мне нужно чтобы при выборе онлайн-оплаты не происходил редирект на платежный сервис сразу, а сначала был переход на страницу Спасибо за заказ. И уже на этой странице я бы выводил пользователю линк для оплаты.

Я так понимаю, что нужно расширить класс msOrderHandler для того, чтобы убрать редирект. Но вот каким образом в чанке tpl.msGetOrder вывести ссылку на оплату? Подскажете?

Решение:
Для того, чтобы при выборе любого способа оплаты не было редиректа на платёжную систему необходимо расширить класс заказа . Код нового класса:
<?php

if (!class_exists('msOrderInterface')) {
    require_once MODX_CORE_PATH . 'components/minishop2/model/minishop2/msorderhandler.class.php';
}


class appOrderHandler extends msOrderHandler implements msOrderInterface
{

    /** @var modX $modx */
    public $modx;
    /** @var miniShop2 $ms2 */
    public $ms2;

    /** @var array $config */
    public $config;
    /** @var array $order */
    protected $order;


    function __construct(miniShop2 & $ms2, array $config = [])
    {
        parent::__construct($ms2, $config);

        //$this->modx->log(1, print_r('__construct', 1));
    }


    /**
     * @param array $data
     *
     * @return array|string
     */
    public function submit($data = [])
    {
        $response = $this->ms2->invokeEvent('msOnSubmitOrder', [
            'data'  => $data,
            'order' => $this,
        ]);
        if (!$response['success']) {
            return $this->error($response['message']);
        }
        if (!empty($response['data']['data'])) {
            $this->set($response['data']['data']);
        }

        $response = $this->getDeliveryRequiresFields();
        if ($this->ms2->config['json_response']) {
            $response = json_decode($response, true);
        }
        if (!$response['success']) {
            return $this->error($response['message']);
        }
        $requires = $response['data']['requires'];

        $errors = [];
        foreach ($requires as $v) {
            if (!empty($v) && empty($this->order[$v])) {
                $errors[] = $v;
            }
        }
        if (!empty($errors)) {
            return $this->error('ms2_order_err_requires', $errors);
        }

        $user_id = $this->ms2->getCustomerId();
        if (empty($user_id) || !is_int($user_id)) {
            return $this->error(is_string($user_id) ? $user_id : 'ms2_err_user_nf');
        }

        $cart_status = $this->ms2->cart->status();
        $delivery_cost = $this->getCost(false, true);
        $cart_cost = $this->getCost(true, true) - $delivery_cost;
        $createdon = date('Y-m-d H:i:s');
        /** @var msOrder $order */
        $order = $this->modx->newObject('msOrder');
        $order->fromArray([
            'user_id'       => $user_id,
            'createdon'     => $createdon,
            'num'           => $this->getNum(),
            'delivery'      => $this->order['delivery'],
            'payment'       => $this->order['payment'],
            'cart_cost'     => $cart_cost,
            'weight'        => $cart_status['total_weight'],
            'delivery_cost' => $delivery_cost,
            'cost'          => $cart_cost + $delivery_cost,
            'status'        => 0,
            'context'       => $this->ms2->config['ctx'],
        ]);

        // Adding address
        /** @var msOrderAddress $address */
        $address = $this->modx->newObject('msOrderAddress');
        $address->fromArray(array_merge($this->order, [
            'user_id'   => $user_id,
            'createdon' => $createdon,
        ]));
        $order->addOne($address);

        // Adding products
        $cart = $this->ms2->cart->get();
        $products = [];
        foreach ($cart as $v) {
            if ($tmp = $this->modx->getObject('msProduct', ['id' => $v['id']])) {
                $name = $tmp->get('pagetitle');
            } else {
                $name = '';
            }
            /** @var msOrderProduct $product */
            $product = $this->modx->newObject('msOrderProduct');
            $product->fromArray(array_merge($v, [
                'product_id' => $v['id'],
                'name'       => $name,
                'cost'       => $v['price'] * $v['count'],
            ]));
            $products[] = $product;
        }
        $order->addMany($products);

        $response = $this->ms2->invokeEvent('msOnBeforeCreateOrder', [
            'msOrder' => $order,
            'order'   => $this,
        ]);
        if (!$response['success']) {
            return $this->error($response['message']);
        }

        if ($order->save()) {
            $response = $this->ms2->invokeEvent('msOnCreateOrder', [
                'msOrder' => $order,
                'order'   => $this,
            ]);
            if (!$response['success']) {
                return $this->error($response['message']);
            }

            $this->ms2->cart->clean();
            $this->clean();
            if (empty($_SESSION['minishop2']['orders'])) {
                $_SESSION['minishop2']['orders'] = [];
            }
            $_SESSION['minishop2']['orders'][] = $order->get('id');

            // Trying to set status "new"
            $response = $this->ms2->changeOrderStatus($order->get('id'), 1);
            if ($response !== true) {
                return $this->error($response, ['msorder' => $order->get('id')]);
            } else {
                if ($this->ms2->config['json_response']) {
                    return $this->success('', ['msorder' => $order->get('id')]);
                } else {
                    $this->modx->sendRedirect(
                        $this->modx->context->makeUrl($this->modx->resource->id, ['msorder' => $response['data']['msorder']])
                    );

                    return $this->success();
                }
            }
        }

        return $this->error();
    }


}
mekirile
17 декабря 2018, 23:26
modx.pro
4
1 315
0

Интеграция с Почтой России

Друзья, привет! Нахожусь в процессе подписания договора с Почтой — возник вопрос.

Подскажите, реализовал ли кто-то интеграцию с Почтой России (https://otpravka.pochta.ru/)?
Конкретно интересует передача заказа с моего сайта (modx, минишоп) по api в ЛК Почты России.
mekirile
14 июля 2017, 08:43
modx.pro
900
0

Подключаем Ecommerce в Яндекс.Метрике

Всем привет. На форуме куча полезной информации по разработке магазинов. Я же в свою очередь хочу рассказать про настройку аналитики.

Итак мы будем передавать информацию из магазина miniShop в Яндекс.Метрику для того, чтобы в полном объёме пользоваться отчётами Электронной коммерции.
mekirile
24 марта 2016, 07:05
modx.pro
39
8 617
+13

Убрать способы оплаты при сумме заказа свыше 1к ?

Добрый день. Как сделать, чтобы при сумме заказа свыше 1000 рублей в корзине отображался новый способ оплаты например с id=5, а все другие пропадали?
mekirile
17 марта 2016, 09:35
modx.pro
902
0