Всего 123 799 комментариев

Maks
02 мая 2024, 10:27
0
<?php
$id = $modx->getOption('id', $scriptProperties, $modx->resource->id);
$field = $modx->getOption('field', $scriptProperties);
$tpl = $modx->getOption('tpl', $scriptProperties, 'msTimeStampTpl');
if ($modx->getObject('msProduct', $id )->get($field) == null) {
    return false;  
}

$tablePrefix = $modx->getOption('table_prefix');
$table = $tablePrefix.'mstimestamp_product';
$sql = "SELECT * FROM $table WHERE product_id = $id AND field = '$field'";
$statement = $modx->query($sql);
$date = $statement->fetch(PDO::FETCH_ASSOC);
if(!empty($date)){
    $validUntil = (int)$date['valid_until']; // Преобразуем строку в число

    $currentDate = time();

    if ($validUntil < $currentDate) {
        return false; // Акция уже завершена
    }

    $secondsLeft = $validUntil - $currentDate;

    $daysLeft = floor($secondsLeft / (60 * 60 * 24));

    $hoursLeft = floor(($secondsLeft % (60 * 60 * 24)) / (60 * 60));

    $minutesLeft = floor(($secondsLeft % (60 * 60)) / 60);

    $secondsLeft = $secondsLeft % 60;

    return $modx->getChunk($tpl, [
        'field' => $field,
        'date' => date('d.m.y', $validUntil),
        'daysLeft' => $daysLeft,
        'hoursLeft' => $hoursLeft,
        'minutesLeft' => $minutesLeft,
        'secondsLeft' => $secondsLeft
    ]);
}
return false;

?>
Вот так сделал

Чанк
<p>
Акция действует до: [[+date]] </p>
<p>Осталось [[+daysLeft]] дней [[+hoursLeft]] часов [[+minutesLeft]] минут</p>
На выходе получаем

Акция действует до: 10.05.24
Осталось 7 дней 16 часов 35 минут
Maks
02 мая 2024, 07:45
0
Что то не хочет выводить сколько осталось до конца акции. Выводит только Успейте сегодня!
Артур Шевченко
01 мая 2024, 21:40
+1
$pdoTools = $modx->getParser()->pdoTools;
$data['count_products'] = count($data['products']);
$renderedHtml = $pdoTools->getChunk('pdfHtmlTemplate', $data);
В чанке pdfHtmlTemplate все ключи массива $data будут доступны как переменные
Pandemic
01 мая 2024, 15:18
0
Пардон, плохо смотрел
Баха Волков
01 мая 2024, 15:09
+1
В документации написано:

Системная настройка: msync_alias_with_id — Выберите ДА, чтобы к псевдониму товаров при создании добавлялся идентификатор ресурса. Решает проблему повторяющихся псевдонимов.
Василий Наумкин
30 апреля 2024, 11:46
+3
— эта заготовка для создания ОДНОГО дополнения?
Да

Или можно в рамках одного сайта разработать сразу 5 несвязанных друг с другом дополнений?
Наверное можно, но я с трудом могу себе представить как кто-то зачем-то разрабатывает 5 несвязанных дополнений на одном сайте. Это же Docker — сделай 5 проектов и разрабыватывай независимо.

— это именно инструмент разработки ДОПОЛНЕНИЙ? Или же я могу так же удобно запустить сайт в докере, разработать нужный мне функционал, но не создавать никаких дополнений, а просто перенести весь код на сервер?
Кто ж тебе помешает?

Придумано для дополнений, но можно делать и запускать целиком сайты в Docker со своим функционалом.

Тоесть если захочется дотянутся до категорий извне вашего дополнения, то либо на уровне sql запросов или же создавать xml схему и модель, которую понимает modx и затем следить, чтобы модель eloquent и модель modx всегда были синхронизированы.
В MODX 3 есть Composer с автозагрузкой, так что модели дополения доступны отовсюду. Можно просто создать сниппет и выбрать все категории вот так:

$categories = \MMX\Super\Shop\Models\Category::query()->get()->toArray();

return print_r($categories, true);

непонятно какой шаблонизатор используется
Это решает автор дополнения, никакого «шаблонизатора по умолчанию» нет.
Александр Мельник
30 апреля 2024, 11:26
0
Безусловно, видео со звуком в десятки раз информативнее, чем просто видео. Автору всегда кажется что то что он делает на экране, так очевидно, что ничего и комментировать не нужно. Но как правило, автор ошибается.
За длинное видео со звуком спасибо.
Есть много вещей, которые я не понял даже со звуком).

— эта заготовка для создания ОДНОГО дополнения? Или можно в рамках одного сайта разработать сразу 5 несвязанных друг с другом дополнений?

— это именно инструмент разработки ДОПОЛНЕНИЙ? Или же я могу так же удобно запустить сайт в докере, разработать нужный мне функционал, но не создавать никаких дополнений, а просто перенести весь код на сервер?

— я плохо знаю modx 3 и может поэтому мне показалось, что дополнения «на уровне кода» очень слабо связаны с самим modx. Модель вы используете eloquent, контроллеры свои, визуализация своя, ну или скажем vue — шная. И мне показалось, что при таком подходе данные например из модели categories никто другой достать не сможет. Ведь есть что то подобное как modx->getService() и для modx3? Тоесть если захочется дотянутся до категорий извне вашего дополнения, то либо на уровне sql запросов или же создавать xml схему и модель, которую понимает modx и затем следить, чтобы модель eloquent и модель modx всегда были синхронизированы.

— очень не хватило в видео (но я вижу в загловке видео написано — ПЕРВЫЙ урок, поэтому наверное будет второй и это отлично) показа php сниппета для отображения данных в публичной части. Можно предположить что там внутри чистый laravel, но непонятно какой шаблонизатор используется. Eloquent любит blade, modx имеет свой «квадратно скобочный» шаблонизатор. И если на уровне «админки» еще позволительно каждому разработчику делать что он хочет и как он хочет, то публичная часть в рамках одного сайта должна сохранять некую стандартизацию, а то одни разработчик для показа категорий сделает spa, страницы новостей будет рендерится на сервере и так далее.

— наверное в следующих видео это станет очевидно, но уточню. Правильно я понял, что КОНЕЧНОЙ целью всех этих действия является получение отдельной директории с исходным кодом дополнения, которую можно взять под контрль версий, разместить на github, затем зарегистрировать репозиторий github как репозиторий composer и затем подключать этот код на сайт с modx через менеджер пакетов composer?
Константин
29 апреля 2024, 20:52
0
Добрый день, подскажите, перестал работать плагин в Хроме и Эдж, а в Яндекс браузере работает. Что может быть?
Павел Романов
29 апреля 2024, 12:40
+1
Если $data — массив с номером, товарами и датой, можно так:
<?php
$pdo = $modx->getService('pdoTools');
$data['count_products'] = count($data['products']);
return $pdo->getChunk('pdfHtmlTemplate', $data);

В чанке pdfHtmlTemplate:
{$num}
{$date}
{$products}
{$count_products}
Моисей
28 апреля 2024, 22:59
0
Настроил всё по инструкции, но заказы в Сделки не попадают.
al1ve
28 апреля 2024, 20:45
0
хорошо, тогда уточню у клиента) но на будущее хотелось бы знать — как добавляется новый столбец? либо попросить добавить такой функционал)
Alexey
28 апреля 2024, 11:25
0
Тут уж вопрос рациональности… если есть готовое поле, которое не планируется применять для вывода старой цены, то логично будет его использовать, а не тратить время на кастомизацию компонента.

А чтобы это не казалось неправильным, можно в лексиконах msOptionsPrice2 поменять подпись к полю)))
al1ve
28 апреля 2024, 11:12
0
Ну как временное решение — можно, но думал, что это немного неправильно — использовать поле не по назначению
Alexey
28 апреля 2024, 10:45
0
Привет! А почему для этой цели нельзя использовать существующее поле «старая цена»? Судя по скрину, оно не используется.
Vladyslav
28 апреля 2024, 01:36
0
Ответ оказался элементарным) Спасибо вам большое)
Артур Шевченко
27 апреля 2024, 17:23
+1
У любого ресурса в настройках есть чекбокс «Использовать псевдоним в пути псевдонимов» сделай его неактивным и обнови урлы через верхнее меню.
al1ve
27 апреля 2024, 14:52
0
Здравствуйте. Я немного ошибся. Там 1000 руб — это за упаковку, и в этой упаковке определённое кол-во пог. м. Насчёт вычислить я не уверен, так как клиент прислал документ с ценами за 1 пог. метр для каждой модификации товара.
Если под ТП имеется в виду техподдержка плагина в модсторе, то я вчера пробовал написать для этого дополнения, но пишет, что год поддержки уже истёк.
Артур Шевченко
27 апреля 2024, 13:37
0
В системных настройках компонента вы указываете логин и пароль от API и все данные виджет берёт из вашего ЛК СДЭК. Дополнительная стоимость, которую можно указать в настройках минишопа для данного способа доставки рассчитывается отдельно и может быть выведена в виджет, только с помощью костылей на JS.
Володя
27 апреля 2024, 12:14
0
Добрый день.
Если смысл в том чтоб вывести стоимость на карточке товара за погонный метр, то ее можно высчитать в плагине и просто вывести на фронт. Пишите в ТП или в ТГ в профиле подскажу.
Дима Касаткин
27 апреля 2024, 00:53
0
Для второго (и последующих) контекста, то есть того, который имеет имя (key), отличное от web. Где там какой домен или поддомен, разницы нет. Как надо чтобы открывалось, такой адрес и пиши. На хостинге все эти домены направляй в одну папку.

НО! Если у тебя и правда из двух установленных MODX в разных папках, у которых в core/config/config.inc.php указана одна и та же база с одинаковым значением $table_prefix — то я не знаю что тебе посоветовать, кроме как не пользоваться одной из папок, а настроить работу поддоменов через контексты, как указал выше.

Дело в том, что в MODX используется файловый кэш, в т.ч. системных настроек и т.п. В момент, когда ты очищаешь кэш, он удаляется и папки core/cache/* и как раз из-за этого могут быть проблемы. Наверное, если отключить вообще весь кэш, то всё будет работать, а почему бы и нет (в познавательных-то целях). Данные все в БД. Отключай короче все кэши, чтобы ничего не записывалось на диск, а всё было в Базе Данных… Но опять же, всякие фотографии, скрипты и стили для фронтенда, они же лежат на диске. При установке любого компонента, его файлы кладутся в папку с установленным MODX, а информация записывается в БД. Из другой папки будет видно инфу, а файлов нет — скорее всего будут ошибки.

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

Короче, используй 1 установленный движок, и контексты :)