Володя

Володя

С нами с 18 декабря 2012; Место в рейтинге пользователей: #6
Володя
27 ноября 2015, 12:18
+1
разбирайтесь.
пример плагина с подобным функционалом gist.github.com/vgrish/e89d4ad2b708bafeae3b
<?php

switch ($modx->event->name) {
	case 'OnWebPageInit':
		$isAjax = !empty($_SERVER['HTTP_X_REQUESTED_WITH']) AND $_SERVER['HTTP_X_REQUESTED_WITH'] == 'XMLHttpRequest';
		if (empty($_REQUEST['magic_action'])) {
			return;
		}
		$ctx = !empty($_REQUEST['ctx']) ? (string)$_REQUEST['ctx'] : 'web';
		if ($ctx != 'web') {
			$modx->switchContext($ctx);
		}
		/* @var miniShop2 $miniShop2 */
		$miniShop2 = $modx->getService('minishop2');
		$miniShop2->initialize($ctx, array('json_response' => $isAjax));
		if (!($miniShop2 instanceof miniShop2)) {
			@session_write_close();
			exit('Could not initialize miniShop2');
		}
		$cart = $miniShop2->cart;
		$order = $miniShop2->order;
		foreach ($_POST as $field => $value) {
			$value = $order->validate($field, $value);
			if (empty($value) OR (!$value)) {
				$response = $miniShop2->error('Вы должны заполнить требуемые поля', array($field => $value));
				@session_write_close();
		    exit($response);
			}
			$comment .= $field.": ".$value."\r\n";
			$properties[$field] = $value;
		}
		// set
		$id = $_POST['id'];
		$receiver = $_POST['receiver'];
		$email = $_POST['email'];
		$class = $_POST['class'];
		$count = $_POST['count'];
		if (!$modx->getCount('modResource', array('id' => $id, 'published' => 1, 'deleted' => 0))) {
			$response = $miniShop2->error('Данный билет нельзя приобрести!');
			@session_write_close();
		  exit($response);
		}
		// cart
		$cart->clean();
		$cart->add($id, $count, array(
			'receiver' => $receiver,
			'class' => $class,
		));
		$status = $cart->status();
		if (empty($status['total_count'])) {
			$response = $miniShop2->error('Ошибка инициализации покупки!');
			@session_write_close();
		  exit($response);
		}
		// order
		$order->clean();
		$order->set(array(
				'email' => $email,
				'receiver' => $receiver,
				'phone' => '',
				'delivery' => 1,
				'payment' => 3, // msMerchant
				'index' => ' ',
				'address' => ' ',
				'comment' => $comment,
				'properties' => $modx->toJSON($properties)
			)
		);
		$response = $miniShop2->order->submit(array(
			''
		));

		@session_write_close();
		exit($response);

		break;
}
Володя
27 ноября 2015, 12:08
0
Ставите MiniShop2, ставите mspWebpay.
Создаете свою форму покупки и плагин например на OnWebPageInit. В плагине ловите $_POST
инициализируете MiniShop2 и создаете заказ. Затем берете ссылку на оплату и отдаете пользователю.
На сайте будет выглядеть все прозрачно и без корзины — то что вам нужно, плюс вы практически ничего не модифицируете и пользуете стандартные компоненты и не теряете возможность обновления.
Володя
27 ноября 2015, 12:02
0
Добрый день.
modstore.pro/search?query=currencyrate

ps. возможно у вас старая версия MODX?
Володя
26 ноября 2015, 17:24
0
перейти можно. Установщик просто проверяет есть ли системные настройки что были раньше, если они есть — то выдает ошибку.
То есть чтобы накатить обновление нужно удалить системные настройки пакета msFavorites и все.
Но и потом заново указать вызовы сниппетов и если у вас были внесены правки в js то привести его к новому виду. Для того чтобы кто то случайно этого не сделал и включена защита.
Володя
17 ноября 2015, 15:24
0
а так правильно, у вас опции в другой таблице лежат… Значит нужно подправить нужную таблицу github.com/vgrish/currencyrate/blob/master/core/components/currencyrate/processors/mgr/valute/updateprices.class.php#L31
Володя
11 ноября 2015, 19:31
0
откройте сниппет cityselect, там в конце закомментирован формат ответа от SxGeo.
/ * Array
(
    [city] => Array
        (
            [id] => 524901
            [lat] => 55.75222
            [lon] => 37.61556
            [name_ru] => Москва
            [name_en] => Moscow
        )

    [region] => Array
        (
            [id] => 524894
            [name_ru] => Москва
            [name_en] => Moskva
            [iso] => RU-MOW
        )

    [country] => Array
        (
            [id] => 185
            [iso] => RU
            [continent] => EU
            [lat] => 60
            [lon] => 100
            [name_ru] => Россия
            [name_en] => Russia
        )

)
 */
возьмите нужную переменную массива и используйте. Можно выставить в плейсходер на странице, например
$modx->setPlaceholder('iso', $Sx_arr['country']['iso']);
Володя
03 ноября 2015, 12:27
0
что значит добавить оплату?
Заказ оформлен, что вы понимаете под добавлением оплаты?
Володя
02 ноября 2015, 13:50
+1
аналогично примеру с валютами и обращаться к системным процессорам, но тогда вам придется еще поработать с правами.
Либо сделать простую проверку в контроллере согласно вашим требованиям и расширив системные процессоры работать уже с ними.
Володя
02 ноября 2015, 13:09
0
добавьте код
/* событие на добавление товара в корзину */
miniShop2.Callbacks.Cart.add.response.success = function(response) {
	$('.nav').find('.quickview-view').slice(0, 1).trigger('click');
}
/*
.nav - селектор родителя контейнера со снипппетом quickview для корзины
.quickview-view - селектор активного элемента 
*/
Володя
01 ноября 2015, 23:04
0
не ну эт тож так же) Ок. Спасибо, вопрос решен!
Володя
01 ноября 2015, 22:52
0
это мне понятно. Смысл в том чтоб вывести нужную панель в конкретно указанном id
посмотри тут ecc.vgrish.ru/
и иного решения как выше я пока не придумал.
Володя
01 ноября 2015, 22:40
0
спасибо за renderTo и add, теперь ясно отчего такой скрол непредсказуемый.
Вопрос — чтоб не иметь проблем то как лучше добавить панель на страницу?
создать сначала пустую панельку через renderTo и затем через add добавить функциональную панель?
примерно так?
var p = Ext.ComponentMgr.create({
	xtype: 'panel',
	renderTo: "id" 
});
var panel = new base.panel.Home();
p.add(panel);
p.doLayout();
Володя
01 ноября 2015, 22:04
-8
Не знал что еще и именам функций нужна индивидуальность…
Удачи в закрытии, хорошо что есть github.com/modxcms/revolution
Володя
01 ноября 2015, 21:44
-7
часть функционала? Переработка?
Если ты написал компонент с определенным функционалом, то это априори накладывает обязательства на всех? Не повторять идею, не думать, не сравнивать… пользовать как есть и все?

Я говорю о том что мне нужен инструмент, и пользовать Office я бы и рад, и там где это возможно я его и использую без зазрения совести и другим советую. Так же использую в своих же платных приложениях, что помоему говорит о моей адекватности и о том что я не делаю что то просто чтоб было. Компонент Office устраивает всем.

Создание пакета схожим с твоим мотивировано тем что:
— необходим простой и бесплатный пакет для создания небольшой админки другого бесплатного пакета mlmScript
— различием в функционале
— независимостью
Володя
01 ноября 2015, 19:48
0
Привет, не совсем понятно что в итоге получилось. Если есть желание напиши в личку. Спасибо!
Володя
01 ноября 2015, 19:46
-5
Нет интереса устраивать срач. Указана что идея взята у тебя, часть кода что взята с твоего дополнения отмечена. Я не говорю о том что я придумал колесо, я лишь сделал инструмент для работы.
Упоминая два раза в заметке о тебе я всего лишь выразил свое уважение к тебе и к твоей работе.