Переименовать названия всех картинок в галереи

Добрый день.

Такой вопрос — есть интернет магазин на минишопе, админ клиента залил 100500 товаров на сайт, каждому в галереи указал фотографии. Но возникла проблема — заливал он фотографии с русскими именами. Отсюда 2 вопроса
1) как автоматически переименовать уже все существующие фотографии товаров на сервере?
2) как автоматически переименовать записи в галереи каждого товара?

Заранее спасибо
Леви Ким
29 ноября 2015, 09:44
modx.pro
3
2 435
0

Комментарии: 4

Илья Уткин
29 ноября 2015, 13:02
+1
В MODX есть генератор псевдонимов. Если у вас настроена транслитерация, то можно использовать его. Нужно пробежаться по всем файлам и записям. Вот так можно транслитерировать любую строку:
<?php
$generator = $modx->newObject('modResource');
$string = 'строка кириллицей';
$string = $generator->cleanAlias($string);
print $string; // выведет "stroka-kirillizcey"
    Леви Ким
    29 ноября 2015, 14:53
    0
    рискну прослыть неучем, но вот не получается у меня. Все товары лежат в папке с айди 6. логика простая — пройти все документы, вытащить значения image и сгенирировать псевдоним:
    $where = array('parent' => 6);
    $resources = $modx->getCollection('modResource',$where);
    foreach ($resources as $res) {
          $string = $res->get('image');
          $string = $generator->cleanAlias($string);
          $res->set('image', $string);
          $res->save();
    }
    выдает ошибку: Fatal error: Call to a member function cleanAlias() on a non-object in… console/processors/exec.class.php(15): eval()'d code on line 5
      Леви Ким
      29 ноября 2015, 15:11
      0
      понял почему ошбку — забыл
      $generator = $modx->newObject('modResource');
      Cохранил в сниппете. вызвал через фронтэнд. очистил кэш. Но названия не поменялись.
        Abu
        Abu
        29 ноября 2015, 20:29
        +1
        Делал немного по другому, через класс транслитерации

        <?php
        $stringToApplyTransliterationTo = "Транслитерация кириллицы в modx";
        $options = array();
        $translitTableName = 'russian';
        $translitClassPath = $modx->getOption(
            'friendly_alias_translit_class_path', 
            $options, 
            $modx->getOption('core_path', $options, MODX_CORE_PATH) . 'components/'
        ).'modx/translit/';
        if ($modx->getService('translit', 'modTransliterate', $translitClassPath, $options)) {
            $alias = $modx->translit->translate($stringToApplyTransliterationTo, $translitTableName);
        }
        return $alias;
    Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
    4