Всего 123 801 комментарий

Андрей Степаненко
10 мая 2024, 18:33
0
Контейнеризация есть
github.com/modxcms/revolution/commits/3.x/core/src/Revolution/Services/Container.php

Её и использовал для подключение Facade в 3 версии modx
github.com/webnitros/facade-app/blob/2fe0344f87806bead554ba8f91e1d3d1ad62bb7f/Extras/FacadeApp/core/components/FacadeApp/elements/plugins/FacadeApp.php#L47C52-L47C53

$modx->services # Все что в сервисах, это контейнеры modx 3
Проблема в другом
# Так буде работать
$modx->services->get('mmxFenom')->fetch($tpl, ['resources' => $resources]);

# Так нет
\MMX\Fenom\App::fetch($tpl, ['resources' => $resources]); 

# Если с Facade, это аналог: $modx->services->get('mmxFenom')->fetch($tpl, ['resources' => $resources])
\MMX\Fenom\Facade::fetch($tpl, ['resources' => $resources]);
это сам класс не позволяет делать, его нужно затачивать под такой вызов чтобы он инстанс вызывал который уже например инциализирован, чтобы постоянной инициализации класса занова небыло

Другой вариант контенеризации это сделать app() какой то, который будет обращаться к контенерам как будто
$modx->services->get('mmxFenom')

@Сергей Шлоков уже довольно давно, предлагал изменить getInstance,
// Здесь https://github.com/modxcms/revolution/blob/fe2df183eabfebfd66c2c6f2788f2b93c40d4d1b/core/src/Revolution/modX.php#L410
 // Это  
$class = __CLASS__; 
# заменяем на это
$class = class_exists($id) ? $id : __CLASS__;
и тогда можно обращаться вот так:
modX::getInstance('modX')->getOption('site_name');
Кстати, где возможно, в свои проекты внедрил эту практику, работает отлично, без контейнеризации. Я не оценивал последствия, если это сделать стандартной сборке MODX 3 или 2, может там будут проблемы с процессорами. Но эта практика modX::getInstance('modX'), как и с Facade, упрощает написание кода.

Тогда можно будет сделать вот так
\MMX\Fenom\App::fetchNew($tpl, ['resources' => $resources]); 
Или вот так
\MMX\Fenom\App::instance()->fetch($tpl, ['resources' => $resources]);
Василий Наумкин
10 мая 2024, 16:27
0
Незнаю, может это не стоит считать проблемой, и вы и не планировали, что файлы в директории modx нуждаются в редактировании, но все же…
Именно так, да. Тем более, что настроить это сразу универсально никак не получится. Если есть хороший пример конфига — делись!

Я для себя решил эту проблему тем, что описывая докерфайл создаю там сразу нерутового пользователя и запускаю контнейнер от его имени. В таком случае файлы, созданные от имени этого пользователя монтируются «наружу» с именем пользователя на хостовой системе, что очень удобно.
А я использую в production образы и хост одной и той же системы — Ubuntu (Debian), поэтому всё работает от одного юзера www-data. А на локальной MacOS проблемы с правами и вовсе нет.

Ну а кстати, зачем я вообще полез править файлы в modx. Админка тупо выдает белый экран. Главная страница сайта открывается, а никакие танцы с бубнами вокруг админки пока не помогли.
Скорее всего, MODX просто не может создать директорию с кэшем из-за прав, да.

Решил ознакомится поближе, вижу вы активно снимаете и выкладываете видео на канале, а это очень подкупает.
Спасибо на добром слове, планирую продолжать!
Дмитрий
10 мая 2024, 15:42
0
@Aleksandr Huz еще раз огромное спасибо, дополнение офигенное! Единственное, с чем столкнулся – у меня как-то криво работает сортировка drag-n-drop'ом при заполнении Таблиц контентом. Начинаешь перетаскивать – появляется зеленая галочка (1 selected row) — индикатор, что можно тащить. Но сортировка либо вообще не срабатывает, либо перетаскивается куда-то не туда (непредсказуемо, через раз).
Это какой-то known bug? Есть шанс что починишь или мне искать обходной путь?
В доке не нашел подробностей, как будто бы должно работать сразу из коробки.
MODX 2.8.6
pageblocks-1.0.0-pl
Александр
10 мая 2024, 09:46
0
Не подскажете, есть ли способ переопределить эти методы minishop2.class? Про переопределение методов msorderhandler видел, а про minishop2.class не нашел
Владимир
10 мая 2024, 01:32
0
Привет из будущего! Ошибка все еще присутствует при удалении пользователя. Но пользователь все же удаляется.
[2024-05-10 00:22:10] (ERROR @ .../core/xpdo/xpdo.class.php : 1322) Could not get table class for class: modAccess
[2024-05-10 00:22:10] (ERROR @ .../core/xpdo/xpdo.class.php : 1291) Could not get table name for class: modAccess
[2024-05-10 00:22:10] (ERROR @ .../core/xpdo/om/xpdoobject.class.php : 240) Error 42000 executing statement: 
Array
(
    [0] => 42000
    [1] => 1064
    [2] => You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'AS `modAccess` WHERE `modAccess`.`principal` = 249' at line 1
)
Александр Мельник
09 мая 2024, 21:25
0
Тоесть я так понял, что в modx3 так и не завезли никакого контейнера зависимостей и нормальной автоматической иньекции зависимостей? Я помню когда только шли обсуждения что выйдет modx3 говорили что будет применена какая то там библиотека для контейнера зависимостей. Я еще возмущался, почему не phpDi, а мне сказали что та библиотека даже более крутая.
А судя по вашему коду, сервисы все еще из $modx достаются? Печально.
Честно говоря, тоже не люблю фасады и не пользуюсь ими и в ларавель. Выглядит как сотый уровень абстракции над абстракцией, без которой вполне можно обойтись. Лучшее враг хорошего, хотя это лично мое мнение.
Александр Мельник
09 мая 2024, 19:38
+1
Решил ознакомится поближе, вижу вы активно снимаете и выкладываете видео на канале, а это очень подкупает.
Стало интересно, как вы решаете те проблемы, с которыми я сталкиваюсь при работе с докером и к сожалению сразу же споткнулся об эти же грабли.
Инсталирую mmx-app как вы указываете в видео. И при таком подходе весь код из директории modx недоступен для редактирования из хостовой машины. Проблема очевидная, ожидаемая и связанная с тем что инсталяция modx происходит внутри контейнера а там пользователь root. И соответственно все файлы которые мы видим в volume тоже может редактировать только root.


Незнаю, может это не стоит считать проблемой, и вы и не планировали, что файлы в директории modx нуждаются в редактировании, но все же…
Я для себя решил эту проблему тем, что описывая докерфайл создаю там сразу нерутового пользователя и запускаю контнейнер от его имени. В таком случае файлы, созданные от имени этого пользователя монтируются «наружу» с именем пользователя на хостовой системе, что очень удобно.
Ну а кстати, зачем я вообще полез править файлы в modx. Админка тупо выдает белый экран. Главная страница сайта открывается, а никакие танцы с бубнами вокруг админки пока не помогли.
Сергей
09 мая 2024, 15:59
0
Почему этот компонент перестал существовать?
Василий Наумкин
09 мая 2024, 12:40
+2
Да, там был полный бардак с датами — сейчас привёл в порядок и написал тесты для проверки.

Обновляйся на версию 1.2.1
Andrey
09 мая 2024, 11:28
0
И еще не понятно — компонент только считает стоимость доставки или еще и отправляет заказы в ЛК СДЭКа?
Артур Шевченко
08 мая 2024, 20:28
0
Обычно при очистке кеша красным выводятся все дубли.
Дмитрий
08 мая 2024, 19:59
0
Все настройки взяты с рабочего проекта, может быть, что-то было неправильно сделано…
Денис Мавлютов
08 мая 2024, 18:40
0
Добрый день. Поставил FetchIt и у меня выходит ошибка при отправке.
«не могу найти указанный ключ формы (action)»

Вызываю некэшированно. Не понимаю в чем проблема (
Баха Волков
08 мая 2024, 16:28
0
1. Документация

Важно!

Сниппет должен быть вызван некэшированным, т.е. перед его названием должен быть восклицательный знак.
2. Убедитесь, что у вашей страницы есть тег head
Вячеслав Варов
08 мая 2024, 13:36
1
0
server {
	server_name 213.139.209.81 www.213.139.209.81;
    return 301 https://213.139.209.81$request_uri;
	charset off;
	index index.php index.html;
	disable_symlinks if_not_owner from=$root_path;
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/213.139.209.81/*.conf;
	access_log /var/www/httpd-logs/213.139.209.81.access.log;
	error_log /var/www/httpd-logs/213.139.209.81.error.log notice;
	ssi on;
	set $root_path /var/www/www-root/data/www/213.139.209.81;
	root $root_path;
	gzip on;
	gzip_comp_level 5;
	gzip_disable "msie6";
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
	
	location @modx-rewrite {
        rewrite ^/(.*)$ /index.php?q=$1&$args last;
    }
	
	location / {
		try_files $uri $uri/ @modx-rewrite;
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @php;
		}
		location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|webp|woff|woff2)$ {
			expires 24h;
		}
	}
	location @php {
		include /etc/nginx/vhosts-resources/213.139.209.81/dynamic/*.conf;
		fastcgi_index index.php;
		fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@213.139.209.81";
		fastcgi_pass unix:/var/www/php-fpm/1.sock;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
		try_files $uri =404;
		include fastcgi_params;
	}
	listen 213.139.209.81:80;
}
server {
	server_name 213.139.209.81 www.213.139.209.81;
	ssl_certificate "/var/www/httpd-cert/www-root/213.139.209.81_le1.crt";
	ssl_certificate_key "/var/www/httpd-cert/www-root/213.139.209.81_le1.key";
	ssl_ciphers EECDH:+AES256:-3DES:RSA+AES:!NULL:!RC4;
	ssl_prefer_server_ciphers on;
	ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
	ssl_dhparam /etc/ssl/certs/dhparam4096.pem;
	charset off;
	index index.php index.html;
	disable_symlinks if_not_owner from=$root_path;
	include /etc/nginx/vhosts-includes/*.conf;
	include /etc/nginx/vhosts-resources/213.139.209.81/*.conf;
	access_log /var/www/httpd-logs/213.139.209.81.access.log;
	error_log /var/www/httpd-logs/213.139.209.81.error.log notice;
	ssi on;
	set $root_path /var/www/www-root/data/www/213.139.209.81;
	root $root_path;
	gzip on;
	gzip_comp_level 5;
	gzip_disable "msie6";
	gzip_types text/plain text/css application/json application/x-javascript text/xml application/xml application/xml+rss text/javascript application/javascript image/svg+xml;
	
    
    location @modx-rewrite {
        rewrite ^/(.*)$ /index.php?q=$1&$args last;
    }
	
	location / {
		location ~ [^/]\.ph(p\d*|tml)$ {
			try_files /does_not_exists @php;
		}
		location ~* ^.+\.(jpg|jpeg|gif|png|svg|js|css|mp3|ogg|mpe?g|avi|zip|gz|bz2?|rar|swf|webp|woff|woff2)$ {
			expires 24h;
		}
		try_files $uri $uri/ @modx-rewrite;
	}
	
	location @php {
		include /etc/nginx/vhosts-resources/213.139.209.81/dynamic/*.conf;
		fastcgi_index index.php;
		fastcgi_param PHP_ADMIN_VALUE "sendmail_path = /usr/sbin/sendmail -t -i -f webmaster@213.139.209.81";
		fastcgi_pass unix:/var/www/php-fpm/1.sock;
		fastcgi_split_path_info ^((?U).+\.ph(?:p\d*|tml))(/?.+)$;
		try_files $uri =404;
		include fastcgi_params;
	}
	
	listen 213.139.209.81:443 ssl;
}
Получилось так, может кому полезно будет)
Вячеслав Варов
08 мая 2024, 13:21
0
Попробовал настроить таким образом получил что сайт в целом не открывается, открывается пустая страница и скачивается файл index.php.

Видимо обновилось что-то?
Андрей Степаненко
08 мая 2024, 09:53
0
По идее, если бы в MODX в обе версии интегрировать эти фасады, можно было бы добиться какого-то моста между версиями для совместимости других дополнений.

К примеру вызов того же pdotools в версии modx 2 сделать по максимум чтобы все вызывалось через Facade
Тогда при установке на modx 3 этого компонента, была бы обратная совместимость. Опять же не прям всех классов и функций, но таких которые являются базовыми (наивное предположение конечно же))).