Дмитрий
С нами с 04 сентября 2016; Место в рейтинге пользователей: #1444Генерация превью в формате 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, в частности для того, чтобы цены на товары в корзине обновлялись динамически при смене кол-ва или удалении товара из корзины.