Иван Бочкарев

Иван Бочкарев

Был в сети 36 минут назад
Заказы не принимаю
Максим
Максим
Недавно ковырялся в скриптах минишопа, заметил, что нет callback-функции для miniShop2.Cart.status(). А ведь могло бы пригодиться (например, с той же мини-корзиной какие-то действия производить, добавлять классы или что-то еще).
И вообще, в чем преимущества этих callback? Почему бы не сделать через события? Например, написать (можно на чистом JS):
$(document).trigger('beforeAddToCart', options)
А там кому надо, тот напишет
$(document).on('beforeAddToCart', function(event, options){});
Как минимум короче код и привычнее.
Ivan
Ivan
1) В базе данных в таблице PREFIXms2_product_links добавляете поле sort типа INT со значение по умолчанию 500.
2) Создаете файл /assets/components/minishop2/js/mgr/product/links.grid.custom.js. Файл можете скачать по ссылке
cloud.mail.ru/public/n6em/21JzhRihW
4) Создаете плагин, вешаете на событие msOnManagerCustomCssJs и пишете в нем
<?php
switch ($modx->event->name) {
    
    case 'msOnManagerCustomCssJs':
        if ($page != 'product_update') return;
        
        $assetsUrl = '/assets/components/minishop2/';
        $modx->controller->addLastJavascript($assetsUrl . 'js/mgr/product/links.grid.custom.js');
  break;

}
5) Создаете файл /assets/components/minishop2/getSort.php. Скачать можно по ссылке cloud.mail.ru/public/3cUV/57yeWGajo

Далее очищаете кэш браузера. На странице установки связей появится кнопка «Изменить сортировку». Вам необходимо выбрать строчку и нажать кнопку. Задаете сортировку и нажимаете ОК.

Что бы потом сортировать по этому полю при выводе msProducts в поле &sortby вам нужно указать { «Link.sort»:«ASC» }

P.S. Данный код ни на что не претендует. Используйте его на свой страх и риск. Если будет время, то перепишу и обновлю комментарий.
Евгений Webinmd
Евгений Webinmd
у меня такой код

js
$('.bminus').on('click',function () {
    var $input = $(this).parent().find('input');
    var val = +$input[0].defaultValue;
    var count = parseInt($input.val()) - 1;
    count = count < 1 ? 1 : count; 
    $input.val(count);
    $input.change();
    return false;
});

$('.bplus').on('click',function () {
    var $input = $(this).parent().find('input');
    var val = +$input[0].defaultValue; 
    $input.val(parseInt($input.val()) + 1);
    $input.change();
    return false;
});
html
<div class="quantity">
    <input type="text" name="count" value="1"  required>
    <span class="bplus"></span>
    <span class="bminus"></span>
</div>
Aleksandr Huz
Aleksandr Huz
Мое решение:
1. В форму вставляем скрытое поле с файлом
<input type="hidden" name="attach_file" value="IMG_1035.JPG" />

2. Удаляем хук email

3. Добавляем свой хук (email_file)
<?php
$pdo = $modx->getService('pdoTools');
$siteName = $modx->getOption('site_name');
$emailsender = $modx->getOption('emailsender');
$emailTo = $modx->getOption('emailTo', $scriptProperties, $emailsender, true);
$fields = $hook->getValues(); 
$message = $pdo->getChunk('email', $fields);
$subject = $modx->getOption('emailSubject', $scriptProperties, $siteName, true);

$modx->getService('mail', 'mail.modPHPMailer');
$modx->mail->set(modMail::MAIL_BODY, $message);
$modx->mail->set(modMail::MAIL_FROM, $emailsender);
$modx->mail->set(modMail::MAIL_FROM_NAME, $siteName);
$modx->mail->set(modMail::MAIL_SUBJECT, $subject);
$modx->mail->address('to', $emailTo);
$modx->mail->address('reply-to', $emailsender);
if(!empty($fields['attach_file'])) {
    $modx->mail->attach($modx->getOption('base_path').$fields['attach_file']);
}
$modx->mail->setHTML(true);
if (!$modx->mail->send()) {
  $modx->log(modX::LOG_LEVEL_ERROR,'An error occurred while trying to send the email: '.$modx->mail->mailer->ErrorInfo);
}
$modx->mail->reset();
return true;