Как зарегистрировать js скрипт при рендере страницы?

Пытался так, но как я понял это работает для снипетов, но сниппет не подходит, нужно именно подключить js при загрузке страницы.

switch ($modx->event->name) {
    case 'OnWebPagePrerender':
        
        //$modx->regClientScript('assets/somefile.js');                
        &$modx->regClientScript('assets/somefile.js');

        break;
    }
Или придётся делать через OnWebPagePrerender

и модифицировать Html
$txt = &$modx->resource->_output;
Vladimir
21 мая 2022, 12:15
modx.pro
478
0

Починить скрипт

1 100 000
На сайт (MODx Revo 2.x) парсятся новости из разных источников, данные пишутся в БД, формируется запись в таблице MIGx. При первом запросе по адресу страницы срабатывает сниппет, который рисует баннер на странице (фон+заголовок).
Нужно разобраться с логикой формирования этой картинки, чтобы они формировалась вместе созданием ресурса в MIGx, а не при первой загрузке страницы. Ранее эта фича уже была реализована, но при переезде на другой хостинг «слетела». Нужно починить.
infora
21 мая 2022, 00:55
modx.pro
394
0

tagmanager2 + migx

В шаблоне есть вызов Tagmanager.
В нем указан чанк product.
В product есть вызов MIGx:

[[getImageList? &tvname=`img3` &tpl=`gallery_item_tpl3`]]

В чанке gallery_item_tpl3

<img src="[[+image:phpthumbon=`w=79&h=89&zc=1`]]" title="elementum urna" alt="elementum urna" class="img-responsive reg-image"/>
<img class="img-responsive hover-image" src="[[+image:phpthumbon=`w=79&h=89&zc=1`]]" title="elementum urna" alt="elementum urna"/>
<img src="[[+image:phpthumbon=`w=79&h=89&zc=1`]]">

Почему то не выводит фотографии. в наборе параметров указал img3
Андре Владимирович
20 мая 2022, 22:10
modx.pro
347
0

проблемы со сниппетом при переходе на ModX 3

есть 2 сниппета

$fields = $hook->getValues(); //поля из формы
$fields['filesToUpload'] = str_replace('assets/pdf/','',$fields['filesToUpload']);
$mail_z = $fields['contact_email'];
$message = $modx->getChunk('sentEmailTpl', $fields);

//формируем PDF
$pdo = $modx->getService('pdoFetch'); 
$pdfTpl = $modx->getOption('pdfTpl', $formit->config, '', true);
$content = $pdo->getChunk($pdfTpl, $fields);

$config = array();
$config = array_merge($config, $fields, array(
    'content' => $content,
    'author' => $author,
    'title' => $title,
));
// формируем ссылку на PDF
$result = $modx->runSnippet('PdfCreate', $config);
и PdfCreate
<?php
$date = date('Y-m-d_H-i-s', time()) . '_' .rand(1, 100);

$corePath = $modx->getOption('pdfresource.core_path', null, $modx->getOption('core_path') . 'components/pdfresource/');
$pdfresource = $modx->getService('pdfresource', 'PDFResource', $corePath . 'model/pdfresource/', array(
    'core_path' => $corePath
));

$content = $modx->getOption('content', $scriptProperties, '', true);
$title = $modx->getOption('title', $scriptProperties, '', true);
$author = $modx->getOption('author', $scriptProperties, '', true);

$aliasPath = MODX_ASSETS_PATH . 'pdf/';
$site_url = $modx->getOption('site_url');

// настройки PDFResource (подробнее почитать здесь: http://jako.github.io/PDFResource/usage/)
$pdfresource->initPDF(array(
    'mode' => 'utf-8',
    'format' => 'A4',
    'defaultFontSize' => intval(13),
    'defaultFont' => '',
    'mgl' => intval(30),    // margin left
    'mgr' => intval(10),    // margin right
    'mgt' => intval(30),     // margin top
    'mgb' => intval(10),     // margin bottom
    'mgh' => intval(10),    // margin header
    'mgf' => intval(10),    // margin footer
    'orientation' => 'P',   // ориентация PDF
    'customFonts' => '[]',
));

$pdfresource->pdf->SetTitle($title);
$pdfresource->pdf->SetAuthor($author);
$pdfresource->pdf->SetCreator($modx->getOption('site_url'));

$pdfresource->pdf->WriteHTML($content, 2);

$file_name = $date;
$pdfresource->pdf->Output($aliasPath . $file_name . '.pdf', 'F');
return $file_name;
они используются как хуки в FormIT и в сумме получают данные, формируют из них pdf файл, который потом отправляется по почте. В ModX 2.* все отлично работает, но при переходе на 3 версию файл генерится, но содержит массив, состоящий из плейсхолдеров, которые должны были использоваться при генерации pdf, видимо проблема либо с передачей чанка с шаблоном будущего pdf либо с его обработкой, то есть вероятно здесь
$pdfTpl = $modx->getOption('pdfTpl', $formit->config, '', true);
$content = $pdo->getChunk($pdfTpl, $fields);
Никто не знает, что изменилось в 3-й версии и как это поправить?
Андрей
20 мая 2022, 14:38
modx.pro
658
0

minishop2 3.0.1 и minishop2 3.0.2

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

Вот что мы успели подготовить на этот раз
Николай Савин
20 мая 2022, 13:52
modx.pro
1 852
+21

инструмент отчетности

Я хочу создать простой отчет с фильтром в менеджере (получать данные из базы данных). Есть ли подобные дополнения в modx? если нет, то как лучше всего построить такое? Является ли Migxdb хорошим решением?

Спасибо
Pakos Fakos
19 мая 2022, 22:52
modx.pro
528
0

FENOM Почему не работает include в foreach, что не так в синтаксисе?

Приветствую, использую Fenom на MODX REVO, xочу поменять синтаксис подключения чанков из файлов работает через $_modx->getChunk, а хочу попробовать через include или insert, подскажите что неправильно в этом синтаксисе?

{include 'file:chunks/'~$item.section~'.tpl'} Так не работает
{insert 'file:chunks/'~$item.section~'.tpl'} Так не работает

{set $sort = json_decode(1 | resource : 'field-sort', true)}
{if $sort}
{foreach $sort as $item}
{$_modx->getChunk('@FILE chunks/'~$item.section~'.tpl')}
{/foreach}
{/if}
Роман
19 мая 2022, 22:25
modx.pro
534
0

Разная скидка в корзине на товары при условии доставки в зависимости от вендора

Здравствуйте.
Собственно вопрос в заголовке

Суть:
Много товаров разных производителей в магазине.
Магазин должен давать дополнительную скидку при самовывозе.
Скидка на все идет 10%

Нужно сделать условие, что для определенной категории товаров (то есть например по паренту) и при условии конкретного бренда (то есть вендора) скидка в корзине именно на этот товар при самовывозе другая, например 5%.

На все скидка меняется. Но на выборочные товары, чтобы была разная скидка при условии самовывоза — нет.

Нужна помощь, подсказка, коммент, что читать, какое событие попробовать или какие то еще вариенты.
yuri
19 мая 2022, 20:20
modx.pro
522
0

Пересчет цены от общей сумы в корзине minishop2

Доброго дня, очень надеюсь на Вашу помощь… Есть розничная цена (price) и оптовая (old_price). Если сумма заказа меньше 2000 руб — цена розничная, если больше — оптовая.
Сам плагин
<?php
switch ($modx->event->name) {
    case 'msOnChangeInCart': case 'msOnAddToCart': case 'msOnRemoveFromCart': 
        $total_cost_min = $cart->status()['total_cost_min'];
        
        $tmp = $cart->get();
        
        if ($total_cost_min > 200) {
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {

                    $price = $product->get('price');
                    $old_price = $product->get('old_price');
                    $price = $old_price - $rate;
                	$tmp[$key1]['price'] = $price;
                    $modx->log(modX::LOG_LEVEL_ERROR, "cart: ".print_r($price,1) );
                	
                	
                }
            }
        }
        else {
            foreach ($tmp as $key1 => $value) {
                if ($product = $modx->getObject('msProduct', $value['id'])) {
                	$tmp[$key1]['price'] = $product->get('price');
                }
            }
        }
        $cart->set($tmp);
    break;
}
total_cost_min — это сумма заказа с розничной ценой.
Вроде все работает. Но не могу сделать динамическое обновление цен в корзине. Вернее они меняются только у того товара, у которого изменяешь количество, а все остальные не пересчитываются, только после перезагрузке страницы.
Понимаю что надо править default.js где-то в этом месте
status: function (status) {
            if (status['total_count'] < 1) {
                location.reload();
            } else {
                //var $cart = $(miniShop2.Cart.cart);
                var $miniCarts = $(miniShop2.Cart.miniCart).add(miniShop2.Cart.miniCartClass);
                if (status['total_count'] > 0 && $miniCarts.length > 0) {
                    $miniCarts.each(function (index, cart) {
                        if (!$(cart).hasClass(miniShop2.Cart.miniCartNotEmptyClass)) {
                            $(cart).addClass(miniShop2.Cart.miniCartNotEmptyClass);
                        }
                    });
                }
                $(miniShop2.Cart.totalWeight).text(miniShop2.Utils.formatWeight(status['total_weight']));
                $(miniShop2.Cart.totalCount).text(status['total_count']);
                $(miniShop2.Cart.totalCost).text(miniShop2.Utils.formatPrice(status['total_cost']));
                $(miniShop2.Cart.totalDiscount).text(miniShop2.Utils.formatPrice(status['total_discount']));
                if (typeof(status['cost']) === 'number') {
                    $(miniShop2.Cart.cost, '#' + status['key']).text(miniShop2.Utils.formatPrice(status['cost']));
                }
                
                    $(miniShop2.Cart.price2, '#' + status['key']).text(miniShop2.Utils.formatPrice(status['price2']));
  
                if ($(miniShop2.Order.orderCost, miniShop2.Order.order).length) {
                    miniShop2.Order.getcost();
                }
            }
        },
Дмитрий
19 мая 2022, 11:23
modx.pro
1 314
0

CKEditor слетает из настройки which_editor

Приветствую!

Не первый раз вижу такой «глюк». Устанавливаешь CKEditor работает все ок. Но через какое то время просто перестает работать, захожу в Системные настройки->Визуальный редактор а там пусто:
prnt.sc/t6r3VBTlXjzr

В логах ничего нет.

Переустановка помогает, но опять же слетает через время.
Причем даже воспроизвести проблему не получается, скажем так чудесным образом происходит.

Подскажите куда копать?
Что может менять-удалять настройку?
И откуда комбобох which_editor берет данные?
Константин Ильин
19 мая 2022, 10:50
modx.pro
715
0