Всего 124 381 комментарий

Валерий
24 февраля 2025, 20:40
0
Спасибо! Смог вручную его найти в нем, если пользоваться поиском, то подсовывал версию из modstore.pro.
Артур Шевченко
24 февраля 2025, 19:56
+1
Нужно подключить репозиторий modstore в modx.com версии 4.4.0 нет
Артур Шевченко
24 февраля 2025, 19:40
0
популярный компонент Login
По моему скромному мнению, его давно надо забыть, так как он не умеет в ajax.
Дима Касаткин
24 февраля 2025, 18:25
0
Привет! Спасибо за полезный апдейт. Так глядишь и совсем забудем когда-то популярный компонент Login и даже возможно Office — потому что таких удобных фишечек там нет, а костыли уж надоели :)
Konstantin
24 февраля 2025, 14:05
0
ClientConfig 2.4.0-pl
Modx 2.8.7
Quickstartbuttons 1.3.0-pl
Еще стоит AdminTools (1.15.2) с выключенной настройкой запоминания состояний
Володя
24 февраля 2025, 12:49
0
ClientConfig какая версия?
Konstantin
24 февраля 2025, 12:45
0
Добавил, но без изменений, по прежнему открывается ранее открытая вкладка. Как-будто где-то в бд запоминается ранее открытая вкладка
Володя
24 февраля 2025, 12:20
+1
Привет.
Добавь открытие вкладки через хэш.
MODx.loadPage('home','namespace=clientconfig#2');
TheRealMaN
23 февраля 2025, 19:42
0
А все-таки можно просто очистить таблицу)?

Если нет, то скажите, пожалуйста, куда добавлять?
[[!versionCleanX? &contentType=`resource` &maxVersions=`10`]]
Alex
23 февраля 2025, 14:39
0
Возможно вариант неидеальный и неокончательный, но уже рабочий)
В шаблоне внес правки в скрипт
<script>
$(document).ready(function () {
    let parentId = [[*id]];

    updateProducts(1, true);

    $('.filter-checkbox').on('change', function () {
        updateProducts(1, true);
    });

    $('#products-container').on('click', '.pagination a', function(e) {
        e.preventDefault();
        let pageUrl = $(this).attr('href');
        let urlParams = new URLSearchParams(pageUrl.split('?')[1]);
        let pageParam = urlParams.get('page') || 1;
        updateProducts(pageParam, true);
    });

    function updateProducts(page = 1, replaceContent = true) {
        console.log('Page:', page);

        let filterData = $('#filter-form').serialize();

        $.ajax({
            url: '/assets/components/filter.php',
            type: 'GET',
            data: filterData + '&parent=' + parentId + '&page=' + page,
            beforeSend: function () {
                if (replaceContent) {
                    $('#products-container').html('<p>Загрузка...</p>');
                }
            },
            success: function (data) {
                console.log('Response:', data);
                if (replaceContent) {
                    $('#products-container').html(data);
                } else {
                    $('#products-container').append(data);
                }
            },
            error: function(xhr, status, error) {
                console.log('Error:', status, error);
            }
        });
    }
});
</script>
И в файле обработчике поменял вызов на

$page = isset($_GET['page']) ? max((int)$_GET['page'], 1) : 1;
$limit = 1;
$offset = ($page - 1) * $limit;
$total = count($productIds);
$pages = ceil($total / $limit);
$productIds = array_slice($productIds, $offset, $limit);

$output = $modx->runSnippet('Pagination', [
    'class' => 'msProduct',
    'render' => '!pdoResources',
    'resources' => implode(',', $productIds),
    'tpl' => 'tpl.msProducts.row',
    'includeTVs' => 'back-img,product-img,ice_properties_uk,weight',
    'tplEmpty' => '',
    'limit' => $limit,
    'loadModels' => 'ms2',
    'includeContent' => 1,
    'page' => $page,
    'maxPageListItems' => 5,
    'pagination' => 'one',
    'leftJoin' => json_encode([
        "msProductData" => [
            "class" => "msProductData",
            "on" => "msProduct.id = msProductData.id"
        ]
    ]),
    'select' => json_encode([
        "msProduct" => "id, pagetitle",
        "msProductData" => "price",
        "modx_ms2_products" => "opisanie_produkta,weight"
    ])
]);

$output .= '<div class="pagination">';
if ($page > 1) {
    $output .= '<a href="?page=' . ($page - 1) . '">« Предыдущая</a>';
}
for ($i = 1; $i <= $pages; $i++) {
    $output .= '<a href="?page=' . $i . '"' . ($i === $page ? ' class="active"' : '') . '>' . $i . '</a>';
}
if ($page < $pages) {
    $output .= '<a href="?page=' . ($page + 1) . '">Следующая »</a>';
}
$output .= '</div>';

echo $output;
exit;
Артур Шевченко
23 февраля 2025, 11:42
+1
Ты первый у кого с SendIt всё получилось с первого раза)))
Alex
23 февраля 2025, 03:16
0
Спасибо вам за то, что подсказали правильное направление — все получилось)
Артур Шевченко
22 февраля 2025, 21:04
0
Вообще не планировал, но раз вы спрашиваете, имеет смысл запланировать.
Максим
22 февраля 2025, 20:25
0
Как будто с MySQL 8 компонент не очень работает.
alex87.ru
22 февраля 2025, 20:24
0
Нет) Это просто шаблон — каркас так сказать для верстки на 4м бутстрапе. В шаблоне там свои шаблоны
Сергей Карпович
22 февраля 2025, 19:34
0
Планируется ли добавить в компонент переключатель вида товара (переключатель чанка вывода ресурса)?
Артур Шевченко
22 февраля 2025, 19:06
+1
Если решил делать пагинацию сам, то зачем используешь pdoPage? pdoPage твой js не понимает, больше скажу, pdoPage не умеет работать с динамическими параметрами, т.е. какие при вызове задал по таким выборку он и сделает и потом ничего пересчитывать не будет.
В твоём случае надо использовать вот это
Андрей
22 февраля 2025, 11:06
0
Не приходит информация: phone, street, comment
Остальные приходят. В чём может быть причина?
<?php
if($modx->event->name != 'msOnCreateOrder') return;
$token = $modx->getOption('mstelegram_token', null, false);
$recipients = explode(',', $modx->getOption('mstelegram_recipients', null, ''));
$contacts = $modx->getObject('msOrderAddress', array('id'=> $msOrder->id));
$_products = $msOrder->getMany('Products');
$profile = $msOrder->getOne('UserProfile');

// Список товаров в заказе
$i = 0;
$products = '';
foreach ($_products as $product) {
    $i++;
    $products .= "*{$i}. {$product->name}* \n    `↳ ". round($product->price) ." х {$product->count} шт. = ". round($product->price * $product->count)."` \n";
}

if ($msOrder->delivery == '1') {
    $deli = "Сами заберут \n---------- \nТелефон: {$contacts->phone} \nКомментарий: {$contacts->comment}\n";
    } else if ($msOrder->delivery == '2') {
        $deli = "Доставка {$contacts->city} `{$msOrder->delivery_cost} р.` \n---------- \nТелефон: {$contacts->phone} \nАдрес: {$contacts->city}, {$contacts->street} \nКомментарий: {$contacts->comment}\n";
    }

// Текст сообщения
$message = "
Новый заказ #{$msOrder->id}
на сумму: {$msOrder->cart_cost} р.
----------
{$products}
----------
{$deli}
_Статус заказа придёт повторно_";

$message = urlencode($message);
foreach($recipients as $id){
    $id = trim($id);
    if(!$id) continue;
    $url = "https://api.telegram.org/bot{$token}/sendMessage?chat_id={$id}&parse_mode=markdown&text={$message}";
    $ch = curl_init();
    curl_setopt_array($ch, array(CURLOPT_URL => $url, CURLOPT_RETURNTRANSFER => true,));
    $result = curl_exec($ch);
    curl_close($ch);
}