Alexey

Alexey

С нами с 02 августа 2015; Место в рейтинге пользователей: #201

Обнуляющие смайлики (или почему minishop2 отправляет заказы без товаров)

Всем привет.
Буквально вчера, словил неприятную багу.

(P.S. вполне возможно что многие знают об этой баге. Но ради интереса решил воспроизвести данную багу на других сайтах — в 90% случаев ошибка воспроизводится).

Имеется сайт на MODX Revolution 2.7.3 в связке с miniShop2 2.5.0.
Бага заключалась в том, что пришёл «пустой» заказ. Т.е. все реквизиты клиента в письме и заказе есть, а вот товаров в этом заказе нет.

Долго и упорно не мог понять в чём же проблема. Благо есть вебвизор и он таки помог воспроизвести ошибку.

Дело оказалось в смайликах. Которые были вставлены в комментарий к заказу.
Дмитрий Танцирев
18 июля 2020, 08:46
modx.pro
8
2 421
+8

Вывод фоток с Instagram по тегу или юзеру без токена

Всем привет!

Если у вас есть задача вывести фотографии по нику или тегу то можете использовать данное решение:

Иван Бочкарев
14 апреля 2020, 17:52
modx.pro
19
2 376
+13

Проблемы с MIGX после переноса на другой хостинг. Решено

Приветствую!
Сделал сайт перенес на хостинг заказчика. Вроде бы все было нормально. Прошло чуть больше месяца. Зашел на сайт добавить информацию и обнаружил проблему. При редактировании и добавлении строки TV типа MIXG страница и модальное окно съезжают вверх (за пределы окна браузера). Если уменьшить зум страницы, то видно что в модальном окне данные грузятся бесконечно.
Александр Лунегов
06 апреля 2020, 20:45
modx.pro
1
838
0

Теория выгрузок из 1С в MODX (часть 1 из 2)

И снова привет!
Выгрузка товаров на сайт — это самый, самый частый кейс моей мини-студии. Для реализации мелких-средних интернет-магазинов используем классическую и сверхпопулярную связку MODX+miniShop2, для крупых — нет, но я как-нибудь обязательно расскажу почему.
Павел Бигель
06 апреля 2020, 19:10
modx.pro
13
5 565
+17

Пошаговая работа скрипта в Console

Здравствуйте, необходимо выполнить данный скрипт
$q = $modx->newQuery('msProduct');
$q->where(array('parent' => '9'));
$col = $modx->getCollection('msProduct', $q);
foreach ($col as $item){
    $oe_number = $item->get('oe_number');
    $article = $item->get('article');
    $old_price = $item->get('old_price');
    $price = $old_price * 1.2;
    $item->set('price', $price);
    if (empty($oe_number)) {
      $item->set('oe_number', $article);
    }
    $item->save();
}
Но так как товаров порядка 30 000, то нужно разбить на пошаговое выполнение, нашел данную шпаргалку — ilyaut.ru/cheats/step-by-step-the-script-in-console/, но мозгов доделать не хватает, вот что получилось

<?php
// Сколько ресурсов обрабатывать за раз
$step = 1;
// Если процесс уже остановлен, сбрасываем OFFSET
if (!isset($_SESSION['Console']['completed'])) {
    $_SESSION['console_offset'] = 0;
}
$offset = isset($_SESSION['console_offset']) && $_SESSION['console_offset'] ? $_SESSION['console_offset'] : 0;

// Формируем запрос

$q = $modx->newQuery('msProduct');
$q->where(array('parent' => '9'));
$total = $modx->getCount('msProduct', $q);

// Пропускаем все уже обработанные объекты
$q->limit($step, $offset);
$resources = $modx->getCollection('msProduct', $q);

// Обработка
foreach ($resources as $resource){
  $oe_number = $resource->get('oe_number');
  $article = $resource->get('article');
  $old_price = $resource->get('old_price');
  $price = $old_price * 1.2;
  $resource->set('price', $price);
  if (empty($oe_number)) {
    $resource->set('oe_number', $article);
  }
  $resource->save();
  print "<p>Processing resource <b>".$resource->get('pagetitle')."</b></p>";
}

// Меняем offset
$_SESSION['console_offset'] = $offset + $step;
if ($_SESSION['console_offset'] >= $total) {
  $sucsess = 100;
  $_SESSION['Console']['completed'] = true;
  unset($_SESSION['console_offset']);
} else {
  $sucsess = round($_SESSION['console_offset'] / $total, 2) * 100;
  $_SESSION['Console']['completed'] = false;
}
for ($i=0; $i<=100; $i++) {
    if ($i <= $sucsess) {
        print '=';
    } else {
        print '_';
    }
}
$current = isset($_SESSION['console_offset']) ?
           $_SESSION['console_offset'] :
           ($sucsess == 100 ? $total : 0);
print "\n";
print $sucsess.'% ('.$current.')'."\n\n";
Подскажите, как правильно написать пошаговое выполнение скрипта
Максим
03 апреля 2020, 20:59
modx.pro
1
1 238
0

modExtra. Новые "плюшки" к чаю

Давно я не писал статей и заметок о нашем любимом MODX. Настало время это исправить. Пакет modExtra не обновлялся с июля 2019ого, по этому я решил добавить свои наработки за пару лет.

SEQUEL.ONE
17 марта 2020, 20:23
modx.pro
6
1 918
+11

Шпаргалка на все случаи жизни

Полезные ссылки, которые Вам пригодятся в некоторых ситуациях.
Михаил
07 февраля 2020, 21:42
modx.pro
70
2 150
+35

Как в админке с помощью ExtJS отследить изменение значения TV и поменять его сразу или перезагрузкой стараницы?

Есть плагин изменения значения tv при определенных условиях.

if ($modx->event->name == 'OnDocFormSave' && $mode != 'new') {
//куча условий
//.......

// меняем значение TV
$resource->setTVValue('my_tv', 'Новое значение');

//...
}


//перезагружает страницу в админке при каждом сохранении ресурса
//НЕ пойму как сделать, чтобы перезагружалось только при изменении значения TV
if ($modx->event->name == 'OnDocFormPrerender' && $mode != 'new') {
	
	$modx->controller->addHTML('
	<script type="text/javascript">
	
		Ext.ComponentMgr.onAvailable("modx-panel-resource", function (e) {
		    var res = Ext.getCmp("modx-panel-resource");
		    res.on("beforeSubmit", function(){			
				//Перезагрузка страницу после сохранения
		        location.reload();
		    });
		   
		});
    </script>');	
}
Данная конструкция перезагружает страницу в админке при каждом сохранении ресурса, НЕ пойму как сделать, чтобы перезагружалась только при изменении значения TV… Не могу передать значение переменной из кода на событие OnDocFormSave в код на событие OnDocFormPrerender, представляется, что это невозможно…
Дмитрий
31 января 2020, 00:44
modx.pro
2
1 022
0

Модифицируем HTML на лету

Привет друзья. Хочу поделиться методикой, которую иногда использую в тех случаях, когда мне нужно подменить или каким то образом модифицировать на лету готовый HTML. Причем сделать это на уровне сервера, а не через JS.

Николай Савин
13 октября 2019, 20:28
modx.pro
17
4 477
+18

Curl клиент modx

Встроенный curl клиент для отправки запросов на сторонние сервисы (RESTful и другие).
Так как все чаще используются сторонние сервисы в повседневной разработке сайтов, для этих целей в modx есть встроенный клиент, с помощью которого можно отправлять запросы:

/* @var modRest $client */
$client = $modx->getService('rest', 'rest.modRest');
$response = $client->get('GET запрос');
или
$response = $client->post('POST запрос');

// Обработка полученных данных в json или xml формате и преобразование их в массив
$array = $response->process();
В заметке перечислены способы работы с клиентом
Андрей Степаненко
12 августа 2019, 07:56
modx.pro
34
4 955
+39