Всего 125 961 комментарий

Vladimir
03 мая 2022, 12:18
0
Кстати да заработало, можно кратко почему оно не работало из консоли? типо из-за прав? но ведь оно работало как плагин. Конечно сделал не так всё как вы сказали, но для компании для которой нужно всё быстро и чтоб работало сойдёт, да и пока нет знаний чтобы сделать как вы сказали

<?php

ini_set('display_errors', 1);
ini_set('display_startup_errors', 1);
error_reporting(E_ALL);

define('MODX_API_MODE', true);
require dirname(dirname((__FILE__))) . '/index.php';



$BASE_PATH = dirname(dirname((__FILE__)));
$CORE_PATH = "{$BASE_PATH}/core/";


$dir_name = "{$BASE_PATH}/media";

$phpThumb = $modx->getService('modphpthumb', 'modPhpThumb', "{CORE_PATH}model/phpthumb/", array());

function optimezieImg($pathToImage, $phpThumb){
    global $modx;
    $params = array();
    if (exif_imagetype($pathToImage) == IMAGETYPE_JPEG)
    {

        $params = array(
            'w' => 1920,
            'f' => 'jpeg',
            'q' => 80,
        );

    }
    elseif (exif_imagetype($pathToImage) == IMAGETYPE_PNG)
    {

        $params = array(
            'w' => 1920,
            'f' => 'png',
            'q' => 80,
        );

    }
    elseif (exif_imagetype($pathToImage) == IMAGETYPE_GIF)
    {
        return;
    }
    
    
    
    $phpThumb->setSourceFilename($pathToImage);

    foreach ($params as $k => $v)
    {
        $phpThumb->setParameter($k, $v);
    }

    if ($phpThumb->GenerateThumbnail())
    {
        if (!$phpThumb->renderToFile($pathToImage))
        {
            $modx->log(1, 'Ошибка сохранения изображения в [' . $pathToImage . ']');
        }
    }
    else
    {
        $modx->log(1, print_r($phpThumb->debugmessages, 1));
    }    
}



$directoryIterator = new RecursiveDirectoryIterator($dir_name);
$iteratorOverIterator = new RecursiveIteratorIterator($directoryIterator, RecursiveIteratorIterator::CHILD_FIRST);

$allowedExts = array('jpg','png','jpeg');

$files = array();

foreach ($iteratorOverIterator as $file) {
    
    if ($file->isFile()) {
        $currentFileExt = pathinfo($file->getFilename(), PATHINFO_EXTENSION);
        if(in_array($currentFileExt, $allowedExts)){
            array_push($files, $file->getPathname());
        }
    } 
}

foreach ($files as $file) {
    
    optimezieImg($file, $phpThumb);
    
}


echo 'Done';
Николай Савин
03 мая 2022, 11:57
0
Ну для начала идея — не использовать для таких задач плагин.
Это некорректно с точки зрения архитектуры (плагин по своей сути это функция). А также плагин ограничен максимальным временем выполнения PHP скрипта.

Такие задачи выполняются в CLI режиме. То есть создайте отдельный php файл, подключите туда MODX, перенесите ваш код. Желательно переделать в класс и использовать ООП. И выполняйте код в консольном режиме.
Александр Сенькин
03 мая 2022, 11:51
0
Версия 3.0 еще официально не открыли для «безопасного» перехода на неё. Большие проекты, да и вообще кроме тестовых проектов желательно не переезжать пока что… Не все пакеты готовы к переезду… Уверен работы разработчикам хватает чтобы закрыть львиную долю багов и ошибок, ваше не исключение и вот сейчас не решить ваш вопрос. Прошу откатите на прежнюю версию «если есть такой вариант»
Vladimir
03 мая 2022, 11:25
0
Можно как их оптимизировать разом? вверху полу рабочий скрипт, собирает все картинки но выдаёт ошибку, мол плохие картинки. Использовать phpthumbof и так далее через тэги, нет не выход, с ними постоянно проблемы с кэшем, что делает только хуже, по этому нужно сделать чтобы все существующие картинки прогнал через сам себя встроенный phpthumb, великолепно справляется со своей работой, в качестве плагина на загрузку файлов
Vladimir
03 мая 2022, 11:02
0
Есть у кого-нибудь идеи?
Fullstack
03 мая 2022, 02:04
0
Откопал настройку «phpthumb_allow_src_above_docroot», включил — заработало!
Также нужно очистить кэш MODX и затем очистить кэш браузера. Готово
R2m0x94 (Vasily)
03 мая 2022, 00:10
0
в FAQ_get_questions добавьте idx для удобства в отображении корректных нумераций
// строка ~37
$idx = 0;
foreach ($items as $item) {
    $idx += 1;
    $list[] = $modx->getChunk($tpl, array_merge($item->toArray(), ['idx' => $idx]));
}
В чанке просто [[+idx]] или {$idx}
Fullstack
02 мая 2022, 20:32
0
Вау! Очень круто. Правда в файлах заметил, что там вместо этой настройки используется константа
MODX_CORE_PATH . 'cache/'
, поэтому не знаю, будет ли это работать. А еще придумал несколько других вариантов, возможных благодаря симлинкам, которые хостинг как оказалось поддерживает. То есть я могу просто скопировать папку core для каждого сайта, и сослаться на нее в отправных точках (config.core.php), выбирая ее в зависимости от домена, по которому заходят. Или вообще сделать на каждом нужном сайте симлинк на assets/images (естественно при одинаковых ID надо вынести оттуда галерею ms2). Вариантов куча)
Anton
02 мая 2022, 19:06
0
Такая же проблема. Сделал тестовый пустой TV, прицепил к шаблону — перестает работать, ошибка 503. Отключаю ТВ — работает.

Есть идеи?
Алексей Смирнов
02 мая 2022, 15:42
+1
Сравнивать нужно аккуратно, тк архитектура систем управления немного разная.
Ориентировался я и на WP, и на Joomla, и даже, прости господи, на Битрикс.
Делать стандарт для MODX и прям в доке самого MODX, а не дополнения — не верная постановка задачи.
Потому что:
1) Система темизации MT полностью зависит от pdoTools, fenom. (это сторонний пакет)
2) Решение данное — это отдельный пакет. те по сути получается уже некая модульность.
3) Вы сами можете решить (в будущем) при создании нового сайта использовать готовое решение на базе MagicThemes или делать как привыкли.
4) При установке темы устанавливается, спрашиваются необходимые для работы темы — Пакеты, которые поставить (зависимости). Что вполне в рамках MODX.
И я в статье написал, и еще раз повторюсь:
Полную документацию и принцип работы я напишу конечно, но позже. Сейчас альфа релиз который призван помочь понять мне (востребованность, актуальность, возмущенность, недовольство и прочее...) и окружающим людям (увидели что-то новое, нужно ли оно мне, а зачем, а что… и т.д.).
Потому что разговоров за последние 7...8 лет было много, а реализации тем для MODX я не видел чтобы кто-то реально предлагал.
Вот я предлагаю реализацию. Пока я демонстрирую результат и возможности (пока, согласен, тухленько демонстрирую) но хотя бы есть что показать.
так что я вас в любом случае услышал и болячки понял.
если еще будут советы — я только рад делать доп лучше и мощнее… чтобы не смотрелось на других «девах». )))))
R2m0x94 (Vasily)
02 мая 2022, 12:54
0
По сути на обновление надо повесить ace, и на создание, вопрос как?
FAQ.window.UpdateItem = function (config) {
    config = config || {};
    if (!config.id) {
        config.id = 'faq-item-window-update';
    }
    Ext.applyIf(config, {
        title: _('faq_item_update'),
        width: 550,
        autoHeight: true,
        url: FAQ.config.connector_url,
        action: 'mgr/item/update',
        fields: this.getFields(config),
        keys: [{
            key: Ext.EventObject.ENTER, shift: true, fn: function () {
                this.submit()
            }, scope: this
        }]
    });
    MODx.ux.Ace.replaceTextAreas(Ext.query('[name="answer"]')); // вроде правильно, но не работает
    FAQ.window.UpdateItem.superclass.constructor.call(this, config);
};
R2m0x94 (Vasily)
02 мая 2022, 12:44
0
А как в Ответ «answer» к полю в окне редактирования включить редактор Ace?

// assets/components/faq/js/mgr/widgets/items.windows.js
Ext.onReady(function(){
	if(MODx.ux.Ace.replaceTextAreas) {
		MODx.ux.Ace.replaceTextAreas(Ext.query('[name="answer"]'));
	}
});
добавляю Ext, но почему-то не получилось
Vladimir
02 мая 2022, 11:31
0
Сделал так, но вылезают такие ошибки, хотя при загрузке как через плагин всё работает
imagesx(): supplied resource is not a valid Image resource
[2022-05-02 13:55:35] (ERROR @ core/model/phpthumb/phpthumb.class.php : 4045) PHP warning: imagesy(): supplied resource is not a valid Image resource
[2022-05-02 13:55:35] (ERROR @ core/model/phpthumb/phpthumb.class.php : 3370) PHP warning: imagecolortransparent(): supplied resource is not a valid Image resource
[2022-05-02 13:55:35] (ERROR @ core/model/phpthumb/phpthumb.class.php : 4475) PHP warning: imagecopy(): supplied resource is
. Путь выдаёт правильный прям от корня хоста до картинки
<?php

$dir_name = MODX_BASE_PATH."media";


function optimezieImg($pathToImage){
    global $modx;
    $params = array();
    if (exif_imagetype($pathToImage) == IMAGETYPE_JPEG)
    {

        $params = array(
            'w' => 1920,
            'f' => 'jpeg',
            'q' => 80,
        );

    }
    elseif (exif_imagetype($pathToImage) == IMAGETYPE_PNG)
    {

        $params = array(
            'w' => 1920,
            'f' => 'png',
            'q' => 80,
        );

    }
    elseif (exif_imagetype($pathToImage) == IMAGETYPE_GIF)
    {
        return;
    }

    $phpThumb = $modx->getService('modphpthumb', 'modPhpThumb', MODX_CORE_PATH . 'model/phpthumb/', array());
    $phpThumb->setSourceFilename($pathToImage);

    foreach ($params as $k => $v)
    {
        $phpThumb->setParameter($k, $v);
    }

    if ($phpThumb->GenerateThumbnail())
    {
        if (!$phpThumb->renderToFile($pathToImage))
        {
            $modx->log(1, 'Ошибка сохранения изображения в [' . $pathToImage . ']');
        }
    }
    else
    {
        $modx->log(1, print_r($phpThumb->debugmessages, 1));
    }    
}


function get_all_directory_and_files($dir){
 
     $dh = new DirectoryIterator($dir);   
     // Dirctary object 
     foreach ($dh as $item) {
         if (!$item->isDot()) {
            if ($item->isDir()) {
                get_all_directory_and_files("$dir/$item");
            } else {
                $currentFileExt = pathinfo($dir . "/" . $item->getFilename(), PATHINFO_EXTENSION);
                if($currentFileExt == 'jpg' || $currentFileExt == 'png' || $currentFileExt == 'jpeg'){
                    optimezieImg($dir . "/" . $item->getFilename());
                }
            }
         }
      }
   }
 
  # Call function 
  
get_all_directory_and_files($dir_name);
Александр Сенькин
02 мая 2022, 10:47
0
Несколько проектов перевел на новую версию, все отлично спасибо!
Один только проект вылетел, после обновления слетела панель левая с вкладками ресурсов, элементов, файлов. Заходя в разделы например настройки, просто белый фон! На главной панели управления пишет загрузка — вывод панели и виджетов… Вот так вот, откатил назад на 2.8.3
Miša Bulic
02 мая 2022, 09:13
0
Ну я говорю стандарт и иерархия должны быть не для дополнения, а в документации самого modx.
Вот у вас интересное дополнение, много работы сделано. Но у вас не было ни одного комментария неделю, потому что сходу разобраться тяжело, вникать надо. И мало кто станет это делать, потому что кроме вас вряд ли будет делать тему с этим дополнением.
Я ни в коем случае не обесцениваю вашу работу, просто без стандарта не получится создать темы.
Вот иерархия Wordpress официальная:


Я знаю, что при упоминании сравнения с Вордпрессом многих тут триггерит. Но если хочется иметь готовые темы, то надо ориентироватся на лидера рынка.
Сергей Шлоков
02 мая 2022, 09:10
+3
1. Переопределить настройку для переноса всего кэша
$modx->setOption('cache_path', 'новый путь к папке кэша');
2. Для более тонкой настройки расширить менеджера кэша, в котором изменить метод modCacheManager::generateResource, чтобы переопределять cacheKey ресурса. По-умолчанию он имеет значение «contextKey]/resources/[id]». Можно указать свой типа «web/$siteName/resources/$obj->id». $siteName определяете сами.
SmartWidgets
02 мая 2022, 04:20
-1
Отзывы из Яндекс Маркета на вашем сайте можно вывести через JavaScript-виджет от SmartWidgets. Установка и настройка занимает 2 минуты. Вы копируете URL магазина из маркета, вставляете в конструктор виджета, настраиваете дизайн виджета, получаете небольшой HTML-код, вставляете к себе на сайт и все. Виджет будет транслировать отзывы из Яндекс Маркета у вас на сайте. Обновление отзывов раз в день. Можно фильтровать по звездности. Сортировать по дате добавления. И многое другие. Сайт виджета – smartwidgets.ru/yandex-market-reviews-widget/
Алексей Смирнов
01 мая 2022, 16:45
0
Пока копирование не делал. ТК небыло весомых причин.
В будущих версиях добавлю это.
Куча штуковин побочный момент универсальности.
Но их количество тоже зависит от проектирования темы.
Можно сделать штуковину — целой шапкой, а можно только логотип выводить.
Александр Туниеков
01 мая 2022, 16:32
0
И затем будет куча штукови в которых ногу сломишь…
Скопировать штуковину можно?