Финансовая поддержка VPS, бесплатные дополнения и docs Донаты оплачивают сервер и двигают бесплатные дополнения MODX и документацию. Поддержать

Всего 126 121 комментарий

Наумов Алексей
Наумов Алексей
Кстати, если кому интересно, mmxDatabase вроде как можно запустить и на MODX 2.x.

Сначала в консоли делаем так:
composer require mmx/database
выполнять команду install не стоит, всё равно ж не получится.

а затем уже в php вот так:

require_once dirname(__FILE__) . '/vendor/autoload.php';
class_alias(\modX::class, 'MODX\\Revolution\\modX');
$mmxDatabase = new MMX\Database\App($modx);
и можно работать:
$resource = \MMX\Database\Models\Resource::find(1);
print_r($resource->toArray());
Олег
Олег
Пока думал и читал понял, что нужна другая логика.
На странице каталога в фильтре выбираю например «Антиоксиданты» и «Аминокислоты». Появляется список подходящих товаров.
Дальше, переходя в товар надо передать из GET запроса выбранные опции.
Внизу товара отобразить 10-12 товаров, в которых эти опции тоже отмечены.
Наумов Алексей
Наумов Алексей
Слишком общий вопрос, нет волшебных решений.

Что значит у нас много опций, 20 штук? Как вы по ним хотите похожие товары искать?

Вот я к примеру делал так: мне в разделе «Стабилизатор напряжения» в карточке товара нужно вывести 12 похожих товаров, критерии такие:
1. Соответствуют количеству фаз
2. Близкая мощность, плюс минус 20%
3. Близкая цена, плюс минус 30%

Когда я определился с критериями — я написал соответствующий запрос и получил выборку. Для другой категории будет другая выборка, правда же? Ведь спортивные кроссовки по этим критериям уже не подобрать? Там Похожесть это, например, цвет, наличие или отсутствие шнурков.
Олег
Олег
у вас в примере Data это к примеру article, а Size это название опции. правильно? Но как перечислить все опции? Просто их около 20, а отмечены у каждого товара по 1-4 опции.
И как получить значения для WHERE, в котором тоже могут быть несколько опций?
Василий Наумкин
Василий Наумкин
Если же элемент не статичный, то из специальной таблички читается время его последнего обновления (которое сохряняется туда плагином, потому что MODX эти данные не хранит).
Иначе обычные чанки будут компилироваться каждый раз и никакой пользы от кэширования. В pdoTools сейчас так и есть, между прочим.
Артур Шевченко
Артур Шевченко
Управляя настройками mysql, можно задать параметр sql_mode пустым значением (после чего все заработает), но хостер такую возможность не дает… Есть ли разумное решение данной проблемы?
Поменять хостинг.
Maks
Maks
<?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 минут
Василий Наумкин
Василий Наумкин
— эта заготовка для создания ОДНОГО дополнения?
Да

Или можно в рамках одного сайта разработать сразу 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);

непонятно какой шаблонизатор используется
Это решает автор дополнения, никакого «шаблонизатора по умолчанию» нет.