Scheduler 1.5.0
В рамках работы над MiniShop3 я подготовил новый релиз компонента Scheduler.
Помогите устранить ошибку в коде
Добрый день
Ошибка вот такая.
(ERROR @ httpdocs/core/cache/includes/elements/modplugin/32.include.cache.php: 122) PHP warning: max(): When only one parameter is given, it must be an array
Как её устранить или обойти, чтоб больше её не было.
И какой файл нужно для этого отредактировать?
Как я понимаю «32.include.cache.php» — это временный файл кэша и редактирование его, результата не даст.
Код из этого файла «32.include.cache.php»
Ошибка вот такая.
(ERROR @ httpdocs/core/cache/includes/elements/modplugin/32.include.cache.php: 122) PHP warning: max(): When only one parameter is given, it must be an array
Как её устранить или обойти, чтоб больше её не было.
И какой файл нужно для этого отредактировать?
Как я понимаю «32.include.cache.php» — это временный файл кэша и редактирование его, результата не даст.
Код из этого файла «32.include.cache.php»
<?php
switch ($modx->event->name) {
case 'OnWebPageInit':
$discounts = array(0);
$now = new DateTime();
$yearago = 0;
$yearago = $now->modify('-1 year');
$modx->setPlaceholder('disyearago', $yearago->format('d.m.Y'));
$yearago = $yearago->format("Y-m-d H:i:s");
$modx->setPlaceholder('yearago', $yearago);
$user_id = $modx->user->get('id');
if($user_id != 0){
$profile = $modx->user->getOne('Profile');
//Скидка за ДР
//$dob = $profile->get('dob');
//if($dob && $dob != 0){
// $discounts[] = 0;
//}
//Скидки группам пользователей
//if($admin = $modx->user->isMember('Administrator')){
//$discounts[] = 0;
//}
//Скидки от суммы покупок за год
$q = $modx->prepare("SELECT * FROM modx_ms2_orders WHERE user_id='$user_id' AND createdon > '$yearago' ORDER BY createdon");
$q->execute();
$orders = $q->fetchAll(PDO::FETCH_ASSOC);
$yearcost = 0;
$i = 0;
$firstorder = 0;
if(count($orders)!=0){
foreach($orders as $order){
switch ($order[status]){
case 2:
case 3:
$yearcost = $yearcost + $order[cost];
if($i == 0){
$firstorder = new DateTime($order[createdon]);
$firstorder->modify('+1 year');
$firstorder = $firstorder->format('d.m.Y');
}
$i++;
break;
}
}
$extended = $profile->get('extended');
if($extended['yearcost'] != $yearcost){
$extended['yearcost'] = $yearcost;
$extended['firstorder'] = $firstorder;
if($yearcost < 2500){
$extended['userdiscount'] = 0;
}
if($yearcost >= 2500){
$extended['userdiscount'] = 5;
}
if($yearcost >= 5000){
$extended['userdiscount'] = 10;
}
if($yearcost >= 10000){
$extended['userdiscount'] = 15;
}
$profile->set('extended', $extended);
$profile->save();
}
$discountindicator = 0;
if($yearcost > 0){
$discountindicator = $yearcost * 100 / 10000;
if($discountindicator > 100){ $discountindicator = 100; }
}
$modx->setPlaceholder('discountindicator', $discountindicator);
}
}
break;
case 'msOnGetProductPrice':
if ($modx->context->key == 'mgr') {return;}
//if($data['id'] == 154) {return;}
/**
* Counts discount of current product for current user, based on rules in msDiscount component
* New price must be set in $modx->event->returnedValues['price']
*
* @var msProductData $product Object with product properties
* @var array $data Array with product properties. Can be empty!
* @var float $price Current price of product
*/
if (!isset($modx->event->returnedValues['price'])) {
$modx->event->returnedValues['price'] = $price;
}
// Get link to product price
$price = & $modx->event->returnedValues['price'];
$values = & $modx->event->returnedValues;
$product = $modx->getObject('msProduct', $data['id']);
$id = $data['id'];
$ccat = $product->get('category');
//Скидка пользователя
$user_id = $modx->user->get('id');
if($user_id != 0){
$profile = $modx->user->getOne('Profile');
$extended = $profile->get('extended');
if($ccat != 'special'){
$discounts[] = $extended['userdiscount'];
}
}
//Скидки на продукт
$skidka = $product->get('skidka');
$skidkauntill = $product->get('skidkauntill');
if($$skidkauntill){
$skidkauntill = new DateTime($skidkauntill);
if($now < $skidkauntill){
$discounts[] = $skidka;
$modx->setPlaceholder('productskidka', $skidka);
}
}
//Вычисляем скидку
$discount = max($discounts);
$multiplier = (100 - $discount)/100;
$new_price = round($price * $multiplier);
$modx->setPlaceholder('new_price', $new_price);
if ($new_price !== false) {
$price = $new_price;
}
break;
}
return;
Быстро пересоздать превью продуктов с выбором дапазона через Console
Кого не устраивает скорость пересоздания превью для продуктов через утилиту минишопа и необходимо пересоздать превью не для всех продуктов предлагаю вариант кода
Рекомендую:
1. отключить «Показывать ошибки» в консоле перед исполнением кода
2. увеличить max_execution_time php сервера для большого объема изображений
Актуально для больших каталогов и фотогалерей
Рекомендую:
1. отключить «Показывать ошибки» в консоле перед исполнением кода
2. увеличить max_execution_time php сервера для большого объема изображений
Актуально для больших каталогов и фотогалерей
Разбивка по подкатегориям в mFilter2 - возможна ли?
Здравствуйте!
Можно ли сделать так, чтобы в выводе товаров происходила группировка по подкатегориям? Т.е. не фильтром отсеивать по родителю скажем, а именно список шел с разбивкой (но при этом фильтрация товаров чтобы работала, в частности по родительской подкатегории):
Подкатегория 1
— Товар 1
— Товар 2
— Товар 3
Подкатегория 2
— Товар 4
— Товар 5
— Товар 6
Можно ли сделать так, чтобы в выводе товаров происходила группировка по подкатегориям? Т.е. не фильтром отсеивать по родителю скажем, а именно список шел с разбивкой (но при этом фильтрация товаров чтобы работала, в частности по родительской подкатегории):
Подкатегория 1
— Товар 1
— Товар 2
— Товар 3
Подкатегория 2
— Товар 4
— Товар 5
— Товар 6
[pdoFetch] Как сделать запрос в базу с сортировкой результата?
Добрый день. Возникла необходимость получить объекты класса msProduct из БД с помощью pdoFetch. Получаю так:
$pdo = $modx->getService('pdoFetch');
$pdo->setConfig(array('class' => 'msProduct'));
Но дополнительно нужно, чтобы товары сортировались по возрастанию цены от минимальной к максимальной, а товары с нулевой ценой всегда были в конце (в независимости от направления сортировки, если нужно будет поменять направление на от максимальной к минимальной цене). Как можно сформулировать такой запрос через параметры метода setConfig? Нужен разработчик
30 5
Нужно дополнение к существующему сайту (или реализация в виде отдельного сайта).
Загрузка материалов из opendata (csv, xml) по расписанию. Отображение в каталоге с таблицей свойств документов.
Создание и настройка фильтров для поиска.
Оповещение через рассылку о новых записях, удаление в архив старых.
Варианты реализации через модуль интернет-магазина или просто контентный сайт я ещё не уверен.
Жду предложений цены и способов реализации. За подробностями в личку.
Загрузка материалов из opendata (csv, xml) по расписанию. Отображение в каталоге с таблицей свойств документов.
Создание и настройка фильтров для поиска.
Оповещение через рассылку о новых записях, удаление в архив старых.
Варианты реализации через модуль интернет-магазина или просто контентный сайт я ещё не уверен.
Жду предложений цены и способов реализации. За подробностями в личку.
CompareList отделить строки
Здраствуйте,
столкнулся с такой проблемой при верстке сравнения.
проблема в том что мне нужно
[[+rows]] разместит в [[+head]]
если делаю так то естественно в rows в каждом блоке одинаковый
Кто использует этот модель, помогите пожалуйста разобраться
В техподдержку написал, но Илья долго отвечает
столкнулся с такой проблемой при верстке сравнения.
проблема в том что мне нужно
[[+rows]] разместит в [[+head]]
если делаю так то естественно в rows в каждом блоке одинаковый
Кто использует этот модель, помогите пожалуйста разобраться
В техподдержку написал, но Илья долго отвечает
msPromocode2 как получить сумму скидки через PHP ?
Здравствуйте.
Ситуация следующая:
ломаю/«дорабатываю» модуль выгрузки заказа во Frontpad (хотят дополнительно ещё кучу параметров выгружать, в том числе скидки по промокодам).
Никак не могу сообразить, как мне эту самую скидку «выудить» из заказа (в массиве заказа её нет, через js в свой input не получается впихнуть при клике на кнопку — видимо мой скрипт раньше срабатывает). Остается только как-то уже из готового заказа вытаскивать.
В документации есть пример, как можно получить этот массив с данными на fenom:
Ситуация следующая:
Никак не могу сообразить, как мне эту самую скидку «выудить» из заказа (в массиве заказа её нет, через js в свой input не получается впихнуть при клике на кнопку — видимо мой скрипт раньше срабатывает). Остается только как-то уже из готового заказа вытаскивать.
В документации есть пример, как можно получить этот массив с данными на fenom:
Еще одна форма в кабинете пользователя Office
При использовании плагина Office столкнулся с проблемой добавления на страницу пользователя еще одной формы, куда пользователь мог бы занести какие-то данные. Сниппет написал, на отдельной странице он норм работает, а если в личном кабинете форму заполнять — по клику на кнопку идет перегрузка страницы и данные никуда не пишутся. Чую что надо что-то в код формы дописать чтобы Office понял что это не к нему относится и не лез куда не надо, но вот пока не понял что — подскажите, плиз, кто в теме.
сниппет вызывается в шаблоне личного кабинета tpl.Office.auth.logout, форма выглядит так:
сниппет вызывается в шаблоне личного кабинета tpl.Office.auth.logout, форма выглядит так:
<form method="post" class="form_db mb-4 row align-items-center">
<label>Ссылка на видео</label> <input type="text" size="20" name="videolink" value="[[+extended.video]]" />
<button type="submit" name="videosubmit">сохранить</button>
</form>
[[!videolink]]
Сниппет videolink:<?php
if( !empty( $_POST['videolink'] ) && (isset($_POST['videosubmit']))) {
$video = filter_input(INPUT_POST, 'videolink', FILTER_SANITIZE_STRING);
echo $video;
$user = $modx->user;
$profile = $user->getOne('Profile');
echo $user->username;
$extended = $profile->get('extended');
$extended['video'] = $video;
$profile->set('extended', $extended);
$profile->save();
}
mSync после обновления перестал синхронизироваться
Всем добрый день.
Обновил до последней версии Mod — 2.8.6-pl, обновил mSync и не могу понять, или это связано с обновлением или с количеством товаров. Оказалось, что файл, который должен использовать mSync для записи в базу, который лежит /assets/components/msync/1c_temp приходит «неполноценным», у него нет нормального начала файла, выглядит это начало так у import.xml:
innc0</Ид>
</Группы>
<ЗначенияСвойств>
<ЗначенияСвойства>
<Ид>fb094962-aab2-11e8-9ff4-34e80005b788</Ид>
<Значение>Titbit</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
а у offers.xml вот так:
qLc1UxgLi10NqchByQf1</Ид>
<Артикул></Артикул>
<Наименование>SCHESIR (Шезир) — влажный корм для кошек с цыпленком и ананасом, баночка 85 г</Наименование>
<БазоваяЕдиница НаименованиеПолное=«шт.»>шт.</БазоваяЕдиница>
<Цены>
<Цена>
И вот не могу понять, или файл такой тяжелый, или где то лимиты срабатывают. Количество выгружаемых товаров — 4514 штуки.
Обновил до последней версии Mod — 2.8.6-pl, обновил mSync и не могу понять, или это связано с обновлением или с количеством товаров. Оказалось, что файл, который должен использовать mSync для записи в базу, который лежит /assets/components/msync/1c_temp приходит «неполноценным», у него нет нормального начала файла, выглядит это начало так у import.xml:
innc0</Ид>
</Группы>
<ЗначенияСвойств>
<ЗначенияСвойства>
<Ид>fb094962-aab2-11e8-9ff4-34e80005b788</Ид>
<Значение>Titbit</Значение>
</ЗначенияСвойства>
<ЗначенияСвойства>
а у offers.xml вот так:
qLc1UxgLi10NqchByQf1</Ид>
<Артикул></Артикул>
<Наименование>SCHESIR (Шезир) — влажный корм для кошек с цыпленком и ананасом, баночка 85 г</Наименование>
<БазоваяЕдиница НаименованиеПолное=«шт.»>шт.</БазоваяЕдиница>
<Цены>
<Цена>
И вот не могу понять, или файл такой тяжелый, или где то лимиты срабатывают. Количество выгружаемых товаров — 4514 штуки.