Alexey

Alexey

С нами с 02 августа 2015; Место в рейтинге пользователей: #109
21 октября 2020, 11:13
0
Немного поясню ситуацию. На сайте нужна регистрация пользователя на одном из трех тарифов. То есть вначале выбираем тариф (кладем товар(тариф) в корзину — перед каждым добавлением товара корзина очищается), потом оформляем заказ. В процессе оформления происходит регистрация. Задача в том, что у зареганного юзера уже есть тариф (заказ) и нужно запретить ему менять-добавлять другой тариф.
21 октября 2020, 11:07
0
Не получится — до отправки формы заказа неизвестен email пользователя, по которому происходит проверка
22 февраля 2020, 09:15
0
Благодарю, Николай — всё сделал)))
21 февраля 2020, 19:28
1
0
Николай, Сергей, спасибо огромное — всё получилось))

Есть ещё небольшой вопрос, подскажите, пожалуйста, если знаете. Вот плагин, расширяющий представление формы в админке:
<?php
switch ($modx->event->name) {
    case 'msOnManagerCustomCssJs':
        if ($page != 'orders') return;
		$modx->controller->addHtml("
            <script type='text/javascript'>
                Ext.ComponentMgr.onAvailable('minishop2-window-orderproduct-update', function() {
    				new_item ={
                            layout: 'column',
                            border: false,
                            anchor: '100%',
                            items: [{
                                columnWidth: 1,
                                layout: 'form',
                                defaults: {msgTarget: 'under'},
                                border: false,
                                items: [{
                                    xtype: 'textfield',
                                    fieldLabel: 'Размер',
                                    name: 'el_size_c',
                                    anchor: '100%'
                                }]
                            }]
                        }
    				this.fields.push(new_item);
                });                
            </script>
        ");
    	break;
}
Получается, что методом push он добавляет поле в конец формы, после поля «Опции товара» — joxi.ru/YmEZ4vqUJMGZb2
Есть какой-то метод, который позволяет добавлять поле после определенного поля, к примеру —
joxi.ru/brRN3vdtYOBJqr

Вот сама форма:
miniShop2.window.OrderProduct = function (config) {
    config = config || {};
    //console.log(config.id);
    Ext.applyIf(config, {
        title: _('ms2_menu_update'),
        width: 600,
        baseParams: {
            action: config.action || 'mgr/orders/product/update',
        },
        modal: true,
    });
    miniShop2.window.OrderProduct.superclass.constructor.call(this, config);
};
Ext.extend(miniShop2.window.OrderProduct, miniShop2.window.Default, {

    getFields: function () {
        return [
            {xtype: 'hidden', name: 'id'},
            {xtype: 'hidden', name: 'order_id'},
            {
                layout: 'column',
                border: false,
                anchor: '100%',
                items: [{
                    columnWidth: .3,
                    layout: 'form',
                    defaults: {msgTarget: 'under'},
                    border: false,
                    items: [{
                        xtype: 'numberfield',
                        fieldLabel: _('ms2_product_count'),
                        name: 'count',
                        anchor: '100%',
                        allowNegative: false,
                        allowBlank: false
                    }]
                }, {
                    columnWidth: .7,
                    layout: 'form',
                    defaults: {msgTarget: 'under'},
                    border: false,
                    items: [{
                        xtype: 'textfield',
                        fieldLabel: _('ms2_name'),
                        name: 'name',
                        anchor: '100%'
                    }]
                }]
            }, {
                layout: 'column',
                border: false,
                anchor: '100%',
                items: [{
                    columnWidth: .5,
                    layout: 'form',
                    defaults: {msgTarget: 'under'},
                    border: false,
                    items: [{
                        xtype: 'numberfield',
                        decimalPrecision: 2,
                        fieldLabel: _('ms2_product_price'),
                        name: 'price',
                        anchor: '100%'
                    }]
                }, {
                    columnWidth: .5,
                    layout: 'form',
                    defaults: {msgTarget: 'under'},
                    border: false,
                    items: [{
                        xtype: 'numberfield',
                        decimalPrecision: 3,
                        fieldLabel: _('ms2_product_weight'),
                        name: 'weight',
                        anchor: '100%'
                    }]
                }]
            },/* {
                //custom
                layout: 'column',
                border: false,
                anchor: '100%',
                items: [{
                    columnWidth: 1,
                    layout: 'form',
                    defaults: {msgTarget: 'under'},
                    border: false,
                    items: [{
                        xtype: 'textfield',
                        fieldLabel: 'Размер',
                        name: 'el_size_c',
                        anchor: '100%'
                    }]
                }]
                //custom
            },*/
            {xtype: 'textarea', fieldLabel: _('ms2_product_options'), name: 'options', height: 100, anchor: '100%'}
        ];
    },

    getKeys: function () {
        return [{
            key: Ext.EventObject.ENTER,
            shift: true,
            fn: function () {
                this.submit()
            }, scope: this
        }];
    },

});
Ext.reg('minishop2-window-orderproduct-update', miniShop2.window.OrderProduct);
01 декабря 2017, 11:44
0
Проблема решена!

Оказалось, что в настройках MODX переменная session_cookie_lifetime имела значение, равное 6. При условии, что по умолчанию она выставлена как 604800. Уж не знаю, кто так подшутил… Соответственно, если я правильно понимаю, данные о товарах в корзине честно хранились аж 6 секунд.

Этот момент выяснился, когда я бросил ковырять шопкипер и принялся за изучение механизма сохранения данных в корзине. Ну, и слово за слово, как говорится! Ступил, конечно, признаю — нужно было сразу задуматься насчет времени хранения данных, а не выискивать ошибки, которых, получается, и не было вовсе.

Единственный момент: я пока не понял, почему корзина не сбрасывалась при авторизованной админке?

02 мая 2017, 18:49
0
Друзья, подскажите, пожалуйста!

Вот сайт (MODX REVO), иконки объектов в нем — мягко говоря — не совсем круглой формы. Не могу понять, где в компоненте YandexMaps править этот косяк.

Вызов сниппета:
[[!yandexMaps?
	&tvCoords=`coords`
	&centerCoords=`59.93602798770931,30.31977342641057`
	&fieldForBalloonContent=`description`
	&fieldForHint=`pagetitle`
    &showMoreLink=`true`
	&styleMapBlock=`height:450px;`
	&objectsTypesJSON=`[
		{
			"InvestProjects": {
				"parent":"65",
				"preset":"islands#orangeStretchyIcon",
				"icon":"/maket/images/red_icon.png",
				"presetText":"камеры и боксы",
				"title":"камеры и боксы"
			},
				"InvestPlaygrounds": {
				"parent":"66",
				"preset":"islands#greenStretchyIcon",
				"icon":"/maket/images/green_icon.png",
				"presetText":"Автоматические",
				"title":"Автоматические"
			},
    			"Investors": {
    				"parent":"67",
    				"preset":"islands#blueStretchyIcon",
    				"icon":"/maket/images/blue_icon.png",
    				"presetText":"Дробемёты",
    				"title":"Дробемёты"
    			}
		}
	]`
]]

Направьте, пожалуйста, буду очень благодарен!
10 сентября 2016, 19:50
0
Сергей, благодарю. «Исполнен!»©
30 июля 2016, 13:54
0
Привет, готов работать на удалёнке, поскольку есть основной источник дохода, а MODX — самое лучшее в жизни увлечение. В котором как раз не хватает иногда совета опытного товарища...))

Есть опыт разработки сайтов на minishop2, на shopkeeper, сайтов-визиток.

Сам из Питера, моя почта: alexxx-ivanow@yandex.ru

PS. Написал и увидел дату поста — вот ведь!)) Ну а вдруг?))
21 июля 2016, 09:49
0
Благодарю за помощь!

Выбрал вариант с плагином — владелец сайта предпочел такой способ.
10 июня 2016, 16:27
0
Нет, Дмитрий, хостинг, к сожалению, так же туп и невосприимчив к разработкам Василия.

Я жду сигнала хозяина, который практически созрел для переноса сайта на другой — более «правильный» — хостинг.
28 мая 2016, 11:19
0
Алексей, благодарю за помощь! В том-то и дело, что я выводил комментарии через pdoPage, включив режим подгрузки новых комментов с помощью кнопки. Но — вместе с ними заново подгружалась форма, и так несколько раз — форма, часть комментов, форма, часть комментов.
Вот вызов сниппета:
[[!TicketComments? 
		                   &limit=`6`
		                   &formBefore=`1` 
		                   &depth=`1`
		                   &gravatarSize=`128` 
		                   &allowGuest=`1` 
                                   &ajaxMode=`button`
		                   &enableCaptcha=`0`
		                   &autoPublish=`1`
		                   &showLog=`0`
		                   ]]
Если же выводить просто постраничной пагинацией, даже аяксом (режим &ajaxMode=`default`), то всё нормально работает — форма, соответственно, на каждую страницу один раз выводится.

Поэтому я пошел по другому пути, вот вызов:

[[TicketComments?
        	           &allowGuest=`1` 
                           &formBefore=`1`
            		   &enableCaptcha=`0`
                         ]]
	
	
	           <div id="pdopage">
                    <div class="rows">
                        [[!pdoPage?
                            &element=`getComments`
                            &ajaxMode=`button`
                            &gravatarSize=`128`
            		    &ajaxElemMore=`#pdopage .also`
            		    ajaxTplMore=`<a class="btn btn-default also" href="#" role="button">Показать ещё</a>`
                        ]]
                    </div>
                    [[!+page.nav]]
                </div>
То есть, при вызове TicketComments, выводится только форма (в чанке tpl.Tickets.comment.wrapper убрал плейсхолдер [[+comments]]), а сами комменты вывожу сниппетом getComments через pdoPage, тогда всё работает корректно! Возможно, что есть более простой вариант, но мне пока что не удалось его найти.
28 мая 2016, 03:21
0
В общем, получилось решить задачу стандартными средствами! Немного поковырял чанки, вывел два сниппета раздельно и мозаика сложилась. Всё равно жалко, конечно, что не получилось сниппет Сергея задействовать — у него получилось очень просто и гладко… Спасибо всем!
28 мая 2016, 02:12
0
Алексей, я был бы очень признателен, если бы Вы показали мне реальный пример вызова сниппета, где присутствует форма для неавторизованных посетителей, расположенная сверху, список комментариев под ней, которые подгружаются заданным количеством при помощи аякса. Мне не удалось найти такого варианта. Тот, который нашел, как Вы понимаете, отказывается нормально работать.

Я попробовал ещё на паре поддоменов с MODX организовать вывод отзывов — в одном та же самая ерунда получмлась, а вот на втором всё заработало с пол-оборота. Странно… хостинг один, учетка одна — просто папки разные!
27 мая 2016, 18:46
0
А, нет, сорри, есть ошибки в логе. Правда, не знаю насколько они связаны с этой проблемой… вот:

[2016-05-26 21:54:16] (ERROR @ /assets/components/tickets/connector.php) Encountered empty IN condition with key id
[2016-05-27 02:18:01] (ERROR @ /connectors/index.php) Path specified for package tickets is not a valid or accessible directory: /home/a/alexxx6c/alexxx6c.bget.ru/public_html/core/components/tickets/model/
[2016-05-27 02:18:02] (ERROR @ /connectors/index.php) Path specified for package tickets is not a valid or accessible directory: /home/a/alexxx6c/alexxx6c.bget.ru/public_html/core/components/tickets/model/
Ясно, что с tickets как-то связано… путь к какой-то папке неправильный?
27 мая 2016, 07:48
0
Странно, не могу понять: всё сделал как написано, но — при нажатии кнопки «предпросмотр» в соответствующем окне выводится массив данных:

Array ( [id] => [thread] => 0 [parent] => 0 [text] => test [raw] => [name] => Alexey [email] => mg151232@yandex.ru [ip] => 0.0.0.0 [rating] => 0 [rating_plus] => 0 [rating_minus] => 0 [createdon] => 2016-05-27 07:38:55 [createdby] => 1 [editedon] => [editedby] => 0 [published] => 1 [deleted] => [deletedon] => [deletedby] => 0 [properties] => Array ( ) [resource] => 8 [mode] => preview [has_parent] => [cant_vote] => 1 [bad] => [gravatar] => https://www.gravatar.com/avatar/81a25e4b12b7a6f64e8a9559311089aa?s=128&d=mm [avatar] => https://www.gravatar.com/avatar/81a25e4b12b7a6f64e8a9559311089aa?s=128&d=mm [url] => http://alexxx6c.bget.ru/comments.html [date_ago] => Только что [fullname] => Alexey [guest] => [comment_edit_link] => 1 [children] => [comment_was_edited] => [comment_new] => )
и на кнопку отправить сниппет никак не реагирует. В консоли ошибок нет, в логе MODX — тоже. Если вызываю обычный сниппет TicketComments, то новый коммент нормально сохраняется. Мой вариант вызова сниппета:

[[!TicketCommentAjax? 
		                   &limit=`6`
		                   &formBefore=`1` 
		                   &parents=`8`
		                   &depth=`0`
		                   &gravatarSize=`128` 
		                   &allowGuest=`1` 
		                   &enableCaptcha=`0`
		                   &autoPublish=`1`
		                   &showLog=`0`
		                   ]]
ПОдскажите, пожалуйста, в какую сторону копать? Вот сама страничка со сниппетом: клик
01 октября 2015, 21:10
0
Интересные дела получаются!

Я вставляю в шаблон форму обратной связи, заполняю поля, отправляю… вот код формы:

<form enctype="multipart/form-data" method="post" action="contact.php" name="contactform" id="contactform">               
                <div class="one_half element_from_left">            
                    <input name="name" type="text" id="name" size="30" placeholder="Имя">
                    <input name="email" type="text" id="email" size="30" placeholder="Почта">                
                    <input name="phone" type="text" id="phone" size="30" placeholder="Телефон">
					<input type="file" name="filet" accept="*/*" id="file_send">
                </div>                
                <div class="one_half last element_from_right">            
                    <textarea name="comments" cols="40" rows="4" id="comments" placeholder="Сообщение"></textarea>            
                </div>                            
                <input type="submit" class="send_message" id="submit" value="Отправить сообщение" />
                </form>
Форма отсылается на отдельный файлик, расположеный в корне сайта, вот его код:

<?php

if(!$_POST) exit;

// Email address verification, do not edit.
function isEmail($email) {
	return(preg_match("/^[-_.[:alnum:]]+@((([[:alnum:]]|[[:alnum:]][[:alnum:]-]*[[:alnum:]])\.)+(ad|ae|aero|af|ag|ai|al|am|an|ao|aq|ar|arpa|as|at|au|aw|az|ba|bb|bd|be|bf|bg|bh|bi|biz|bj|bm|bn|bo|br|bs|bt|bv|bw|by|bz|ca|cc|cd|cf|cg|ch|ci|ck|cl|cm|cn|co|com|coop|cr|cs|cu|cv|cx|cy|cz|de|dj|dk|dm|do|dz|ec|edu|ee|eg|eh|er|es|et|eu|fi|fj|fk|fm|fo|fr|ga|gb|gd|ge|gf|gh|gi|gl|gm|gn|gov|gp|gq|gr|gs|gt|gu|gw|gy|hk|hm|hn|hr|ht|hu|id|ie|il|in|info|int|io|iq|ir|is|it|jm|jo|jp|ke|kg|kh|ki|km|kn|kp|kr|kw|ky|kz|la|lb|lc|li|lk|lr|ls|lt|lu|lv|ly|ma|mc|md|me|mg|mh|mil|mk|ml|mm|mn|mo|mp|mq|mr|ms|mt|mu|museum|mv|mw|mx|my|mz|na|name|nc|ne|net|nf|ng|ni|nl|no|np|nr|nt|nu|nz|om|org|pa|pe|pf|pg|ph|pk|pl|pm|pn|pr|pro|ps|pt|pw|py|qa|re|ro|ru|rw|sa|sb|sc|sd|se|sg|sh|si|sj|sk|sl|sm|sn|so|sr|st|su|sv|sy|sz|tc|td|tf|tg|th|tj|tk|tm|tn|to|tp|tr|tt|tv|tw|tz|ua|ug|uk|um|us|uy|uz|va|vc|ve|vg|vi|vn|vu|wf|ws|ye|yt|yu|za|zm|zw)$|(([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5])\.){3}([0-9][0-9]?|[0-1][0-9][0-9]|[2][0-4][0-9]|[2][5][0-5]))$/i",$email));
}

if (!defined("PHP_EOL")) define("PHP_EOL", "\r\n");

$name     = $_POST['name'];
$email    = $_POST['email'];
//$email    = 'mail@вывески-омск.рф';
$phone   = $_POST['phone'];
$comments = $_POST['comments'];


if(trim($name) == '') {
	echo '<div class="error_message">Внимание! Введите своё имя</div>';
	exit();
} else if(trim($email) == '') {
	echo '<div class="error_message">Внимание! Введите свою почту</div>';
	exit();
} else if(trim($phone) == '') {
	echo '<div class="error_message">Внимание! Введите свой телефон</div>';
	exit();
} else if(!is_numeric($phone)) {
	echo '<div class="error_message">Внимание! Телефон может содержать только цифры.</div>';
	exit();
} else if(!isEmail($email)) {
	echo '<div class="error_message">Внимание! Вы ввели неверный адрес электронной почты, попробуйте еще раз</div>';
	exit();
} else if(trim($comments) == '') {
	echo '<div class="error_message">Внимание! Пожалуйста, введите ваше сообщение.</div>';
	exit();
} 

if(get_magic_quotes_gpc()) {
	$comments = stripslashes($comments);
}


// Configuration option.
// Enter the email address that you want to emails to be sent to.
// Example $address = "joe.doe@yourdomain.com";



//$address = "example@themeforest.net";
$address = "mail@yandex.ru";


// Configuration option.
// i.e. The standard subject will appear as, "You've been contacted by John Doe."

// Example, $e_subject = '$name . ' has contacted you via Your Website.';

$e_subject = 'Вы получили письмо от ' . $name . '.';


// Configuration option.
// You can change this if you feel that you need to.
// Developers, you may wish to add more fields to the form, in which case you must be sure to add them here.

$e_body = "Имя: $name" . PHP_EOL . PHP_EOL;
$e_reply = "Почта: $email\r\nТелефон: $phone\r\n";
$e_content = "\r\nСообщение: $comments" . PHP_EOL . PHP_EOL;


$msg = $e_body . $e_reply . $e_content;

$headers = "From: $email" . PHP_EOL;
$headers .= "Reply-To: $email" . PHP_EOL;
//$headers .= "MIME-Version: 1.0" . PHP_EOL;
//$headers .="Content-Type: multipart/mixed; boundary=\"".$boundary."\"\r\n"; 
//$headers .= "Content-type: text/plain; charset=utf-8" . PHP_EOL;
//$headers .= "Content-Transfer-Encoding: quoted-printable" . PHP_EOL;

//if (isset($_FILES["filet"]["tmp_name"])) {

$attachment = chunk_split(base64_encode(file_get_contents($_FILES["filet"]["tmp_name"])));
$filename = $_FILES["filet"]["name"];
$filetype = $_FILES["filet"]["type"];

$boundary = md5(date("r", time()));

$headers .= "MIME-Version: 1.0\r\n";
$headers .= "Content-Type: multipart/mixed; boundary=\"_1_$boundary\"";
$msg="
--_1_$boundary
Content-Type: multipart/alternative; boundary=\"_2_$boundary\"
--_2_$boundary
Content-Type: text/plain; charset=\"utf-8\"
Content-Transfer-Encoding: 7bit
$msg
--_2_$boundary--
--_1_$boundary
Content-Type: \"$filetype\"; name=\"$filename\"
Content-Transfer-Encoding: base64
Content-Disposition: attachment
$attachment
--_1_$boundary--";
//}

if(mail($address, $e_subject, $msg, $headers)) {
	// Email has sent successfully, echo a success page.
	echo "<fieldset>";
	echo "<div id='success_page'>";
	echo "<h1>Ваше письмо успешно отправлено.</h1>";
	echo "<p>Спасибо <strong>$name</strong>, Мы ответим вам в ближайшее время</p>";
    echo "<pre>";
       print_r($_FILES["filet"]);
    echo "</pre>";
	echo "</div>";
	echo "</fieldset>";
} else {
	echo 'Ошибка отправки почты!';
}
Письмо благополучно уходит, но на ящик приходит всё, кроме вложения!

ОДНАКО:

если я создаю отдельный файл в корне сайта, копирую в него всю форму, отправляю с неё письмо с вложением, то письмо приходит нормально, с вложением…

Отсюда делаю вывод, что дело в самом ModX… господа, можете посоветовать, в какую сторону нужно рыть??? Я пересмотрел все настройки системы, результат — ноль!

Уже моСк кипит…
01 октября 2015, 07:20
0
Добрый день!

Столкнулся с проблемой: есть сайт на modx revo, есть форма обратной связи с вложением, письмо отправляется, вложение — нет! Отправка происходит с помощью обычного php файла в корне сайта, не через классы… пробовал отправлять с другого сайта modx revo — все прекрасно отправляется, включая вложение!

Отсюда сделал вывод, что необходимо подправить какие-то системные настройки сайта… или дело в настройках хостинга? Оба сайта лежат на бегете, только учетки разные, к хостингу проблемного сайта пока доступа нет, к сожалению — только админка…

ПОдскажите, пожалуйста, возможно ли настроить отправку вложений через админку сайта, не применяя классы?

Заранее спасибо!
17 августа 2015, 12:17
0
Вроде, разобрался!

Исправил вызов сниппета и последовательность вызова плейсхолдеров — заработало…

<ul>
[[!siblingNav? 
   &showHidden=`1`
   &prevTpl=`snprevtpl`
   &limit=`2`
   &nextTpl=`snnexttpl`
   &selfTpl=`snselftpl`
   &sortBy=`{"menuindex":"DESC"}`
]]
[[+sn.prev]][[+sn.self]][[+sn.nextlinks]]
</ul>