Володя

Володя

С нами с 18 декабря 2012; Место в рейтинге пользователей: #4
Володя
27 марта 2024, 11:56
0
Это как? Какой репозиторий будет проверять версию пакета в packagist.org и показывать в админке кнопку «обновить»?
ну явно что не rest.modx.com.

И что будет происходить при нажатии на эту кнопку?
обновление пакета с composer

Нет, я про консоль в админке, где надо будет пальчиками вбивать команды composer и читать ответы. Что-то типа такого интегрировать.
не, не зайдет. Тот кто не пользуется консолью и такой пользоваться не будет. Нужен нормальный всем понятный интерфейс.

Я предлагаю подписываться на релизы в репозитории:
в случае с закрытым репозиторием как подписывать и узнавать об обновлении?
Володя
27 марта 2024, 11:27
+1
Если уж на то пошло то можно генерировать транспортный автоматом, при появлении новой версии в packagist, там от транспортника то ничего не осталось. Если все лишнее выкинуть то останется в районе 6 файлов.
Володя
27 марта 2024, 11:16
0
1. Ты не ответил — как юзер узнает о релизе новой версии, если ты не загрузишь новый транспортник в репозиторий MODX?
из наиболее логичного это инфу должен давать репозиторий на запрос CheckUpdates

Не соглашусь,
У Composer уже есть отличный CLI. Лучше уж сделать пакет с окошком терминала для работы с этим CLI из админки, если так страшно заходить в консоль сервера.
ну так сейчас ты не про интерфейс управления?

И вопрос — а как юзер узнает об обновлении если поставил пакет напрямую через композер?
Володя
27 марта 2024, 09:22
0
1 — тут как бы есть несколько вариантов.
— Если необходимо связать версию транспортного пакета (ТП) с версией packagist то это можно прописать в том же ТП.
— Если в этом нет необходимости то добавить в ТП update пакета с packagist

Ну и откат на предыдущую версию вряд ли будет работать.
если версии ТП и packagist связанны, то можно и реализовать откат.

2 — ну пока черновой вариант такой, мне это тоже не нравится. Там лежит только обертка для композера. Ее можно переместить в другое место и соответственно этот пункт пропадает.

В общем, всё это как-то костыльно
Это да не фен шуй — потому и просил не ругать)
Но согласись не хватает интерфейса для управления в админке? Это пока самый простой способ видеть что установлено и привычно для пользователя.
Володя
27 марта 2024, 09:03
+1
именно в случае composer зависимостей как раз и нужен новый тип дополнения. Никто не гарантирует что другой пакет не притащит свои зависимости с другими версиями и сайт перестанет корректно работать.
Володя
21 марта 2024, 14:14
+1
Там если транспортник будет выполнять
composer exec mmx-forms install
при установке

и
composer exec mmx-forms remove
при удалении
кроме как костыля в виде самого пакета больше тут ничего и нет
Володя
21 марта 2024, 10:58
0
Ну так можно реализовать установку из композер и завернуть это в транспортный пакет.
Пакет будет установлен с учетом всех зависимостей и тд. Пакет будет в данном случае как обертка. Не будет занимать много места, будет так же работать и откат и тд и все фишки пакета MODX.
Володя
21 марта 2024, 10:33
+1
1. Мы решаем фундаментальную проблему с дублированием зависимостей, когда каждый транспортный пакет MODX может притащить свою версию популярной библиотеки в общее пространство имён, и что-нибудь этим сломать.
Да это очень напрягает, когда на сайте сразу 3 версии Guzzle с разных дополнений и приходиться придумывать велосипед как заставить это работать.

Отличный пример!!! Применю обязательно.

ps. Что мне непонятно, так почему ребята которые задают курс MODX до сих пор придерживаются транспортных пакетов? Когда в ядре уже есть все необходимое для установки через композер…
Володя
19 марта 2024, 14:07
+1
Разобрался, благодаря вам!
Отлично!
Эти данные надо вынимать из msOrderAddress, а не из msOrder.
ну значит пакет пишет не пропертис заказа, а в пропертис адреса заказа.
Еще раз убедился на практике в большом потенциале дополнения msStatOrders. Благодарю автора!
Пожалуйста, обращайтесь!
Володя
19 марта 2024, 14:03
0
Естественно сортировка и группировка по мнимым полям не работает)
Володя
19 марта 2024, 12:31
+1
<?php
/** @var modX $modx */
/** @var array $row */
$utm= '';

if (!empty($row['Order.properties'])) {
    $properties = json_decode($row['Order.properties'], true);
    $utm = $properties['utm_source'] ?? ''; // тут берете нужное поле из массива properties
}

return $utm;
Володя
19 марта 2024, 07:14
+1
Доброе утро.

Добавьте выборку поля Order.properties



добавьте рендер



<?php
/** @var modX $modx */
/** @var array $row */
$utm= '';

if (!empty($row['Order.properties'])) {
    $utm = $row['Order.properties']['utm']; // тут берете нужное поле из массива properties
}

return $utm;

добавьте поле



Должно работать, если не получится — пишите в ТП.
Володя
18 марта 2024, 09:13
+1
В итоге проблемы с сохранением вызывал плагин autoredirector
modx.pro/help/24408#comment-141539
Володя
07 марта 2024, 16:38
0
Добрый день.
Написать в Тп. И там же сразу скинуть доступы к админке, посмотрю в чем дело.
Володя
05 марта 2024, 21:08
0
Не, оно то возвращает цену но эта цена уходит потом в корзину, что мне не нужно. Мне чисто отображение.
если вам чисто отображение то ловите запрос на js и меняйте что вам необходимо.

Если вы сформулируете точнее что вам надо — получите точнее ответ.

А PR принимаете на новые возможности?
не вижу смысла, теперь только под MODX3.
Володя
05 марта 2024, 19:52
0
Можно попробовать на событие msopOnGetFullCost
<?php
switch ($modx->event->name) {
    case 'msopOnGetFullCost':
        $values = $modx->Event->returnedValues;
        $values['cost'] = $cost - 10; // тут изменяем стоимость. 
        $modx->event->returnedValues = $values;
    
        break;
}
Володя
05 марта 2024, 12:15
0
Пожалуйста, будут вопросы — обращайтесь.
Володя
05 марта 2024, 11:44
+1
Добрый день.

[msopOnBeforeGetModification]
[rid] - integer
[iid] - integer
[options] - array
[excludeIds] - array
[excludeType] - array

[msopOnAfterGetModification]
[rid] - integer
[iid] - integer
[options] - array
[excludeIds] - array
[excludeType] - array
[modification] - object

[msopOnBeforeGetCost]
[rid] - integer
[price] - double
[modification] - array
[isAjax] - boolean

[msopOnAfterGetCost]
[rid] - integer
[cost] - double
[modification] - array
[isAjax] - boolean

[msopOnGetFullCost]
[product] - object
[rid] - integer
[cost] - double
[options] - array
[modifications] - array

[msopOnBeforeGetMass]
[rid] - integer
[weight] - double
[modification] - array
[isAjax] - boolean

[msopOnAfterGetMass]
[rid] - integer
[mass] - double
[modification] - array
[isAjax] - boolean

[msopOnGetFullMass]
[product] - object
[rid] - integer
[mass] - double
[options] - array
[modifications] - array

[msopOnModificationBeforeSave]
[mode] - string
[modification] - object
[cacheFlag] - NULL

[msopOnModificationSave]
[mode] - string
[modification] - object
[cacheFlag] - NULL

[msopOnModificationBeforeRemove]
[modification] - object
[ancestors] - array

[msopOnModificationRemove]
[modification] - object
[ancestors] - array

[msopOnGetModificationById]
[id] - integer
[rid] - integer
[found] - boolean
[options] - array
[modification] - object

[msopOnModificationNotFound]
[id] - integer
[rid] - integer
[found] - boolean
[options] - array
[modification] - object

[msopOnManagerPrepareObjectData]
[type] - string
[data] - array
[self] - object
Володя
04 марта 2024, 20:33
0
Алексей, ну я же вам прямо написал — задавайте конкретный вопрос.

И что документация к сожалению не появилась. Ну если она не появилась, то неужели сейчас вот появится? С учётом того что апгрейда не было несколько лет.

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