Андрей Степаненко

Андрей Степаненко

С нами с 28 октября 2014; Место в рейтинге пользователей: #7
Андрей Степаненко
07 мая 2024, 19:14
+1
Проблема в том что в статье, я еще пару файлов подключал, что лишним было
Как раз про это писал что в modx 3 плохо разобрался.

Вспомнил про контракты.
Кто то все такие реализовал полноценную контейнеризацию ))
github.com/modxcms/revolution/commits/3.x/core/src/Revolution/Services/Container.php

Респект))))
Андрей Степаненко
07 мая 2024, 17:44
0
@Василий Наумкин подскажи плиз, Facades из коробки получается работают в modx 3?

core/src/Facades/Fenom.php
<?php
namespace MODX\Facades;

use Illuminate\Support\Facades\Facade;
use MMX\Fenom\App;

/**
 * @method static void addModifier(string $modifier, callable $callback)
 * @method static void fetch($template, array $vars = [])
 * @see App
 */
class Fenom extends Facade
{
    protected static function getFacadeAccessor(): string
    {
        return 'mmxFenom';
    }
}


Для запуска

<?php

use Illuminate\Support\Facades\Facade;
define('MODX_API_MODE', true);
require 'index.php';


Facade::clearResolvedInstances();
Facade::setFacadeApplication($modx->services);

echo \MODX\Facades\Fenom::fetch('file:chunks/test.tpl', ['name' => 'Hello']);
Андрей Степаненко
07 мая 2024, 17:29
0
Отлично, у $modx->services еще контракты подходящие

$modx->services->add('fenom', function (use $modx) {
    return $modx->services->get('mmxFenom');
});
Facade::clearResolvedInstances();
Facade::setFacadeApplication($modx->services);

echo \MODX\Facades\Fenom::fetch('file:chunks/test.tpl', ['name' => 'Hello']);
Андрей Степаненко
07 мая 2024, 14:37
+3
Записал видео, 12 минутное
Разобрал более подробней работу Facade
Несколько вариантов представил для сравнения
Андрей Степаненко
07 мая 2024, 11:46
0
Понимаю
Есть такое
По этому в конце комментариев See оставляется
use MMX\Fenom\App;

/**
 * @method static void addModifier(string $modifier, callable $callback)
 * @method static void fetch($template, array $vars = [])
 * @see \MMX\Fenom\App
 */
То же раздражала навигация.

Спустя какое-то время понял, как ориентироваться, привыкаешь к этому, после того как запомнишь, как функция вызывается и что она делает.

Для разработки чего-то нового, конечно же, не подходит, лучше обычным методом класс вызывать. Но для кода, который уже не первый год, вот тут выигрываешь сильно.
Андрей Степаненко
07 мая 2024, 07:05
0
По тестировал, на modhost.pro
попробуй вот так сделать:

wget https://raw.githubusercontent.com/modxcms/revolution/v3.0.5-pl/composer.json
composer install
composer require mmx/fenom --update-no-dev
будет ругаться на зависимости

Удаление core/vendor и composer.lock обязателен получается.
И затем установка
wget https://raw.githubusercontent.com/modxcms/revolution/v3.0.5-pl/composer.json
composer require mmx/fenom --update-no-dev

Либо вариант, проблемы с зависимостями в ручную разруливать: modx.pro/development/24702#comment-143093
Андрей Степаненко
06 мая 2024, 23:02
0
изначально делал так
wget raw.githubusercontent.com/modxcms/revolution/v3.0.4-pl/composer.json
composer install
composer require mmx/fenom
Получал ошибку modx.pro/development/24702#comment-143091

Попробовал по другому
Удалил composer.lock и core/vendor
сразу выполнил команду
composer require mmx/fenom

все установилось

Update:
кроме самого пакета mmx/fenom (перепутал))) сначала подумал что он то же установился
при повторе, опять ошибка не совместимости
composer require mmx/fenom
Андрей Степаненко
06 мая 2024, 22:57
0
php 7.4 не установился

пробывал с:
wget raw.githubusercontent.com/modxcms/revolution/v3.0.4-pl/composer.json
wget raw.githubusercontent.com/modxcms/revolution/v3.0.5-pl/composer.json

composer require mmx/fenom
./composer.json has been updated
Running composer update mmx/fenom
Loading composer repositories with package information
Updating dependencies
Your requirements could not be resolved to an installable set of packages.

  Problem 1
    - illuminate/container[v8.0.0, ..., 8.x-dev] require psr/container ^1.0 -> found psr/container[1.0.0, ..., 1.x-dev] but the package is fixed to 2.0.2 (lock file version) by a partial update and that version does not match. Make sure you list it as an argument for the update command.
    - illuminate/events[v10.47.0, ..., 10.x-dev] require php ^8.1 -> your php version (7.4.33) does not satisfy that requirement.
    - mmx/database[1.1.0, ..., 1.2.0] require illuminate/events ^v8.83|^v10.47 -> satisfiable by illuminate/events[v8.83.0, ..., 8.x-dev, v10.47.0, ..., 10.x-dev].
    - mmx/fenom[dev-main, 1.0.0] require mmx/database ^1.1 -> satisfiable by mmx/database[1.1.0, 1.1.1, 1.2.0].
    - illuminate/events[v8.83.0, ..., 8.x-dev] require illuminate/container ^8.0 -> satisfiable by illuminate/container[v8.0.0, ..., 8.x-dev].
    - Root composer.json requires mmx/fenom * -> satisfiable by mmx/fenom[dev-main, 1.0.0, 9999999-dev].

Use the option --with-all-dependencies (-W) to allow upgrades, downgrades and removals for packages currently locked to specific versions.
You can also try re-running composer require with an explicit version constraint, e.g. "composer require mmx/fenom:*" to figure out if any version is installable, or "composer require mmx/fenom:^2.1" if you know which you need.

Installation failed, reverting ./composer.json and ./composer.lock to their original content.
bash-5.1$ php -v
PHP 7.4.33 (cli) (built: Nov 12 2022 05:16:49) ( NTS )
Copyright © The PHP Group
Zend Engine v3.4.0, Copyright © Zend Technologies
Андрей Степаненко
17 апреля 2024, 19:12
+1
С расположение пакетов это одна из проблем которую на мой взгляд нормально не решишь, всегда на измене что то то можешь затереть
По этому и придумал схему с :ro который защищает файл в Extras
Хоть сколько раз переустанавливай свой пакет
Если нужен собранный пакет то он будет в target в сборке с docker
Андрей Степаненко
17 апреля 2024, 10:08
+1
Последние попытки запуска как раз и были связаны с WSL, Docker завершался с ошибкой и все.

Для отключения WSL
C:\Users\\AppData\Roaming\Docker\settings.json
«wslEngineEnabled»: false

И после этого docker запуститься. Ура)
Андрей Степаненко
17 апреля 2024, 09:51
+1
Windows 11 еще один вариант)

Андрей Степаненко
17 апреля 2024, 06:19
+1
windows — страшная тема для docker) кто смог настроить docker под window, респект

Папка с build в 3 категории попадает

volumes:
    - "./Extras:/var/www/html/Extras"
    # Package
    - "./Extras/${PACKAGE_NAME}/core/components/${PACKAGE_NAME}:/var/www/html/core/components/${PACKAGE_NAME}:ro"
    - "./Extras/${PACKAGE_NAME}/assets/components/${PACKAGE_NAME}:/var/www/html/public/assets/components/${PACKAGE_NAME}:ro"
Директория для хранения самого пакета
/var/www/html/Extras

В нее затем уже с помощью команд обращаешься
#######################
# Extras package
#######################
package-build:
	docker compose exec app bash -c "export PACKAGE_DEPLOY=False && php Extras/${PACKAGE_NAME}/_build/build.php"

package-install:
	docker compose exec app bash -c "php ./docker/app/scripts/checking-add-ons.php"
	@make cache-clear

package-build-deploy:
	docker compose exec app bash -c "export PACKAGE_DEPLOY=True && php Extras/${PACKAGE_NAME}/_build/build.php"

package-target-clear:
	docker compose exec app bash -c 'rm -rf target/*'

package-deploy:
	@make package-target-clear
	@make package-build
	@make package-build-deploy

Volume core и assets

# Package
    - "./Extras/${PACKAGE_NAME}/core/components/${PACKAGE_NAME}:/var/www/html/core/components/${PACKAGE_NAME}:ro"
    - "./Extras/${PACKAGE_NAME}/assets/components/${PACKAGE_NAME}:/var/www/html/public/assets/components/${PACKAGE_NAME}:ro"
Эти volume прокидываются чтобы можно было редактировать код из Extras/${PACKAGE_NAME}
Андрей Степаненко
16 апреля 2024, 10:02
+1
Перенос из modx.pro/components/24542#comment-142930

Проанализировал код

1. Во время удаления сессий выполняется N запросов, если быть точным то сколько прописано сигнатур user agent столь и будет выполнено запросов
2. Поле user_agent не индексное, то есть это будут медленные запросы



Еще хотел узнать, зачем для ботов создавать сессию?
И потом её удалять, целесообразность этого функционал не понимаю
особенно с учетом тяжести запросов в цикле
Андрей Степаненко
16 апреля 2024, 08:25
0
Проанализировал код

1. Во время удаления сессий выполняется N запросов, если быть точным то сколько прописано сигнатур user agent столь и будет выполнено запросов
2. Поле user_agent не индексное, то есть это будут медленные запросы



Еще хотел узнать, зачем для ботов создавать сессию?
И потом её удалять, целесообразность этого функционал не понимаю
особенно с учетом тяжести запросов в цикле
Андрей Степаненко
16 апреля 2024, 08:00
+1
git submodule
прикольно)) Один раз читал про это, но руки не дошли чтобы использовать
Спасибо за решение)

Опять же это то о чем я и писал, один из вариантов работы, где требуется содержание сервера и развернутого modx

Безусловно я не коем образом не сравниваю, в том плане что твое решение хуже или лучше) думаю сам да же где то попробую аналогично использовать modx-build-environment-gui.
Андрей Степаненко
05 мая 2023, 05:50
0
Димка считает что его кинули
Год прошёл, а обновления компонента не дали ему
500₽ пожадничал на обновление
Теперь ходит за мной, минусы ставит)))
Андрей Степаненко
28 апреля 2023, 09:24
0
Есть отличная статья на мой вгляд
Показывает что сейчас произошло с GPT
habr.com/ru/articles/727092/

Процесс идет и его не остановить)
Андрей Степаненко
28 апреля 2023, 09:01
0
Надо незабывать что есть ответственность, тестировани, отладка
Чем программисты как правило пренебрегают

Вот задача:
Написать скрипт вывода даты

А где здесь написано что его тестировать нужно????????
Проект менеджеры и другие постановщики задач глюбоко ошибаются в том что программист будет тестировать свой код
Они хотят конфетку готовую
Не зря существую тестироващики

Это как с заводом по производству машин
Инженеры делают свою работу
Менеджеры делают свою работу

Так достигается симбиоз полноценной работы: но в мире программирования почему то мнение у большенства что программист может и сплесать и спеть и покушать принесет