Загрузка фотографий в Tickets
Столкнулся с такой задачей:
1) Загрузка фотографий в Tickets
2) Вставка одной из выбранных фотографий в TV поле
Как известно реализация загрузки фотографий имеется в Tickets и работает на ура. Также загруженные фотографии без проблем добавляются в поле content, при этом их путь
1) В чанке tpl.Tickets.form.image добавил
А именно при сохранении тикета переписывать /0/ на соответсвующий ID создаваемого документа?
Василий, если не сложно дай пинка в нужном направлении. Либо знающий люд подскажите решение.
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 создаваемого документа?
Василий, если не сложно дай пинка в нужном направлении. Либо знающий люд подскажите решение.
Комментарии: 6
Я немного другим путем пошел. Немного модифицировал сниппет getTickets, обозвал его чуть иначе.
После 164 строки добавил следующий код:
Так же сам Tickets модифицированный (добавлена возможность сортировки), т.ч. если не запустится надо стереть «rank ASC, „
После 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, „
Спасибо, но его можно и без дублирования сниппета реализовать.
[[pdoResources:default=`/path/заглушка.png`? &class=`TicketFile` &where=`{"parent":[[*id]]}` &sortby=`createdon` &sortdir=`ASC` &limit=`1` &tpl=`@INLINE [[+url]]`]]
ТС последний раз был на сайте в прошлом году, но вдруг.
Кто-то знает как решить этот вопрос с нулем вместо id тикета в другом поле?
Кто-то знает как решить этот вопрос с нулем вместо id тикета в другом поле?
Есть такой файл github.com/bezumkin/Tickets/blob/32b75aad0f7bbf7407efd4fe8206c1e0e767eb6e/core/components/tickets/processors/mgr/ticket/create.class.php#L343
и кажется, что добавив строку
и кажется, что добавив строку
'tv_image' => $this->object->get('tv_image'),
всё получится, но конь там плавал
Небольшое решение:
Я добавлял 2 поля content2 и image (не TV)
В этом файле
после
и не забывайте, что при обновлении Tickets надо файл править заново.
Я не разобрался только с одним, а как заменить ноль, если в поле image только строка
Я думаю, что за это отвечает эта регилярка, идущая ниже в файле
Я добавлял 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';
но я туда не смог подключить эту строку
Такая регулярка заработала, а нормальные нет,
$pcre = '#<a.*?>.*?</a>|<img.*?>|\/assets\/images\/ticket.*?g#s';
так, что если вам нужны только форматы, заканчивающиеся на g (jpg,jpeg,png) — welcome )))))))))
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.