Ilya Gureshidze

Ilya Gureshidze

С нами с 29 декабря 2017; Место в рейтинге пользователей: #506
Ilya Gureshidze
12 января 2020, 19:25
0
Да, но с учетом того, что на момент решения проблемы клиент сам толком не знал, что ему надо — сделал так:
1. оформил метод оплаты картой (по сути копия самовывоза, но зовется так, как мне надо).
2. Сделал страничку для админа (с соотв. правами на просмотр и т.д.). Там админ видит весь список заказов и делает с ними несколько действий, которые тогда были заявлены (уже не помню точно). Но одним из них было действие «отправить счет клиенту». Далее запускался скрипт который оформлял заказ на оплату в сбере через стандартный API сбера через связку Номер заказа на сайте — номер заказа в платежном шлюзе (в базе сайта id заказа в шлюзе сбера сохранялся в спецполе). По факту клиенту высылалась ссылка на оплату в платежном шлюзе (время существования ссылки было выставлено на бесконечное время). Клиент оплачивал заказ и редиректился на страницу успешной оплаты заказа, где по id заказа из GET (это шлюзовский id) менялся статус заказа на сайте.
Ilya Gureshidze
22 августа 2019, 12:07
2
+1
Как обычно: сам задал вопрос — сам отвечаю.
1. Добавил поля id_1C и id_parent_1C в modx_site_content
2. В плагине на OnMODXInit (у меня там куча полей для расширения разных классов)
написал
$modx->map['modResource']['fields']['id_1C'] = '';
    	$modx->map['modResource']['fields']['id_parent_1C'] = '';
    	$modx->map['modResource']['fieldMeta']['id_1C'] = array(
		'dbtype' => 'varchar',
		'precision' => 50,
		'phptype' => 'string',
		'null' => false,
		'default' => ''
	);
	$modx->map['modResource']['fieldMeta']['id_parent_1C'] = array(
		'dbtype' => 'varchar',
		'precision' => 50,
		'phptype' => 'string',
		'null' => false,
		'default' => ''
	);
3. В плагине на OnDocFormSave и onDocFormPrerender
switch ($modx->event->name) {
    case 'OnDocFormPrerender':
        $id_1C = '';
        $id_parent_1C = '';
        
        if (isset($scriptProperties['resource'])) {
            if (is_object($resource)) {
                $id_1C = $resource->get('id_1C');
                $id_parent_1C = $resource->get('id_parent_1C');
            }
        }
$modx->controller->addHtml(<<<HTML
<script>
    Ext.ComponentMgr.onAvailable('modx-resource-main-left', function(page) {
        page.on('beforerender', function() {
            page.insert(2,{
                xtype: 'textfield'
                ,name: 'id_1C'
                ,value: '{$id_1C}'
                ,anchor: '100%'
                ,layout: 'anchor'
                ,fieldLabel: 'ID 1C'
            });
            page.insert(3,{
                xtype: 'textfield'
                ,name: 'id_parent_1C'
                ,value: '{$id_parent_1C}'
                ,anchor: '100%'
                ,layout: 'anchor'
                ,fieldLabel: 'ID родителя 1C'
            });
        })
    });
</script>
HTML
);
        break;
        
    case 'OnDocFormSave':
        $resource->set('id_1C', $_POST['id_1C']);
        $resource->set('id_parent_1C', $_POST['id_parent_1C']);
        break;
}
return;
Все заработало.
Ilya Gureshidze
21 августа 2019, 16:25
0
Проще всего сделать копию конфигурации и применить к нужному тв-полю
Ilya Gureshidze
31 июля 2019, 18:33
0
Если вызов стандартного сниппета типа
[[!getImagesList? &tvname=`product-volume` &tpl=`имя_чанка` &docid=`id_нужного_ресурса`]]

вам недостаточен, то коли вы уже получили значение тв-поля типа MIGX, то продолжите обработку примерно так
$migx = $res->getTVValue('product-volume');
$migxArr = json_decode($migx,true);
$result = '';
foreach($migxArr as $row){
//каждое поле можно получить через $row['ключ_поля']
$result .= '<option value="'.$row["Параметр 1"].'">'.$row["Параметр 2"].'</option>';
}
echo $modx->getChunk('tpl.select',array('rows' => $result));
где tpl.select это
<select>[[+rows]]</select>
Но можно и для option сделать свой tpl и юзать его при чтении migx так же через getChunk
Ilya Gureshidze
30 июля 2019, 11:50
0
У меня сработало вот это в rest/.htaccess
RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-s
RewriteRule ^(.*)$ rest/index.php?_rest=$1 [QSA,NC,L]
RewriteCond %{REQUEST_FILENAME} -d
RewriteRule ^(.*)$ rest/index.php [QSA,NC,L]
Ilya Gureshidze
20 июня 2019, 01:14
0
Все верно) Сделал. Если кому интересно, то вот что предпринял:
1. Создал два события (по факту, даже одно нужно было) в меню системных событий. Имя не важно
2. В core/components/myComponent создал папки elements/plugins и файл plugin.mycomponent.php (любое имя php файла)
3. Создал плагин на созданное ранее событие и указал php файл выше как источник (нажал галочку Статический)
4. В процессоре core/components/migx/processors/mgr/migxdb/update.php вызвал метод
$modx->invokeEvent('myEvent',array('myObj' => $object));
5. Получил в плагине объект myObj, получил alias и если он пустой, то получаем pagetitle у myObj, создаем новый объект класса modResource
$generator = $modx->newObject('modResource'));
и в поле alias у myObj вставляем
$myObj->set('alias',$generator->cleanAlias($pagetitle));
$myObj->save();
родная транслитерация modx сработала!)
Ilya Gureshidze
25 апреля 2019, 14:00
0
Да. именно так, толковый словарь) Объекты словаря (как массива объектов) — это термины, словосочетания и аббревиатуры. У такого объекта есть поля название, транскрипция, перевод, где перевод это ссылки на другие такие же объекты но только в другом языке. Т.е. ввводим Hello, переводим на русский — получаем ссылки на объекты «Привет», «здравствуйте» и т.д., в зависимости от выбранного языка перевода
Ilya Gureshidze
04 февраля 2019, 18:40
0
Разобрался. msOnCreateOrder нужен.
а в нем: (мне просто нужно было дописать к имени блок с ПИН клиента)
$products = $msOrder->getMany('Products');
	foreach ($products as $product) {
		$product->set('name',$product->get('name').' (ПИН '.$_POST["extfld_pin"].')');
		$product->save();
	}
Ilya Gureshidze
01 октября 2018, 17:20
-1
да, прошу прощения, не туда посмотрел. Но тут аналогично, только в чанке tpl.msOrder. Вместо $order.cost ставить
$order.cart_cost и $order.delivery_cost
Ilya Gureshidze
01 октября 2018, 16:54
0
Роман, загляните в чанк tpl.msEmail и вы увидите, что в этом шаблоне есть 2 переменные: $total.cart_cost и $total.delivery_cost. Там есть условие, при котором, в случае $total.delivery_cost != 0 вывести их сумму. Измените вывод просто на две строчки подряд и вуаля) joxi.ru/Y2LMQo9C9OyNpA
Ilya Gureshidze
18 сентября 2018, 13:50
0
А есть навешанная логика на формы и их элементы? на сабмит?
Ilya Gureshidze
18 сентября 2018, 13:12
+1
Предлагаю привести вторую форму к виду первой: убрать action, поле со спамом и посмотреть на результат. Это чисто эксперимент. Где-то явно д.б. ошибка в логах или консоли. Сообщения стандартные ajaxformовские? может, не все видите
Ilya Gureshidze
18 сентября 2018, 13:07
0
Ошибки в журнале, консоли или на сервере в логах есть?
Ilya Gureshidze
18 сентября 2018, 12:54
+1
У вас во второй форме (не рабочей) нет поля с именем contactsMessage, а в валидации есть и помечено required. Потому и не шлется
Ilya Gureshidze
24 июля 2018, 21:41
0
Именно! стал бы я изобретать, когда можно просто вывести заказы по умолчанию через Office minishop2 и навесить стили.
Ilya Gureshidze
11 мая 2018, 11:25
0
Большое спасибо, Роман!
Ilya Gureshidze
10 мая 2018, 15:15
0
А класс не подскажите какой править? а то для MIGX знаю, а для стандартного нет
Ilya Gureshidze
10 мая 2018, 15:14
0
делал так для MIGX превью. Значит одинаково мыслим в этом направлении)
Ilya Gureshidze
09 мая 2018, 17:46
0
Adorazel, приветствую! Как вы сделали поддержку svg превью?
Ilya Gureshidze
09 мая 2018, 16:59
0
Павел, благодарю за скорый ответ!
Попробовал сейчас этот вариант — в превью MIGX вижу только ссылку на файл .svg, но тега img почему-то нет. В журнал ничего из ошибок не записалось. Попробовал указать имя чанка, в котором разместил соответствующий код с тегом img — тоже самое.