Дмитрий
С нами с 04 сентября 2016; Место в рейтинге пользователей: #1480Генерация превью в формате webp для miniShop2
            С приходом поддержки webp в MODX участились вопросы о возможности генерации превью товаров miniShop2 в этом формате. По началу казалось что все должно работать из коробки, но на практике этого нет.
Причиной оказалось отсутствие расширения webp в источнике файлов MS2 и в двух системных настройках ('upload_files','upload_images').
        
        
        
        
    Причиной оказалось отсутствие расширения webp в источнике файлов MS2 и в двух системных настройках ('upload_files','upload_images').
Женим mFilter2 и msListOrders
            Выводим заказы miniShop2, фильтруем с помощью mFilter2. 

Необходимые компоненты
— msListOrders
— mSearch2
— протестировать на демо сайте
        
        
        
        
    
Необходимые компоненты
— msListOrders
— mSearch2
— протестировать на демо сайте
Редирект на свою страницу после оформления заказа
            Для Minishop2 версий >= 2.4.* Думаю, информация будет полезна начинающим разработчикам: можно на простой задаче заодно и немного разобраться в логике работы магазина.
        
        
        
        
    [Решено] Как добавить новое поле в таблицу заказов?
            Возникла необходимость добавления нового поля в таблицу заказов.
В документации не нашёл ничего по этому вопросу. Также как и в поиске ничего дельного.
В документации сказано, что есть 4 вида служб — cart, order, delivery, payment
А order как я понял отвечает за процесс оформления заказа, а не за таблицу.
        
        
        
        
    В документации не нашёл ничего по этому вопросу. Также как и в поиске ничего дельного.
В документации сказано, что есть 4 вида служб — cart, order, delivery, payment
А order как я понял отвечает за процесс оформления заказа, а не за таблицу.
Вставка копирайтов при копировании текста на сайте
            Головная боль многих новостных сайтов — копирование оригинального текста и его использование на других сайтах. 
В качестве официального решения проблемы — предлагается автоматическое добавление копирайтов при копировании текста в буфер обмена. Копирайт может содержать ссылку на сайт-источник, что дает дополнительное SEO преимущество.
Ниже я предлагаю найденное мною и немного оптимизированное решение этого вопроса.
        
        
        
        
    В качестве официального решения проблемы — предлагается автоматическое добавление копирайтов при копировании текста в буфер обмена. Копирайт может содержать ссылку на сайт-источник, что дает дополнительное SEO преимущество.
Ниже я предлагаю найденное мною и немного оптимизированное решение этого вопроса.
Вывод заказов пользователя и товаров заказа
            Нужна была возможность вывода заказов клиента и товаров в этих заказах. Велосипедов много, мой один из них.
1) Снипет для вывода заказов:
2) Снипет вывода товаров заказа:
Писал потому как, во первых учусь писать, во вторых быстрее написать чем искать подходящее решение и допиливать его. Буду рад советам и исправлениям. Пригодились бы советы по поводу:
1) сырого SQL:
        
        
        
    1) Снипет для вывода заказов:
<?php
// снипет выводит заказы текущего пользователя
$user_id = $modx->user->get('id');
$tpl = $modx->getOption('tpl',$scriptProperties,'tpl.order');
// подхватываем заказы текущего пользователя
$q = $modx->newQuery('msOrder', array('user_id' => $user_id));
$results = $modx->getCollection('msOrder', $q);
// выводим или чанками или предупреждением что заказов пока нет
foreach ($results as $result) {
  if ( $result ) {
    $resultArray = $result->toArray();
    $output .= $modx->getChunk($tpl,$resultArray);
  } else {
    $output = 'У вас пока еще нет заказов.';
  }
}
return $output;и соответственно чанк tpl.order (на феноме):<div>
  <div> Заказ <span>{$_pls['num']}</span> от <span>{$_pls['createdon']}</span> года</div>
  <div>
    {$_modx->runSnippet('!msOrdersProducts', ['order'=>$_pls['id']])}
  </div>
</div>2) Снипет вывода товаров заказа:
<?php
// выводит товары заказа.
$tpl = $modx->getOption('tpl',$scriptProperties,'tpl.order_cell'); // если товар найден
$tpl_empty = $modx->getOption('tpl',$scriptProperties,'tpl.order_cell_empty'); // если товар не найден
// ищем товар по id заказа
$q = $modx->prepare("SELECT * FROM ".$modx->getOption('table_prefix')."ms2_order_products WHERE order_id=".$order);
$q->execute();
$results = $q->fetchAll(PDO::FETCH_ASSOC);
$output;
// перебором либо выводим нужный заказ, либо оповещаем что его уже нет
foreach ($results as $result) {
  $res = $modx->getObject('modResource', array('pagetitle'=>$result[name]));
  
  if ($res) {
    $resArray = $res->toArray();
    $output .= $modx->getChunk($tpl,$resArray);
  } else {
    $prodName = $modx->setPlaceholder('name', $result[name]);
    $output .= $modx->getChunk($tpl_empty);
  }
}
return $output;и соответственно чанк tpl.order_cell (на феноме):<div>
  <span><a href="{$id | url}">{$pagetitle}</a></span>
  <span>{$price} Р</span>
</div>и чанк в том случае если товара уже нет tpl.order_cell_empty:<div>
  <span>{$_pls['name']}</span>
  <span>не найден</span>
</div>Писал потому как, во первых учусь писать, во вторых быстрее написать чем искать подходящее решение и допиливать его. Буду рад советам и исправлениям. Пригодились бы советы по поводу:
1) сырого SQL:
$q = $modx->prepare("SELECT * FROM ".$modx->getOption('table_prefix')."ms2_order_products WHERE order_id=".$order);
$q->execute();
$results = $q->fetchAll(PDO::FETCH_ASSOC);2) Первоначально хотел все в первом снипете вывести вот тут (далее в коде), но не получилось. Если кто подскажет буду рад.// выводим или чанками или предупреждением что заказов пока нет
foreach ($results as $result) {
  // думал тут подхватить товары, но что с ними дальше так и не придумал...
  if ( $result ) {
    $resultArray = $result->toArray();
    $output .= $modx->getChunk($tpl,$resultArray);
  } else {
    $output = 'У вас пока еще нет заказов.';
  }
}Всем успехов.        [UPDATE] Разные скидки в зависимости от общей суммы корзины
            По следам записи Михаила Воеводского и этого объявления о работе был написан плагин для miniShop2, который позволяет выставить скидку в процентах для всей корзины в зависимости от общей суммы корзины.
Скидка выставляется пошагово: по достижении определённых сумм применяется своя скидка. К примеру, корзина стоит 100кр — скидка 10%, 150кр — 15%. При желании можно выставить сколько угодно шагов и какой угодно процент. Данные указываются массивом в самом начале плагина, вот так:
        
        
        
        
    Скидка выставляется пошагово: по достижении определённых сумм применяется своя скидка. К примеру, корзина стоит 100кр — скидка 10%, 150кр — 15%. При желании можно выставить сколько угодно шагов и какой угодно процент. Данные указываются массивом в самом начале плагина, вот так:
$discounts = array(
    '100000' => '10%',
    '150000' => '15%',
    '200000' => '20%',
);Часть кода была взята из компонента msPromoCode, в частности для того, чтобы цены на товары в корзине обновлялись динамически при смене кол-ва или удалении товара из корзины.