Андрей

Андрей

С нами с 09 апреля 2015; Место в рейтинге пользователей: #68

msPaidOptions. Платные опции к товару

Компонент позволяет создавать дополнительные опции к товару, которые могут повлиять на его итоговую стоимость.


Aleksandr Huz
06 мая 2021, 10:13
modx.pro
8
1 888
+18

Интерфейс бана пользователя

Смотрю, что-то заметка про аватар пользователя оказалась слишком простой, поднимем немного градус.
Покажу как будет выглядеть интерфейс бана пользователя по итогу.



Ниже представлен код, куски которого когда-то писали коллеги по данному сайту и чатику в телеграме.
А я уже дописал чего не хватало и собрал все в кучку.
Евгений Webinmd
27 апреля 2021, 10:49
modx.pro
3
815
+15

[СДЕЛАЙ САМ] Генерация, вставка в PDF и последующее чтение QR-кодов на сайте

Всем привет! Всё как всегда, сделал сам, делюсь с другими. Конструктивная критика приветствуется.

Задача: организовать продажу билетов с онлайн оплатой на массовые мероприятия, организуемые заказчиком. Выбор мест не требуется, ограничения только по количеству билетов. Организовать отправку купленных билетов на почту покупателя в формате pdf. Создать систему проверки билетов по qr-коду. Дать возможность администратору сайта оформлять произвольное количество билетов для продажи на входе. Создавать резерв билетов. Закрывать продажу, при отсутствии билетов.

Нам понадобится:
  1. minishop2;
  2. библиотека jsqr.js для считывания qr-кодов;
  3. библиотека mpdf для генерации pdf;
  4. библиотека PHP QR Code для генерации qr-кодов;
Хочу выразить благодарность @Dmytro Lukianenko за скрипт для считывания qr-кодов, сэкономил кучу времени

Информацию о том как работать с MPDF я брал из официальной документации, она у них, насколько я могу судить, нормальная. О том как работать с PHP QR Code прочитал тут.
С предисловием вроде всё. Переходим к решению.
Артур Шевченко
22 апреля 2021, 23:53
modx.pro
10
1 712
+14

[СДЕЛАЙ САМ] DaData. Определение города по ip

Сниппет называется detectRegion. Для работы необходимо зарегистрироваться на сайте DaData и создать системную настройку для ключа api с названием dadata_api_key
<?php
$url = 'https://suggestions.dadata.ru/suggestions/api/4_1/rs/iplocate/address';
$siteIsAvaliable = $modx->runSnippet('isSiteAvailible', array('url' => $url));
if($siteIsAvaliable){
    $token = $modx->getOption('dadata_api_key');
    $ip = $_SERVER['REMOTE_ADDR'];
    $headers = array(
    	'Accept: application/json',
    	'Authorization: Token ' . $token
    );
    $ch = curl_init($url.'?ip='.$ip);
    curl_setopt($ch, CURLOPT_HTTPHEADER, $headers);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt($ch, CURLOPT_HEADER, false);
    $result = json_decode(curl_exec($ch),1);
    curl_close($ch);
    $region = $result['location']['data']['city'];
    return  $region;
}else{
    $modx->log(1, 'detectRegion: Не возможно определить регион. Сервис DaData недоступен');
    return false;
}
P.S. isSiteAvailible
Артур Шевченко
09 апреля 2021, 23:28
modx.pro
5
1 098
+3

Отложенная отправка писем из minishop2 клиенту

Стояла задача ускорить формирование заказа. Слабым звеном на сайте оказалась отправка почты. Было решено ее отправлять после формирования заказа.

Для этого возникла идея сделать следующее:
1. Отключаем оповещение у новых заказов
2. Создаем новый статус заказа Оповещение с идентичными чанками.
3. Пишем сниппет и вызываем его из CronManager:
<?php
// смотрим последний заказ
$c = $modx->newQuery('msOrder');
$c->where(array('type' => 0));
$c->limit(1);
$c->sortby('id', DESC);

$miniShop2 = $modx->getService('miniShop2');
$results = $modx->getIterator('msOrder', $c);

foreach ($results as $result) {
         $order_id = $result->get('id');
         $status = $result->get('status');\
		 // если статус заказа Новый
         if ($status == '1') {
             $miniShop2->changeOrderStatus($order_id, 25);
             $output = $order_id.' - '.$status;
         }
     }

//Пишем результат в лог по адресу: core/cache/logs/order.new.log
$modx->log(modX::LOG_LEVEL_ERROR,$order_id, array(
    'target' => 'FILE',
    'options' => array(
        'filename' => 'order.new.log'
    )
));

return $output;
Вроде все работает.

Вопрос: все ли сделано верно и есть ли более правильное решение?
Валентина Павлова
17 февраля 2021, 18:32
modx.pro
2
573
+1

[Расширяем miniShop2] Быстрая смена статуса заказа через контекстное меню


Заказчика запарило для смены статуса лазать в полное редактирование заказа, попросил сделать что-то быстрое и простое. На скриншоте выше конечный результат. Чтобы получить такой же, файлы из этого репозитория закиньте себе в папку /assets/ и создайте плагин, который описан в конце статьи. Однако, я настоятельно рекомендую почитать статью, чтобы понимать принцип расширения всего этого дела.
Павел Гвоздь
12 января 2021, 20:54
modx.pro
16
1 461
+25

Создание ресурсов, через Modx API

Поле createdon проставляется текущей датой, а publishedon вообще не подставляется. Как сделать чтобы они подставлялись из массива?
<?php
$array = array(
  array('pagetitle' => '16 октября - открытие театрального ..','content' => 'Нельзя не отметить ....','date' => '1444946460')
);

foreach($array as $v){
  $response = $modx->runProcessor('resource/create', array(
    'template' => 3,
    'isfolder' => 0,
    'published' => 1,
    'createdby' => 2,
    'parent' => 2,
    'pagetitle' => $v['pagetitle'],
    'createdon' => $v['date'],
    'publishedon' => $v['date'],
    'introtext' => $v['introtext'],
    'content' => $v['content'],
    'class_key' => 'Article',
  ));
  if ($response->isError()) {
    return $modx->error->failure($response->getMessage());
  }
  $modx->cacheManager->clearCache();
}
РЕШЕНО!
foreach($array as $v){
  $response = $modx->runProcessor('resource/create', array(
    'template' => 3,
    'isfolder' => 0,
    'published' => 1,
    'createdby' => 2,
    'parent' => 2,
    'pagetitle' => $v['pagetitle'],
    'createdon' => date("Y-m-d H:i:s" , $v['date']),
    'publishedon' => date("Y-m-d H:i:s" , $v['date']),
    'introtext' => $v['introtext'],
    'content' => $v['content'],
    'class_key' => 'Article',
  ));
  if ($response->isError()) {
      return $modx->error->failure($response->getMessage());
    }
    $modx->cacheManager->clearCache();
}
Сергей Самусев
27 декабря 2020, 21:03
modx.pro
1
1 166
0

Localizator, модификаторы для получения переводов

Локализатор очень хорошая штука и хотелось ее опробовать, но как то не задалось переносить уже готовые данные со всего сайта в поля локализатора. Пришлось искать решения для вывода данных и при том с учетом того что же есть в основном контенте страниц.
Итак… модификаторы для вывода данных, пошагово:

1. создаем плагин…
Юрий Фомин
01 декабря 2020, 18:41
modx.pro
10
1 248
+15

[СДЕЛАЙ САМ] Добавляем отображение прогресса загрузки файлов в AjaxForm

Пишу себе на память, но вдруг кому-то тоже нужно. На 17-ю строку в этом файле assets/components/ajaxform/js/default.js добавляем вот такой код
Артур Шевченко
01 декабря 2020, 13:49
modx.pro
4
799
+1

Управления плагинам minishop2 или добавление полей в ms2_products через компонент [msAddField]

Все давно уже познакомились с методом добавления полей через плагины который написал Василий еще в каком то 17 или 2018 году, может раньше

Давно уже написал класс для управления полями через мой компонент который так и не представился миру msCml (синхронизация 1С с характеристикам msOptionsPrice2).

На этих выходных все таки дошли руки и собрал таки компонент msAddField (пока только на github, для самых маленьких))))): там же ссылка на яндекс диск)
Андрей Степаненко
13 октября 2020, 17:11
modx.pro
29
4 050
+22