Ver Mensaje Individual
Antiguo 06-04-2015 , 11:27:52   #4
commodore128
Denunciante Popular
 
Avatar de commodore128
Me Gusta
Estadisticas
Mensajes: 1.019
Me Gusta Recibidos: 897
Me Gustas Dados: 1
Ingreso: 20 feb 2015

Temas Nominados a TDM
Temas Nominados Temas Nominados 7
Nominated Temas Ganadores: 0
Reputacion Poder de Credibilidad: 17
Puntos: 14672
commodore128 Es Una Leyenda Vivientecommodore128 Es Una Leyenda Vivientecommodore128 Es Una Leyenda Vivientecommodore128 Es Una Leyenda Vivientecommodore128 Es Una Leyenda Vivientecommodore128 Es Una Leyenda Vivientecommodore128 Es Una Leyenda Vivientecommodore128 Es Una Leyenda Vivientecommodore128 Es Una Leyenda Vivientecommodore128 Es Una Leyenda Vivientecommodore128 Es Una Leyenda Viviente
Premios Recibidos

  
Predeterminado Respuesta: Smline - 2 Buenos Mod

Cargar portada del post desde el equipo por ajax

mod lo que hace es que despliega la opción de cargar desde la compu
examinas, eliges tu archivo lo recortas si quieres y ya se imprimen las coordenas
y se carga la imagen original en la carpeta thumbs/tmp/ con el nombre
"id de usuario"-"número aleatorio".jpg



No le puse que se borrara automáticamente
pero pueden entrar a esa carpeta y eliminar todas las imágenes cada 3 o 6 meses
Después agrego esa función



Instrucciones

Ve a la raíz de tu web
entras a la carpeta thumbs
y creas la carpeta tmp
y le aumentas permisos
osea de lectura y escritura para que se puedan guardar las
imágenes que se carguen.

En posts.class.php
Después de :

[code]
function img_port($url){
$img_url = secure($url);
$data['img'] = getimagesize($img_url);
$min_w = 154;
$min_h = 116;
$max_w = 2000;
$max_h = 2000;
if(empty($data['img'][0])) return '0: La imagen de portada no existe o no es una imagen válida';
elseif($data['img'][0] < $min_w || $data['img'][1] < $min_h) return '0: La imagen debe tener un tama&ntilde;o superior a 154x116 pixeles';
elseif($data['img'][0] > $max_w || $data['img'][1] > $max_h) return '0: La imagen debe tener un tama&ntilde;o menor a 2000x2000 pixeles';
return '1: SMline';
}
[/code]

Agregas este codigo:

[code]
function newUpload(){
foreach($_FILES as $file)
$fReturn = $this->uploadFile($file);
if(empty($fReturn['msg'])) return array('error' => $fReturn[1]);
else return $fReturn;
}

function uploadFile($file){
global $mysqli, $user, $web;
$size = empty($this->file_size) ? getimagesize($file['tmp_name']) : $this->file_size;
if(empty($size)) die('0: Intentando subir un archivo que no es valido.');

$w = $size[0];
$h = $size[1];
$key = rand(0,1000);
$newName = $user->uid.'-'.$key.'.jpg';

$root = 'thumbs/tmp/'.$newName;
$msg = $web['url'].'/thumbs/tmp/'.$newName;
copy($file['tmp_name'],$root);
return array('msg' => $msg, 'error' => '', 'w' => $w, 'h' => $h);
}
[/code]

En posts.ajax.php

después de

[code]
case 'img_port':
$url = secure($_POST['url']);
echo $posts->img_port($url);
break;
[/code]

coloca:

Cita:
case 'img_file':
$result = $posts->newUpload();
echo json($result);
break;
En agregar-post.tpl
después de:

[code]
<div class="from-post">Desde el post</div>
[/code]

Pones lo siguiente:

[code]
<div class="from-pc">Desde tu equipo</div>
[/code]

atencion: si no has editado el archivo agregar-post.js
puedes reemplazarlo con el que dejo en el post
el archivo va en themes/smline/js
sino continueas editando lo siguiente:
En agregar-post.js:

Hasta arriba antes de:

[code]
$(document).ready(function(){
[/code]

Agrega esto

[code]
function isImageFile(filename){
var ext = (/[.]/.exec(filename)) ? /[^.]+$/.exec(filename.toLowerCase()) : '';
if(ext && /^(jpg|png|jpeg|gif)$/.test(ext)) return true;
else return false;
}
[/code]

antes de

[code]
case 'from-post':
[/code]

Agrega:

[code]
case 'from-pc':
mydialog.close_button = false;
mydialog.mask_close = false;
mydialog.show();
mydialog.title('Agregar imagen');
mydialog.body('<div id="error" class="image-url-error" style="display:none"></div><b>Localizar imagen</b><br /><input type="file" id="i_image" name="i_image" style="width:400px"/><br />');
mydialog.buttons(true, 'Cargar imagen', 'Cancelar', 'new_post.cargar_portada();', 'close', true);
mydialog.center();
$('input[name=i_image]').focus();
break;
[/code]

Antes de

[code]
portada_cortar: function(url){
mydialog.show();
mydialog.title('Cortar imagen');
[/code]

Pones:

[code]
cargar_portada: function () {
if ($('input#i_image').val()) {
if(isImageFile($('input#i_image').val())){
mydialog.loading('Cargando imagen...');
$.ajaxFileUpload({ url: '/ajax/posts/img_file/', fileElementId: 'i_image', dataType: 'json', success: new_post.uploadsuccess });
} else mydialog.alert('Error', 'El archivo no es una imagen válida.');
} else mydialog.alert('Error', 'No seleccionó ningún archivo');
},
uploadsuccess: function (r) {
mydialog.end_loading();
mydialog.loading(' hola');

if (r.error == 'success') {
new_post.success = true;
new_post.close();
mydialog.loading(' imagen no cargada...');
} else if (r.msg) {
$('input[name=img_url]').val(r.msg);

$('.thumbnail-preview').attr('src', r.msg).css({'width':'auto','height':'auto'});
new_post.portada_cortar(r.msg);

} else {
mydialog.center();
mydialog.title('Error');
mydialog.body(r.error);
}
},
[/code]

Y esto al final:

[code]
jQuery.extend({
createUploadIframe: function(id, uri)
{
//create frame
var frameId = 'jUploadFrame' + id;
var iframeHtml = '<iframe id="' + frameId + '" name="' + frameId + '" style="position:absolute; top:-9999px; left:-9999px"';
if(window.ActiveXObject)
{
if(typeof uri== 'boolean'){
iframeHtml += ' src="' + 'javascript:false' + '"';

}
else if(typeof uri== 'string'){
iframeHtml += ' src="' + uri + '"';

}
}
iframeHtml += ' />';
jQuery(iframeHtml).appendTo(document.body);

return jQuery('#' + frameId).get(0);
},
createUploadForm: function(id, fileElementId, data)
{
//create form
var formId = 'jUploadForm' + id;
var fileId = 'jUploadFile' + id;
var form = jQuery('<form action="" method="POST" name="' + formId + '" id="' + formId + '" enctype="multipart/form-data"></form>');
if(data)
{
for(var i in data)
{
jQuery('<input type="hidden" name="' + i + '" value="' + data[i] + '" />').appendTo(form);
}
}
var oldElement = jQuery('#' + fileElementId);
var newElement = jQuery(oldElement).clone();
jQuery(oldElement).attr('id', fileId);
jQuery(oldElement).before(newElement);
jQuery(oldElement).appendTo(form);



//set attributes
jQuery(form).css('position', 'absolute');
jQuery(form).css('top', '-1200px');
jQuery(form).css('left', '-1200px');
jQuery(form).appendTo('body');
return form;
},

ajaxFileUpload: function(s) {
// TODO introduce global settings, allowing the client to modify them for all requests, not only timeout
s = jQuery.extend({}, jQuery.ajaxSettings, s);
var id = new Date().getTime()
var form = jQuery.createUploadForm(id, s.fileElementId, (typeof(s.data)=='undefined'?false:s.data));
var io = jQuery.createUploadIframe(id, s.secureuri);
var frameId = 'jUploadFrame' + id;
var formId = 'jUploadForm' + id;
// Watch for a new set of requests
if ( s.global && ! jQuery.active++ )
{
jQuery.event.trigger( "ajaxStart" );
}
var requestDone = false;
// Create the request object
var xml = {}
if ( s.global )
jQuery.event.trigger("ajaxSend", [xml, s]);
// Wait for a response to come back
var uploadCallback = function(isTimeout)
{
var io = document.getElementById(frameId);
try
{
if(io.contentWindow)
{
xml.responseText = io.contentWindow.document.body?io.contentWindow.document.bod y.innerHTML:null;
xml.responseXML = io.contentWindow.document.XMLDocument?io.contentWindow.docum ent.XMLDocument:io.contentWindow.document;

}else if(io.contentDocument)
{
xml.responseText = io.contentDocument.document.body?io.contentDocument.document .body.innerHTML:null;
xml.responseXML = io.contentDocument.document.XMLDocument?io.contentDocument.d ocument.XMLDocument:io.contentDocument.document;
}
}catch(e)
{
jQuery.handleError(s, xml, null, e);
}
if ( xml || isTimeout == "timeout")
{
requestDone = true;
var status;
try {
status = isTimeout != "timeout" ? "success" : "error";
// Make sure that the request was successful or notmodified
if ( status != "error" )
{
// process the data (runs the xml through httpData regardless of callback)
var data = jQuery.uploadHttpData( xml, s.dataType );
// If a local callback was specified, fire it and pass it the data
if ( s.success )
s.success( data, status );

// Fire the global callback
if( s.global )
jQuery.event.trigger( "ajaxSuccess", [xml, s] );
} else
jQuery.handleError(s, xml, status);
} catch(e)
{
status = "error";
jQuery.handleError(s, xml, status, e);
}

// The request was completed
if( s.global )
jQuery.event.trigger( "ajaxComplete", [xml, s] );

// Handle the global AJAX counter
if ( s.global && ! --jQuery.active )
jQuery.event.trigger( "ajaxStop" );

// Process result
if ( s.complete )
s.complete(xml, status);

jQuery(io).unbind()

setTimeout(function()
{ try
{
jQuery(io).remove();
jQuery(form).remove();

} catch(e)
{
jQuery.handleError(s, xml, null, e);
}

}, 100)

xml = null

}
}
// Timeout checker
if ( s.timeout > 0 )
{
setTimeout(function(){
// Check to see if the request is still happening
if( !requestDone ) uploadCallback( "timeout" );
}, s.timeout);
}
try
{

var form = jQuery('#' + formId);
jQuery(form).attr('action', s.url);
jQuery(form).attr('method', 'POST');
jQuery(form).attr('target', frameId);
if(form.encoding)
{
jQuery(form).attr('encoding', 'multipart/form-data');
}
else
{
jQuery(form).attr('enctype', 'multipart/form-data');
}
jQuery(form).submit();

} catch(e)
{
jQuery.handleError(s, xml, null, e);
}
jQuery('#' + frameId).load(uploadCallback );
return {abort: function () {}};
},

uploadHttpData: function( r, type ) {
var data = !type;
data = type == "xml" || data ? r.responseXML : r.responseText;
// If the type is "script", eval it in global context
if ( type == "script" )
jQuery.globalEval( data );
// Get the JavaScript object, if JSON is used.
if ( type == "json" )
eval( "data = " + data );
// evaluate scripts within html
if ( type == "html" )
jQuery("<div>").html(data).evalScripts();

return data;
}
});
[/code]

instrucciones para descargar explicado del post aqui: instrucciones y js.zip

commodore128 no está en línea   Responder Citando
 
Page generated in 0,10811 seconds with 12 queries