Pero tengo problemas con acentos, tildes y "ñ", los cuales pensaba que había resuelto. Tengo un código que me inserta un registro y me funciona bien y un código similar que edita el registro. Pero ahí vino el problema: los caracteres especiales se guardan directamente en el archivo lo que hace claro que en la web no se vean bien.
Envío unas fotos para mostrar el problema.
¿Qué podrá ser y qué rayos podrá estar causando esto? Como pueden ver en el mismo listado se muestran que funcionan los acentos pero que hay un error con otro registro y en la otra imagen vemos como los tiene en el archivo plano.
Pondré por acá el código que tengo para guardar, insertar y actualizar.
Using perl Syntax Highlighting
- sub category_add_process {
- my $self = shift;
- my $form = shift;
- my $dbh = $self->dbh;
- my $language = $self->current_language();
- my $category = MyApp::Db::Stock::Category->new($dbh);
- my $categoryP = MyApp::Db::Stock::Category->new($dbh);
- my $q = $self->query();
- my $patch,
- my $user = MyApp::Db::User->new($dbh);
- my @ue = $self->uploadFile('images');
- if ($ue[0]){
- if(!$self->thumbnail($ue[0],120,"thumb")){
- $self->resize($self->cfg('upload_dir')."/images/".$ue[0],120,"thumb");
- };
- }
- $user->retrieve_by('username',$self->authen->username);
- $form = $form->fields;
- $self->add_log('debug','Entra proceso guardar category :'.$q->param('name'));
- #Si no hay padre, entonces el padre es 0
- $form->{'parent_id'} = 0 if !$form->{'parent_id'};
- my %d = (
- parent_id => $form->{'parent_id'},
- name => $form->{'name'},
- short_description => $form->{'short_description'},
- long_description => $form->{'long_description'},
- thumb => $ue[0],
- tags => $form->{'tags'},
- meta_tags => $form->{'meta_tags'},
- meta_description => $form->{'meta_description'},
- created_by => $user->{data}->{'user_id'},
- status => $form->{'status'},
- creation_date => $self->fecha_actual,
- );
- my $id = $category->insert(\%d);
- $categoryP->retrieve($form->{'parent_id'});
- $category->retrieve($id);
- if ($form->{'parent_id'}){
- $patch = $categoryP->{data}->{patch}."/".$self->urlConverter($form->{'name'});
- }else{
- $patch = "".$self->urlConverter($form->{'name'});
- }
- $category->update({ patch => $patch });
- return $id;
- }
Coloreado en 0.007 segundos, usando GeSHi 1.0.8.4
Using perl Syntax Highlighting
- sub category_edit_process {
- my $self = shift;
- my $form = shift;
- my $dbh = $self->dbh;
- my $language = $self->current_language();
- my $category = MyApp::Db::Stock::Category->new($dbh);
- my $categoryP = MyApp::Db::Stock::Category->new($dbh);
- my $q = $self->query();
- my $user = MyApp::Db::User->new($dbh);
- my @ue = $self->uploadFile('images');
- my $imagen;
- $form = $form->fields;
- if($ue[0] ){
- $imagen = $ue[0];
- if(!$self->thumbnail($ue[0],120,"thumb")){
- $self->resize($self->cfg('upload_dir')."/images/".$ue[0],120,"thumb");
- };
- unlink($self->cfg('upload_dir')."/images/".$form->{'last_thumb'});
- unlink($self->cfg('upload_dir')."/images/thumb_".$form->{'last_thumb'});
- }else{
- $imagen = $form->{'last_thumb'}
- }
- $user->retrieve_by('username',$self->authen->username);
- $self->add_log('debug','Entra proceso editar category :'.$q->param('name'));
- $category->retrieve($form->{'category_id'});
- $categoryP->retrieve($form->{'parent_id'});
- $form->{'parent_id'} = 0 if !$form->{'parent_id'};
- if ($form->{'parent_id'}){
- $patch = $categoryP->{data}->{patch}."/".$self->urlConverter($form->{'name'});
- }else{
- $patch = $self->urlConverter($form->{'name'});
- }
- my %d = (
- parent_id => $form->{'parent_id'},
- name => $form->{'name'},
- short_description => $form->{'short_description'},
- long_description => $form->{'long_description'},
- patch => $patch,
- thumb => $imagen,
- tags => $form->{'tags'},
- meta_tags => $form->{'meta_tags'},
- meta_description => $form->{'meta_description'},
- status => $form->{'status'},
- );
- my $id = $category->update(\%d);
- return $id;
- }
Coloreado en 0.003 segundos, usando GeSHi 1.0.8.4
Y estos son los métodos update e insert:
Using perl Syntax Highlighting
- sub insert {
- my $self = shift;
- my $datos = shift;
- my $dbh = $self->{dbh};
- my $table_name = $self->{table};
- my $fields = $self->{fields};
- my $pk = $self->{primary_key};
- my (@campo,@valor);
- #===========================================
- #Incrementar la primary key para CSV
- #===========================================
- if ($self->{db_type} eq 'CSV'){
- my $ld = $self->getLastId($table_name,$pk);
- $campo[0] = $pk;
- $valor[0] = $ld;
- #my $st = $dbh->prepare("SELECT * FROM $tabla ORDER By $pk DESC");
- #$st->execute();
- }
- #===========================================
- # RECORREMOS LOS DATOS Y SACAMOS LOS PARES LLAVES VALOR
- foreach $key(keys %$datos){
- push @campo, $key;
- push @valor, $datos->{$key};
- };
- # return $datos;
- my $query = 'INSERT INTO ' . $table_name;
- $query .= ' (' . join( ',',@campo ). ')';
- $query .= ' VALUES ('.join( ',', map { '?' } @valor ).')';
- #return $query;
- my $sth = $dbh->prepare($query) or die $dbh->errstr()."QUERY: ".$query ;
- if ( $sth->execute(@valor) or die $dbh->errstr()."QUERY: ".$query ) {
- my $ld = $self->getLastId($table_name,$pk);
- return $ld - 1;
- }
- else {
- return 0;
- }
- }
Coloreado en 0.002 segundos, usando GeSHi 1.0.8.4
Using perl Syntax Highlighting
- sub update {
- my $self = shift;
- my $datos = shift;
- my $dbh = $self->{dbh};
- my $table_name = $self->{table};
- my $fields = $self->{fields};
- my $pk = $self->{primary_key};
- my (@campo,@valor);
- # RECORREMOS LOS DATOS Y SACAMOS LOS PARES LLAVES VALOR
- foreach $key(keys %$datos){
- push @campo, $key;
- push @valor, $datos->{$key};
- };
- #return @campo;
- my $query = 'UPDATE ' . $table_name;
- $query .= ' SET ';
- $query .= join( ',', map { $_ . ' = ?' } @campo );
- $query .= ' WHERE ' . $pk . ' = ?';
- #return $query;
- my $sth = $dbh->prepare($query) or die $dbh->errstr();
- if ( $sth->execute(@valor,$self->{data}->{$pk}) or die $dbh->errstr() ) {
- return $pk;
- }
- else {
- return 0;
- }
- }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4
Bueno, es todo lo que tengo. Espero poder solucionar algo.
ANEXO ESTAS DOS FUNCIONES QUE LLAMAN a ambos metodos de editar e insertar:
Using perl Syntax Highlighting
- sub urlConverter {
- my $selft = shift;
- my $titulo = uc(shift);
- $titulo = textoEncoded($titulo);
- $titulo =~ tr/áéíóúñÁÉÍÓÚÑÂÊÎÔÛâêîôûÄËÏÖÜäëïöü/AEIOUNAEIOUNAEIOUAEIOUAEIOUAEIOU/;
- $titulo =~ s/\W/-/g;
- $titulo =~ s/-{2,}/-/g;
- $titulo =~ s/^(-)(.*)(-)$/$2/;
- return lc($titulo) ;
- }
- sub textoEncoded {
- my $texto = shift;
- $texto = decode_entities($texto);
- utf8::decode($texto);
- return $texto;
- }
Coloreado en 0.001 segundos, usando GeSHi 1.0.8.4