Транслитерация загружаемых файлов в MODX: как настроить и почему это важно

MODX Revo Транслитерация загружаемых файлов MODX Revo

MODX — гибкая и мощная система управления контентом (CMS), которая позволяет легко адаптировать функциональность под любые потребности. Одной из распространённых задач при работе с MODX является транслитерация имён загружаемых файлов, особенно если сайт работает на кириллическом контенте или других алфавитах, отличных от латинского. В этой статье рассмотрим, зачем нужна транслитерация, какие проблемы она решает и как её настроить в MODX.

Зачем нужна транслитерация?

  1. Улучшение URL и SEO: Файлы с кириллическими именами могут создавать некорректные ссылки, что негативно влияет на индексацию поисковыми системами.
  2. Совместимость с серверами: Некоторые серверы и файловые системы не поддерживают кириллицу или другие нестандартные символы, что может привести к ошибкам при обработке файлов.
  3. Эстетика и удобство: Транслитерированные имена файлов легче читаются и лучше воспринимаются пользователями и администраторами сайта.

Способы транслитерации файлов

MODX 3

Если у вас сайт работает на MODX 3, вам достаточно установить у настроить пакет translit (и сделать настройки ЧПУ), после этого все загружаемые фалы должны транслитерироваться. Если этого не происходит, проверьте системную настройку upload_translit, она должна быть включена.

MODX 2

В modx 2 системной настройки upload_translit нет, да и работает с ним не только translit, но и более продвинутые плагины транслитерации, такие как Translitor и gTranslit, поэтому путей у нас намного больше.

1. Использование дополнений «translit» + «filetranslit»

Если для ЧПУ вы уже используете дополнение translit, то самое простое решение установить еще дополнение из MODX репозитория, под названием filetranslit.

2. Использование дополнения «translit» + свой плагин 

Не хотите устанавливать filetranslit или он у вас не работает, можно поступить к примеру так:

  1. Добавьте новую системную настройку upload_translit.
  2. Установите её значение в 1 (включено).
  3. Перейдите в ЭлементыПлагины и создайте новый плагин.
  4. Привяжите его к событию OnFileManagerUpload.
  5. Добавьте следующий код:
    <?php
    $modx->getService('translit', 'modTransliterate');
    foreach ($files as $file) {
        if ($file['error'] == 0) {
            $newName = $modx->translit->sanitize($file['name'], 'russian');
            $oldPath = $file['tmp_name'];
            $newPath = dirname($oldPath) . '/' . $newName;
            rename($oldPath, $newPath);
        }
    }

    Этот код транслитерирует имя файла при загрузке, заменяя оригинальное имя новым.

3. Использование любых плагинов транслитерации + свой плагин 

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

<?php
    setlocale(LC_ALL, 'ru_RU.utf8'); //фикс для неправильных серверов, иначе не будет работать patchinfo с кириллицей
    $fullPath = $source->getBases()['pathAbsolute'].$directory; //получаем абсолютную директорию
    $dir = scandir($fullPath);
        
    foreach ($files as $key => $file) {
        $info = pathinfo($file['name']);
        $name = $info['filename'];
          
        $name = modResource::filterPathSegment($modx, $name); //транслитерация
          
        $extension = $info['extension'];
        $fullname = $name.'.'.$extension;
        //ищем файлы с таким же названием в этой директории
        if (!in_array($fullname, $dir)) {
            $newFullName = $fullname;
        } else {
            $newFullName = $name.'_'.rand(1,999999).'.'.$extension;
        }
        $file['name'] = $newFullName;
          
        $modx->event->params['file'] = $file; //отдаем измененную переменную file
        $files[$key] = $file;
    }

    $modx->event->params['files'] = $files; //отдаем измененную переменную files

Его нужно повесить на событие: OnFileManagerBeforeUpload.

Данный плагин дружит с любыми дополнениями транслитерации: translit, gTranslit и Translitor + если имя не уникально, то ему добавиться префикс.

Заключение

Транслитерация файлов в MODX — важная часть настройки системы для обеспечения совместимости, улучшения SEO и повышения удобства работы с файлами. Использование встроенных возможностей MODX или создание пользовательских плагинов позволяет адаптировать систему под любые требования. Правильная настройка транслитерации сделает ваш сайт более стабильным и удобным для пользователей.

Поделиться с друзьями
Алексей

Веб-дизайнер и SEO оптимизатор. Занимаюсь созданием сайтов с 2010 года и их продвижение с 2012 года!

Оцените автора
( Пока оценок нет )
Web-Revenue.ru
Добавить комментарий