Допустим вы хотите чтобы пользователь в вашем iFrame-приложении мог поставить фотостатус. (Например вы делаете приложение по работе с фотографиями, открытками и прочими свистоперделками). Что же такое этот фотостатус? Это обычная картинка порезанная на 4/5 частей. Как выделять, уменьшать и разрезать изображения средствами PHP я полагаю никому рассказывать не надо (библиотека GD в PHP + в качестве визуального редактора я использовал плагин для jquery imgareaselect).
Итак ситуация. после обработки у нас есть 4 нарезанных фотки + целый оригинал.
Задача - загрузить это добро на страничку пользователю в новый фотоальбом чтобы при этом в списке миниатюр последних загруженных фоток были только 4 эти кусочка в нужном порядке.
Выкладываю только основные элементы кода.
для работы приложения нам необходимы jquery (по желанию) и VK Open API
<script src="js/jquery.js"></script>
<script src="http://vkontakte.ru/js/api/openapi.js" type="text/javascript"></script>
Следующий код выполняется когда пользователь нажал на кнопу "поставить фотостатус"
/*cript*/
// если пользователь авторизован
VK.Auth.getLoginStatus(function(response) {
// берем его id
var id = response.session.mid;
// вытаскиваем список всех альбомов
VK.Api.call('photos.getAlbums', {}, function(data){
if(data.response){
data = data.response;
//перебираем все альбомы на предмет наличия нашего альбома
for(el in data){
if(data[el].title=='Имя_альбома'){
aid = data[el].aid;}
}
// если наш альбом не найден
if(!aid){
//создаем новый
VK.Api.call('photos.createAlbum', {title: 'Имя_альбома',privacy: '0', comment_privacy: '0',description: 'блаблабла'}, function(adata){
if(adata.response) {
ldata = adata.response;
// берем id альбома
aid = ldata.aid;
//загружаем фотки в альбом в следующем порядке - сначала оригинал,
//потом все кусочки по порядку начиная с последнего
uploadimg(aid,'original.jpg','03.jpg','02.jpg','01.jpg','00.jpg');
}else error(data);
});
}else{// такой альбом уже есть
// загружаем фотки
uploadimg(aid,'original.jpg','03.jpg','02.jpg','01.jpg','00.jpg');
}
}else error(data);
}); })
Функция uploadimg.
/*javascript*/
// aid - id альбома
//image1 - целый оригинал
//image2-image5 кусочки
function uploadimg(aid,image1,image2,image3,image4,image5){
VK.Api.call('photos.getUploadServer', {'aid':aid}, function(data){
if(data.response) {
data = data.response;
//upload_url - адрес для загрузки фотографий на сервер вконтакта
var upload_url = data.upload_url;
// отправляем POST запрос на php файл, который в свою очередь с помощью
$.post('upload.php' ,{upload:upload_url,foto1:image1,foto2:image2,foto3:image3,foto4:image4,foto5:image5},function(json){
if(json.server) {
// если загрузка прошла успешно сохраняем загруженные фотографии
VK.Api.call('photos.save', {'aid':aid,'server':json.server,'photos_list':json.photos_list,'hash':json.hash}, function(data){
if(data.response){
alert('Фотостатус сохранен! ');
}
});
}else error(json);
// обратите внимание что тип принимаемых данных от upload.php в формате json
},'json');
}else error(data);
});
}
upload.php - наше все!
можете просто копировать и вставлять
главное помните что в пост запросе ему должны передаваться следующие параметры:
1 - ссылка для загрузки файлов на вконтакт
2 - пять фотографий
/*php*/
if ($_POST["upload"]) {
// берем полный путь к файлам на сервере
define('BASEPATH', str_replace('\\', '/', dirname(__FILE__)) . '/');
$upload_url = $_POST["upload"];
// выставляем параметры для загрузки (полные пути до наших картинок)
$post_params['file1'] = '@'.BASEPATH.$_POST["foto1"];
$post_params['file2'] = '@'.BASEPATH.$_POST["foto2"];
$post_params['file3'] = '@'.BASEPATH.$_POST["foto3"];
$post_params['file4'] = '@'.BASEPATH.$_POST["foto4"];
$post_params['file5'] = '@'.BASEPATH.$_POST["foto5"];
// курл
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $upload_url);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_POSTFIELDS, $post_params);
$result = curl_exec($ch);
curl_close($ch);
//выводим результат в формате json
echo $result;
}