Виталий Греков

Виталий Греков

С нами с 29 мая 2013; Место в рейтинге пользователей: #390
Максим Кузнецов
04 февраля 2015, 10:11
1
0
Ммм…

Тогда предложу 2 варианта:

1. немного допилить этот вариант — modx-shopkeeper.ru/download/paid-extras/import-eksport2.html
2. Ждать и посматривать на эту тему
(вариант из разряда «сделать самому», думаю, описывать не требуется :) )
Максим Кузнецов
31 января 2015, 21:35
5
+3
Помогу с решением.

Вызываем сниппет Login:
[[!Login? &loginTpl=`fastLoginTpl` &errTpl=`fastLoginError`]]

Чанк формы для авторизации fastLoginTpl:
<div style="display: none;" id="authErrors">[[+errors]]</div>
<form class="loginForm" id="iWannaLogin" action="[[~[[*id]]]]" method="post">
	<div class="login">
		<input id="loginForm" name="username" class="roundInput" type="text" placeholder="Логин" title="Ваш логин">
	</div>
	<div class="password">
		<input id="passwordForm" name="password" class="roundInput" type="password" placeholder="Пароль" title="Ваш пароль">
	</div>
	
	<input class="returnUrl" type="hidden" name="returnUrl" value="[[+request_uri]]" />
	<input class="loginLoginValue" type="hidden" name="service" value="login" />
	
	<div class="submit">
		<a rel="nofollow" href="[[~17]]">Я - тупой, забыл пароль..</a>
		<input id="ajaxLoginButton" type="submit" name="Login" value="Войти" />
	</div>
</form>

Чанк для вывода ошибки fastLoginError:
[[+msg]]

Скрипт js, обрабатывающий событие отправки формы (нужен подключенный jquery):
<script type="text/javascript">
	$(document).ready(function(){
		$("#iWannaLogin").bind("submit", function() {

			$("#authErrors").text("");
		
			//здесь можно допилить подсветку полей с ошибкой
			if ($("#loginForm").val().length < 1 && $("#passwordForm").val().length < 1) {
				$.jGrowl("Введите логин и пароль", {group: "m-Error"});
				return false;
			}
			if ($("#loginForm").val().length < 1) {
				$.jGrowl("Введите логин", {group: "m-Error"});
				return false;
			}
			if ($("#passwordForm").val().length < 1) {
				$.jGrowl("Введите пароль", {group: "m-Error"});
				return false;
			}

			$.ajax({
				type: "POST",
				cache: false,
					url: "[[~[[*id]]]]",
				data: $(this).serializeArray(),
				beforeSend: function(){
					$("#ajaxAuth .closeBlock").css("display", "none");
					$("#ajaxAuth .ajaxLoad").css("display", "block");
					
					$("#ajaxLoginButton").prop("disabled", true);
				},

				success: function(data) {
					$("#ajaxAuth .closeBlock").css("display", "block");
					$("#ajaxAuth .ajaxLoad").css("display", "none");
			
					var errMessage = $(data).find("#authErrors").text();
				
					if(errMessage == ""){
						window.location = "адрес для переадресации при успешной авторизации";
					}
					else{
						$("#authErrors").text(errMessage);
						$.jGrowl($("#authErrors").text(), {group: "m-Error"});
					}
				},
				
				complete: function(){
					$("#ajaxLoginButton").prop("disabled", false);
				}
			});
			return false;
	
		});
	});
</script>

— я еще подключил плагин jgrowl для отправления алертов. В его же вызове group: «m-Error» — класс для всплывающего бокса (красный, с ошибкой).
Если jgrowl не нужен — то вместо него вставляем в поле для ошибок желаемый ответ. Пример:
$("#authErrors").text("текст ошибки").css("display", "block");

#ajaxAuth .ajaxLoad — в моем примере форма с индикатором загрузки, которая появляется при обработке аякс-запроса.
Василий Наумкин
14 января 2015, 20:10
2
+1
Шли спасибу =)
[[!pdoResources?
	&class=`msVendor`
	&where=`{"id:IN":[1,2,3,4,5]}`
	&sortby=`name`
	&sortdir=`ASC`
]]
Василий Наумкин
12 января 2015, 10:33
1
0
Кэширование нужно только на слабых серверах, а у тебя должен быть нормальный VPS.

Приличные url можно реализовать через настройку Nginx или вот так.

можно ли к тебе обратиться за этими доработками?
Напрямую — нет. На вопросы в сообществе я и так стараюсь отвечать.
Андрей Сухомозгий
19 октября 2014, 22:50
1
0
Василий, заказы смог вывести. Понял, что все просто было) Спасибо)
Позволь еще спросить…
Вот так например выводятся заказы залогиненого пользователя у него в личном кабинете:
[[!pdoResources?
    &class=`msOrder` 
    &showLog=`1` 
    &sortby=`createdon`
    &tpl=`tpl.FastOrder`
    &where=`{"user_id:LIKE":"[[!stupid_user_id]]"}`
    ]]
В чанке tpl.FastOrder вывожу параметры заказа. Например [[+num]] и прочее… Но вот понять не могу, почему если в этом же чанке вывести
[[!orderPrint? &tpl=`orderPrint.LinkTpl` &orderId=`[[+id]]`]]
То, выводятся ссылки на печать с пустым href. При этом даже если в &orderId подставить число, то все равно пусто…
Богдан
13 октября 2014, 19:20
2
+2
Я так понимаю, цены только в корзине нужно менять? Я сделал такой функционал через плагин. Создаем плагин cartProcessing, вешаем на него события msOnAddToCart, msOnChangeInCart, msOnRemoveFromCart.
Текст плагина:
<?php
switch ($modx->event->name) {
    case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart':
        $miniShop2 = $modx->getService('minishop2','miniShop2',
        	MODX_CORE_PATH . 'components/minishop2/model/minishop2/', $scriptProperties);
        if (!($miniShop2 instanceof miniShop2)) return '';
        
        // Инициализируем класс в текущий контекст
        $miniShop2->initialize($modx->context->key, $scriptProperties);
        $total_count = $miniShop2->cart->status()['total_count'];
        $tmp = $miniShop2->cart->get();
        if ($total_count > 4) { // если 5 и более товаров - оптовые цены, в интернет-магазине оптовые цены забиваются в поле article
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$optPrice = $product->get('article'); // вместо article можно указать любое другое поле товара
                	$tmp[$key1]['price'] = $optPrice;
                }
            }
        }
        else {
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$realPrice = $product->get('price');
                	$tmp[$key1]['price'] = $realPrice;
                }
            }
        }
        $miniShop2->cart->set($tmp);
        break;
}
В данном случае, если в корзине 5 и более товаров будут отображены оптовые цены, меньше 5 шт. — розничные. Оптовые цены будут браться из поля article (можно исправить под любое поле товара).
Василий Наумкин
19 сентября 2014, 21:50
1
0
Забацай плагин, который будет редиректить с любой страницы сайта на корзину:
if (!empty($_GET['msorder'])) {
	// ...
}
Владимир
24 августа 2014, 13:21
1
+1
Посмотрите MetaTager — пакет для умного вывода Meta- заголовков github.com/ershov-ilya/xcontent и xContent — пакет для расстановки внутренней перелинковки в текстах сайта github.com/ershov-ilya/MetaTager этого разработчика