Вячеслав Варов

Вячеслав Варов

С нами с 06 сентября 2016; Место в рейтинге пользователей: #188
Вячеслав Варов
01 октября 2025, 16:35
0
У меня есть компонент работающий через migxDB и несмотря на тип поля JSON в MariaDB оно всеравно экранируется

`name` longtext CHARACTER SET utf8mb4 COLLATE utf8mb4_bin NOT NULL DEFAULT '{}' CHECK (json_valid(`name`)),
{\"uz\":\"Abdusattarov Axmadjon Abdiraxim o\\u2018g\\u2018li\",\"ru\":\"\\u0410\\u0431\\u0434\\u0443\\u0441\\u0430\\u0442\\u0442\\u0430\\u0440\\u043e\\u0432 \\u0410\\u0445\\u043c\\u0430\\u0434\\u0436\\u043e\\u043d \\u0410\\u0431\\u0434\\u0438\\u0440\\u0430\\u0445\\u0438\\u043c \\u0443\\u0433\\u043b\\u0438\",\"en\":\"\"}
Вячеслав Варов
01 октября 2025, 16:01
0
поскольку MIGX сохраняет данные в JSON внутрь таблицы modx_site_tmplvar_contentvalues где значение является строка видимо это невозможно, вот я сам и дал себе ответ… Тут как вариант написать плагин который будет сохранять MIGX поля в отдельную таблицу где будет тип данных JSON и уже оттуда делать выборку когда потребуется. Но может есть тут юди кто тоже занимался решнием похожей пробелмы и подскажут более лучшее решение?
Вячеслав Варов
12 ноября 2024, 07:35
0
страниц много, но как вариант возможно.

В целом конечно пока не совсем понятно как лучше настроить контроль версий, я вот пока все сунул в Docker где внутри контейнеры nginx mariadb php и исключил папку cache из контроля версий. Однако репозиторий теперь весит 1.8гб… но это уже другая история
Вячеслав Варов
11 ноября 2024, 16:14
0
после этого сайт для первых пользователей будет загружаться дольше обычного, очистка кэша из панели управления не удаляет все из папки cache
Вячеслав Варов
16 октября 2024, 16:23
0
судя по тому что я нарыл в источниках js она вызывает action — system/clearcache
Однако после ее нажатия в папке cache по прежнему много файлов и папок и удаляется далеко не все, отсюда и вопрос, как мне например при переносе в bash скрипте автоматом удалить папки и файлы чтобы избежать простоя на время пока я залогинюсь в админке и нажму на эту кнопку

на сайте настроен ci/cd и поэтому при перезаписи сайт ломается пока кэш не очистишь
Вячеслав Варов
16 октября 2024, 16:21
0
ну это я читал, я так и не понял сама кнопка запускает refresh или clearcache
Вячеслав Варов
20 сентября 2024, 12:21
0
Я пробовал так, в итоге происходит так, что при релизе сайта с одного окружения (stage) на другое (prod) методом миграции базы данных, мигируются и системные настройки, и пока ты вручную не удалишь папку cache полностью либо не откроешь сайт несколько раз, чтобы переписались системные настройки из статичных файлов — будут выводиться конфиги из бд. Я же полностью отказался от хранения в базе данных контур-зависимых параметров в пользу констант внутри файла config.inc.php — поскольку при миграции с одного контура на другой этот файлик не перезаписывается.
Вячеслав Варов
19 сентября 2024, 10:24
0
Реализовал через константы в файле config.core.php и вывод через феном в
{$.const.CONSTANT}
Вячеслав Варов
17 сентября 2024, 11:35
0
а ну такое не подходит( у меня очень много вложенных конфигураций для каждой tv создать то еще веселье) у меня около 150 конфигураций)
Вячеслав Варов
17 сентября 2024, 09:12
0
А есть туториала о том как компоненты с конфигурациями migx пилить?
Вячеслав Варов
16 сентября 2024, 19:01
0
Это понятно, а как подключить файл чтобы все конфигурации цеплялись из статичных файлов а не из бд
Вячеслав Варов
30 августа 2024, 09:39
0
Но ссылка тоже не совсем удобно, поскольку она генерит 301 редиректы, и вручную нужно вставлять ссылку на документ — нельзя выбрать через медиаисточник
Вячеслав Варов
30 августа 2024, 08:48
0
Думаю уже не актуально, но может будет кому полезно, добавил модификатор fenom который выводит размер файла и его расширение. Создать плагин и повесить его на событие pdoToolsOnFenomInit

Вызывать в виде {'linkToFile' | getFileInfo}

<?php
/** Функция обрабатывает размер файла в байтах в человекочитаемый 
    формат добавляя к размеру файла размерность, например 128 Mb
*/
if (!function_exists("human_filesize")) {
    function human_filesize($bytes, $decimals = 2)
    {
        $sz = ["B", "Kb", "Mb", "Gb", "Tb", "Pb"];
        $factor = floor((strlen($bytes) - 1) / 3);
        return sprintf("%.{$decimals}f", $bytes / pow(1024, $factor)) .
            " " .
            @$sz[$factor];
    }
}

/** @var modX $modx */
switch ($modx->event->name) {
    case "pdoToolsOnFenomInit":
        /** @var Fenom $fenom
            Мы получаем переменную $fenom при его первой инициализации и можем вызывать его методы. 
            Например, добавим модификатор вывода имени домена сайта из произвольной ссылки.
        */
        $fenom->addModifier("getFileInfo", function ($input) {
            if (file_exists($input)) {
                return strtoupper(pathinfo($input, PATHINFO_EXTENSION)) .
                    ", " .
                    human_filesize(filesize($input), 0);
            }
        });
        break;
}
Вячеслав Варов
30 августа 2024, 08:33
0
это когда генерируешь страницу — да будет работать, у меня же задача прицепить сам файл pdf
Вячеслав Варов
29 августа 2024, 13:43
0
А нашел, для этого можно использовать тип ресурса Ссылка
Вячеслав Варов
28 августа 2024, 17:00
0
и далее создал копию файла
assets/components/msearch2/action.php

Назвал ее
assets/filters/action.php

Заменил
'results' => !empty($results) ? $results : $modx->lexicon('mse2_err_no_results'),
На
'results' => !empty($results) ? $results : $pdoFetch->getChunk($scriptProperties['tplEmpty'], []),
Далее в файле js который указывается в системных настройках, у меня он assets/js/filters.min.js

Поменял assets/components/msearch2/action.php на assets/filters/action.php

PS может как-то могу поспособствовать добавив это изменение в будущие версии mFilter2?

тут правда не реализована проверка запыленности этого банка, но вроде как это не сложный функционал, на msearch2 он есть
Вячеслав Варов
28 августа 2024, 16:44
0
Еще не совсем понимаю как ловится событие post в mfilter2 я думал плагином, а в итоге нет, как оно работает?

Понял, в файле assets/components/msearch2/action.php вся логика
Вячеслав Варов
28 августа 2024, 16:37
0
в итоге вот к чему пришел

Заменил все вхождения
$modx->lexicon('mse2_err_no_results')
на

$mSearch2->pdoTools->getChunk($scriptProperties['tplEmpty'], $output, $fastMode);
Добился того что при загрузке страницы mfilter2 отдает чанк из параметра tplEmpty

Теперь осталось докрутить чтобы при Ajax работало а то сейчас отдает запись словаря
Вячеслав Варов
28 августа 2024, 16:25
0
Это не всегда удобно, поскольку уведомление может быть разным, например

Шуб по вашим критериям не найдено

Штанов по вашим критериям не найдено и тд, я вот пока склоняюсь к добавлению поля tplEmpty и настроить обработку чтобы отдавал чанк если пусто а не запись словаря
Вячеслав Варов
28 августа 2024, 14:27
0
Судя по сниппету mFilter2 он действительно не поддерживает стилизацию сообщения об отсутствии результатов под капотом

if (!empty($toSeparatePlaceholders)) {
	$modx->setPlaceholders($output['filters'], $toSeparatePlaceholders);
	$output['log'] = $log;
	if (is_array($output['filters'])) {
		$output['filters'] = implode($outputSeparator, $output['filters']);
	}

	$pcre = '#^' . preg_quote($toSeparatePlaceholders) . '(\d+)$#';
	$tmp = array();
	foreach ($modx->placeholders as $k => $v) {
		if (preg_match($pcre, $k)) {
			$tmp[] = $v;
		}
	}

	$output['results'] = !empty($tmp)
		? implode($outputSeparator, $tmp)
		: $modx->lexicon('mse2_err_no_results');

	$modx->setPlaceholders($output, $toSeparatePlaceholders);
}