Сложная структура данных, хэши

И всё прочее, что касается HTML
Правила форума
Убедительная просьба юзать теги [code] при оформлении листингов.
Сообщения не оформленные должным образом имеют все шансы быть незамеченными.
Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Сложная структура данных, хэши

Непрочитанное сообщение ProFTP » 2009-12-24 10:46:00

хотел написать классы, чтобы вылосипеды не писать всегда, и чтобы кода поменьше было, а просто отправить данные в класс и получить результат уже готовый
и за одно на cpan.org поставить модули


но вот не получается сделать структуру данных для одного модуля

вот я выбрал в ассоциативном виде, правильно?

Dumper( $col_set->{name_url_sort} ); выводит полностью ЛИБО или хэш name, или хэш username
почему оба в месте не выводятся?

ключи не могут быть продублированы? я увидел тут единственный нормальный вариант отправить такую структуру...

уже пробовал много раз, вот где инициализация:

Код: Выделить всё

    .................  
   $s->sorting_column( 
     { 
       name_url_sort =>    { 'name' =>  
   								{'out_sort_sql' => 't1.name_se',  
    								'out_template' => 'name_sort', 
   								'out_parametr_sort_url' => '/?sort=' } 
    								  
    							  }
    							  
    							  ,
    							
      
     name_url_sort =>    { 'username' =>  
 	  								{ 'out_sort_sql' => 't4.username',   
    								 'out_template' => 'username_sort', 
   								 'out_parametr_sort_url' => '/?sort=' } 
   								    								  
   								  }    								  
      }
      
  ........
     
   
   );


в классе:

Код: Выделить всё


........
sub sorting_column {

my $self = shift;
my $col_set = shift if @_;;
	
use Data::Dumper;
print Dumper( $col_set->{name_url_sort} );
		
	
    if (  $col_set->{name_url_sort}->{ $self->sorting } ) {
 
    $self->{out_sort_sql} = 		  $col_set->{name_url_sort}->{ $self->sorting }->{out_sort_sql};
    $self->{out_parametr_sort_url} = $col_set->{name_url_sort}->{ $self->sorting }->{out_parametr_sort_url}.''.$self->sorting;
    $self->{out_template} = 		  $col_set->{name_url_sort}->{ $self->sorting }->{out_template};    
    
    }  else {
     
      $self->{out_sort_sql}  = $self->else_default->{out_sort_sql};
      $self->{out_template} = $self->else_default->{out_template};   

	  }
......  
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Хостинговая компания Host-Food.ru
Хостинг HostFood.ru
 

Услуги хостинговой компании Host-Food.ru

Хостинг HostFood.ru

Тарифы на хостинг в России, от 12 рублей: https://www.host-food.ru/tariffs/hosting/
Тарифы на виртуальные сервера (VPS/VDS/KVM) в РФ, от 189 руб.: https://www.host-food.ru/tariffs/virtualny-server-vps/
Выделенные сервера, Россия, Москва, от 2000 рублей (HP Proliant G5, Intel Xeon E5430 (2.66GHz, Quad-Core, 12Mb), 8Gb RAM, 2x300Gb SAS HDD, P400i, 512Mb, BBU):
https://www.host-food.ru/tariffs/vydelennyi-server-ds/
Недорогие домены в популярных зонах: https://www.host-food.ru/domains/

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: Сложная структура данных, хэши

Непрочитанное сообщение ProFTP » 2009-12-24 11:48:47

тю, блин, ключи хэша не могут быть продублированны ЖЕСКО ограничено

сейчас попробую списками заменить
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение

Аватара пользователя
ProFTP
подполковник
Сообщения: 3388
Зарегистрирован: 2008-04-13 1:50:04
Откуда: %&й
Контактная информация:

Re: Сложная структура данных, хэши

Непрочитанное сообщение ProFTP » 2009-12-24 14:08:51

сделал

а подскажите, как назвать данный модуль? Catalyst::Model::HTML::Sorting::DBI?


сделал так

Код: Выделить всё

package MyApp::Model::Sorting;

use strict;
use warnings;

use parent qw( Catalyst::Model Class::Accessor );
use Class::C3::Adopt::NEXT;

__PACKAGE__->mk_accessors(qw/sorting else_default/);

sub new {
    my ( $self, $c ) = @_;
    $self = $self->next::method(@_);
}

sub sorting_column {

    my $self = shift;
    my $col_set = shift if @_;

    if (   $self->sorting
        && $col_set->{ $self->sorting }
        && $col_set->{ $self->sorting }->{name_url_sort} )
    {

        $self->{out_sort_sql} =
          $col_set->{ $self->sorting }->{name_url_sort}->{out_sort_sql};
        $self->{out_parametr_sort_url} =
          $col_set->{ $self->sorting }->{name_url_sort}->{out_parametr_sort_url}
          . ''
          . $self->sorting;
        $self->{out_template} =
          $col_set->{ $self->sorting }->{name_url_sort}->{out_template};

    }
    else {

        $self->{out_sort_sql} = $self->else_default->{out_sort_sql};
        $self->{out_template} = $self->else_default->{out_template};

    }

}

sub desc_asc {

    my $self = shift;

    my $set = shift if @_;

    if ( $set->{asc_desc} ) {

        $self->{out_parametr_sort_url} .= $set->{if_asc_desc_value};
        $self->{asc} = 1;
        $self->{out_sort_sql} .= $set->{if_asc_desc};

    }
    else {

        $self->{out_sort_sql} .= $set->{else_asc_desc};
    }

    return $self->{asc} ? 1 : undef;

}

sub out_sort_sql {
    my $self = shift;

    return $self->{out_sort_sql} if ( $self->{out_sort_sql} );

}

sub out_sort_url {
    my $self = shift;

    return $self->{out_parametr_sort_url} if ( $self->{out_parametr_sort_url} );

}

sub sort_template {
    my $self = shift;
    return $self->{out_template} if ( $self->{out_template} );

}

=head1 NAME

Catalyst::Model::Sorting - Catalyst Model

=head1 DESCRIPTION

Catalyst Model.

=head1 AUTHOR

Dmitriy

email: rtyug@ukr.net

=head1 LICENSE

This library is free software. You can redistribute it and/or modify
it under the same terms as Perl itself.

=cut

1;

как работает:

Код: Выделить всё

   my ( $sort, $asc ) = split( /-/, $c->request->params->{sort}, 2 )
      if ( $c->request->params->{sort} );

    my $s = $c->model('ExtraDBI')->new;

    $s->sorting($sort);

    $s->else_default(
        {
            'out_sort_sql' => 't1.created',
            'out_template' => 'time_sort'
        }
    );



    $s->sorting_column(
        {
            name => {
                'name_url_sort' => {
                    'out_sort_sql'          => 't1.name_se',
                    'out_template'          => 'name_sort',
                    'out_parametr_sort_url' => '/?sort='
                  }

              }

            ,

            username => {
                'name_url_sort' => {
                    'out_sort_sql'          => 't4.username',
                    'out_template'          => 'username_sort',
                    'out_parametr_sort_url' => '/?sort='
                  }

            }
        }

    );

    $c->stash->{asc} = $s->desc_asc(
        {
            'asc_desc'          => $asc,
            'if_asc_desc_value' => '-asc',
            'if_asc_desc'       => ' asc',
            'else_asc_desc'     => ' desc'
        }
    );

    my $sort_url = $s->out_sort_url;
    my $sort_sql = $s->out_sort_sql;

    $c->stash->{ $s->sort_template } = 1 if ( $s->sort_template );

$sort_url идет в URL

$sort_sql в SQL запрос после 'ORDER BY '. $sort_sql
Pеrl FAQ
perl -e 'print join"",map $$_[rand@$_],([0..9,'a'..'z','A'..'Z'])x30'
ИзображениеИзображение