Я внедряю продукт Adobe Creative SDK на свой сайт для административного использования; администраторы могут получить доступ к определенным изображениям (используется на слайдере главной страницы), редактировать и сохранять.
Проблема в том, что документация Adobe о том, как воспользоваться функцией обратного вызова onSave (), очень расплывчата. Я должен был пойти на старый сайт, Aviary, чтобы найти ответы, но даже там это довольно расплывчато.
Во-первых, я вытаскиваю изображения с сервера с помощью запроса MySql DB (в слайдере есть как минимум 2 изображения, поэтому я хотел, чтобы это было основано на базе данных, а не статично). Изображения хранятся в виде файлов со ссылкой на них в БД.
Во-вторых, как только изображения отображаются на странице (все они отображаются на странице администрирования вместе с наложениями текста, ссылками и т. Д.), Администратор может щелкнуть изображение, вызвать Adobe Creative SDK и открыть окно редактора. , Все хорошо.
В-третьих, после редактирования администратор может нажать «Сохранить», и его изменения временно сохраняются в облаке Adobe (и отредактированное изображение заменяет исходное изображение на странице). Мне нужно, чтобы изображение также сохранялось на моем сервере, перезаписывая исходное изображение (я не хочу обновлять базу данных — слишком много дополнительной работы).
Это где расплывчатые инструкции в Adobe и Aviary не помогают.
Вот мой код …
(Это функции из Adobe Creative SDK):
var featherEditor = new Aviary.Feather({
apiKey: 'myapikey',
theme: 'dark', // Check out our new 'light' and 'dark' themes!
tools: 'all',
appendTo: '',
onSave: function(imageID, newURL) {
var img = document.getElementById(imageID);
img.src = newURL;
},
onError: function(errorObj) {
alert(errorObj.message);
}
});
function launchEditor(id, src) {
featherEditor.launch({
image: id,
url: src
});
return false;
}
По сути, каждое загруженное изображение включает в себя <img>
пометить событие onclick, которое выглядит так:
<a href="#" onclick="return launchEditor('editableimage<?php echo $srow->id ?>', 'http://www.3yearlectionary.org/assets/slider/<?php echo $srow->sld_image ?>');"><img id="editableimage<?php echo $srow->id ?>" src="assets/slider/<?php echo $srow->sld_image ?>" /></a>
Это вызывает функцию launchEditor и показывает редактор. При нажатии кнопки «Сохранить», среди прочего, вызывается обратный вызов onSave (), и именно в этой функции обратного вызова я могу сохранить изображение локально.
НО Adobe только предлагает следующие примеры, чтобы сделать это, и они имеют мало смысла для меня:
Во-первых, кажется, что это нужно добавить в функцию onSave ():
$.post('/save', {url: newURL, postdata: 'some reference to the original image'})
Я предполагаю, что ‘/ save’ на самом деле будет php-скрипт, который я использую для выполнения работы … или, может быть, это местоположение на сервере для сохранения изображения … не уверен. «Постданные» говорят, что для этого нужно «иметь некоторую ссылку на исходное изображение», но я не знаю, как это получить. Я попытался использовать «url» из функции launchEditor (), потому что кажется, что оно было передано в featherEditor, но это не сработало, просто я возвратил нулевое значение, когда я сделал alert ().
Если кто-то может помочь мне понять это, я могу легко позаботиться о php на стороне сервера, который делает сохранение. Но я просто не знаю, как получить новое изображение, сохраненное Adobe, чтобы переопределить старое изображение на моем сервере. Спасибо!
onSave()
методonSave()
это просто крюк; это метод, вызываемый после завершения сохранения изображения. Что вы положили внутрь onSave()
Метод полностью зависит от вас.
Для иллюстрации вы можете: 1) заменить исходный элемент элемента изображения новым URL отредактированного изображения, затем 2) закрыть редактор:
onSave: function(imageID, newURL) {
originalImage.src = newURL;
featherEditor.close();
}
Вы могли бы даже просто ввести консольный журнал, но это мало что даст пользователю.
Снова, onSave()
это просто ловушка, которая используется после завершения сохранения, и ее содержимое полностью зависит от вас.
Код, который вы указали в своем вопросе, является лишь примером того, как вы можете опубликовать данные на своем сервере, используя jQuery в редакторе изображений. onSave()
метод. Не требуется, чтобы вы делали это таким образом; вам даже не нужно использовать jQuery.
Для ясности рассмотрим этот пример еще раз:
$.post('/save', {url: newURL, postdata: 'some reference to the original image'})
В приведенном выше примере используется JQuery post()
метод ударить /save
конечная точка на вашем сервере. Этой конечной точкой может быть все, что вы хотите. Если у вас есть конечная точка на вашем сервере называется /upload-image
Вы можете использовать это вместо этого.
В вашем случае на этой конечной точке будет PHP-скрипт, который обрабатывает сохранение файла изображения и обновление базы данных.
Второй аргумент post()
это объект с данными, которые вы хотите передать. В этом примере мы передаем:
newURL
отредактированного изображения, чтобы ваш сервер мог что-то с ним сделать (см. Важная заметка ниже)postdata
здесь), чтобы ваш сервер мог знать, какое изображение было отредактированоВы можете положить все, что вы хотите в этом объекте. Это зависит от того, что нужно вашему скрипту сервера. Но, как минимум, я бы подумал, что newURL
и, вероятно, какой-то способ ссылки на исходное изображение в вашей базе данных.
Важная заметка: как отмечено в Creative SDK для веб-руководства по редактору изображений, newURL
что вы получаете в onSave()
метод является временный URL. Срок действия истекает через 72 часа. Это означает, что ваш серверный скрипт должен сохранить само изображение на вашем сервере. Если вы сохраните только URL в своей базе данных, ваши изображения начнут исчезать через 72 часа.
Других решений пока нет …