Загрузка фотографий в Tickets

Столкнулся с такой задачей:
1) Загрузка фотографий в Tickets
2) Вставка одной из выбранных фотографий в TV поле

Как известно реализация загрузки фотографий имеется в Tickets и работает на ура. Также загруженные фотографии без проблем добавляются в поле content, при этом их путь
/assets/images/tickets/0/1ba614f4f3024a19707bf9a3ee631ee1be02a192.jpg
Я решил сделать немного по другому и оставить возможность выбора превью для тикета следующим образом:
1) В чанке tpl.Tickets.form.image добавил
<a href="#" class="ticket-file-avatar" data-image="[[+url]]">Назначить ОБЛОЖКОЙ</a>
2) /assets/components/tickets/js/web/files.js
$(document).on('click', '.ticket-file-avatar', function(e) {
	var link = $(this).attr('data-image');
	$('[name="image"]').val(link);
	$('.ava').attr('src', link);
	return false;
});
Далее возникает вопрос, как обрабатывать данные в TV.image точно также как это происходит в content.
А именно при сохранении тикета переписывать /0/ на соответсвующий ID создаваемого документа?

Василий, если не сложно дай пинка в нужном направлении. Либо знающий люд подскажите решение.
Ruslan Butakov
30 марта 2015, 11:54
modx.pro
4
2 468
0

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

Виталий Серый
30 марта 2015, 16:06
1
0
Я немного другим путем пошел. Немного модифицировал сниппет getTickets, обозвал его чуть иначе.
После 164 строки добавил следующий код:
if (!empty($getFiles)) {
    $data['files'] = $content = '';
    $k = $row['file.0.url'] = 0;
    if (!empty($unusedFiles) && !empty($row['content'])) {
        $content = $row['content'];
    }
    
    $where = array('deleted' => 0, 'class' => 'Ticket', 'parent' => $row['id'], 'type' => 'image');
    $q = $this->xpdo->newQuery('TicketFile', $where);
    $q->select('url');
    $q->sortby('rank ASC, createdon', 'ASC');
    if ($q->prepare() && $q->stmt->execute()) {
        $imgs = $q->stmt->fetchAll(PDO::FETCH_COLUMN);
        foreach ($imgs as $k => $img) {
            if ($content && strpos($content, $img) !== false || $k != 0) {
                continue;
            }
            $row['file.'.$k.'.url'] = $img;
            $k++;
        }
    }
    $row['has_files'] = !empty($row['file.0.url']);
}
Включается с &getFiles=`1`. Первое изображение в плейсхолдере [[+file.0.url]].

Так же сам Tickets модифицированный (добавлена возможность сортировки), т.ч. если не запустится надо стереть «rank ASC, „
    Ruslan Butakov
    30 марта 2015, 17:30
    0
    Спасибо, но его можно и без дублирования сниппета реализовать.
    [[pdoResources:default=`/path/заглушка.png`? &class=`TicketFile` &where=`{"parent":[[*id]]}`  &sortby=`createdon`  &sortdir=`ASC`  &limit=`1`  &tpl=`@INLINE [[+url]]`]]
    Петр Синечёв
    27 февраля 2019, 16:40
    0
    ТС последний раз был на сайте в прошлом году, но вдруг.
    Кто-то знает как решить этот вопрос с нулем вместо id тикета в другом поле?
      Петр Синечёв
      27 февраля 2019, 17:40
      0
      Есть такой файл github.com/bezumkin/Tickets/blob/32b75aad0f7bbf7407efd4fe8206c1e0e767eb6e/core/components/tickets/processors/mgr/ticket/create.class.php#L343
      и кажется, что добавив строку
      'tv_image' => $this->object->get('tv_image'),
      всё получится, но конь там плавал
        Петр Синечёв
        01 марта 2019, 15:14
        0
        Небольшое решение:
        Я добавлял 2 поля content2 и image (не TV)
        В этом файле
        после
        'introtext' => $this->object->get('introtext'),
        'content' => $this->object->get('content'),
        Добавил
        'contentpaid' => $this->object->get('contentpaid'),
        'image' => $this->object->get('image'),
        В вызове TicketForm должны присутствовать эти поля в allowedFields и bypassFields
        'allowedFields' => 'parent,pagetitle,content,content2,image',
        'bypassFields' => 'content2,image'
        И если у вас в эти поля файл попадает в стандартной форме, т.е. в виде
        <img class="..." src="/assets/images/tickets/0/b433a5754eea47846531e9cdb9075eca53ef2f2a.jpg">
        то /0/ при публикации тикета будет заменяться на соответсвующий ID и в этих полях.

        и не забывайте, что при обновлении Tickets надо файл править заново.

        Я не разобрался только с одним, а как заменить ноль, если в поле image только строка
        /assets/images/tickets/0/b433a5754eea47846531e9cdb9075eca53ef2f2a.jpg
        (без тегов img, a и прочего)

        Я думаю, что за это отвечает эта регилярка, идущая ниже в файле
        $pcre = '#<a.*?>.*?</a>|<img.*?>#s';
        но я туда не смог подключить эту строку
          Петр Синечёв
          01 марта 2019, 15:45
          0
          Такая регулярка заработала, а нормальные нет,
          $pcre = '#<a.*?>.*?</a>|<img.*?>|\/assets\/images\/ticket.*?g#s';
          так, что если вам нужны только форматы, заканчивающиеся на g (jpg,jpeg,png) — welcome )))))))))
          Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
          6