Убрать расширения по регулярному выражению!

Приветствую сообщество!

В общем дело такое…
Необходимо в теле контента (а в контенте у нас много всего и картинки и теги и текст разумеется), убрать расширение…
НО! Не у самих картинок, а у атрибута title, т.е.:
Было так:
<a href="/assets/images/tickets/95/8b8d318dc167c4249d0635e60a0ca114b1e03aaf.png" data-fancybox="gallery">
    <img title="dazzle1.png" src="/assets/images/tickets/95/8b8d318dc167c4249d0635e60a0ca114b1e03aaf.png" alt="dazzle1.png">
<small>Нажмите на картинку для увеличения.</small> 
</a>
но убрать надо расширение, чтобы получилось так:
title=«dazzle1»

Было бы просто, например так:
{$_modx->resource.content | replace : '.jpg' : ''}
конечно даже такое выражение не поможет, т.к. по мимо того, что оно уберет все подобные совпадения, так еще и дополнительное условие наверняка через костыли воротить, а даже если и нет, один фиг не подходит.
Есть еще вот такая шляпа:
{'April 15, 2014' | ereplace : '/(\w+) (\d+), (\d+)/i' : '${1}1, $3'}
НО! Как сделать так, чтобы она вырезала только то, что мне нужно у меня не получилось, не силен в PHP и кракозябры эти не пойму, воротил, воротил и не наворотил ничего!

Вообще в идеале было бы прикольно, если есть у кого идеи или решение о том, как можно менять title на стадии создания тикета из фронта, было легче и проще, но и там я не преуспел, даже с костылями.

Помогите в этом нелегком вопросе!
Andrey
26 сентября 2018, 00:48
modx.pro
1 403
0

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

Василий Наумкин
26 сентября 2018, 10:38
+1
По идее, как-то так:
{$_modx->resource.content | preg_replace : '#title="(.*?)(\..*?)"#' : 'title="$1"'}

Не уверен, что это сработает на синтаксисе Fenom из-за $1 в выражении. Если нет, то нужно будет просто написать свой модификатор с preg_replace.
    Andrey
    29 сентября 2018, 03:38
    0
    Благодарю за помощь.
    Данное решение не сработало, действительно! Буду пробовать еще варианты!
    Но тем не менее, спасибо!
      Сергей Шлоков
      29 сентября 2018, 10:05
      +1
      Разрешите выполнять php странице в настройках pdoTools и используйте нативную функцию php
      {$.php.preg_replace('#title="(.*?)(\..*?)"#','title="$1"',$_modx->resource.content)}
        Andrey
        29 сентября 2018, 15:41
        0
        PHP мне кажется не сосем безопасно разрешать выпонять на странице, можно ли вот это дело как то в модификатор запихнуть?
      Сергей Шлоков
      29 сентября 2018, 10:00
      0
      Ради интереса решил попробовать. Fenom нормально кушает $1. Но в данном случае возникает ошибка —
      Using the eval modifier for regular expressions is not allowed: "#title="(.*?)(\..*?)"#"
      Мешает некорректная регулярка, которой не нравится буква e в слове title.
        Andrey
        29 сентября 2018, 15:40
        0
        да не совсем, у меня вся страница по одному месту идет, если применить через феном :D
      Николай
      26 сентября 2018, 13:12
      +1
      Вообще в идеале было бы прикольно, если есть у кого идеи или решение о том, как можно менять title на стадии создания тикета из фронта, было легче и проще, но и там я не преуспел, даже с костылями.
      Можно создать плагин на событие OnDocFormSave, там же подключить библиотеку типа PHP Simple HTML DOM Parser, а дальше распарсить любое сохраняемое значение и перезаписать его на лету.
        Алексей Ерохин
        26 сентября 2018, 15:03
        +1
        Менять процессор для сохранения name без расширения
        title скорее всего оттуда берется (надо чанк вывода смотреть)

        Вариант 1.
        github.com/bezumkin/Tickets/blob/master/core/components/tickets/processors/web/file/upload.class.php#L125
        Добавить строчку
        $uploaded_file->set('name', array_slice(explode('.',$data['name']),0,-1));
        Вариант 2.
        github.com/bezumkin/Tickets/blob/master/core/components/tickets/processors/web/file/upload.class.php#L192
        Добавить строчку
        $data['properties']['name'] =  array_slice(explode('.',$data['name']),0,-1);
          Andrey
          29 сентября 2018, 03:45
          0
          эх, тоже не работает. Выдает "Array"
            Алексей Ерохин
            30 сентября 2018, 00:54
            +1
            Да что-то я забыл про это.
            Надо так
            $name = array_slice(explode('.',$data['name']),0,-1);
            $name = implode('.', $name);
            $uploaded_file->set('name', $name);
              Andrey
              30 сентября 2018, 02:00
              0
              В общем, вы человек Волшебник!
              Спасибо огромное!
          Andrey
          29 сентября 2018, 03:39
          +1
          Спасибо за вариант, буду пробовать!
            Сергей Шлоков
            29 сентября 2018, 10:16
            0
            {'April 15, 2014' | ereplace : '/(\w+) (\d+), (\d+)/i' : '${1}1, $3'}
            НО! Как сделать так, чтобы она вырезала только то, что мне нужно у меня не получилось, не силен в PHP и кракозябры эти не пойму, воротил, воротил и не наворотил ничего!
            Так а что нужно-то?
              Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
              13