Модераторы: korob2001, ginnie
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сортировка ключей хеша в Template Toolkit 
:(
    Опции темы
XeLpeR
Дата 22.10.2008, 22:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 22.9.2008

Репутация: нет
Всего: нет



Доброго времени суток ! У меня назрел очередной вопросик, пожалуйста помогите разобраться  smile 

Дан хеш массив:
Код

my %tp = (
        0 => 'gh',
        1 => 'gfhfg',
        10 => 'ffff',
        12 => 'ghfghfgh',
);

передаем его в тимлейт и используем следующим образом:
Код

    [% FOREACH cat = tp%]
    <A href="index.cgi?page=[% cat.key %]">[% cat.value %]</A>-
    [% END %]


В результате элементы будут выводиться отсортированные по ключу, но в лексикографическом порядке, а необходимо чтобы они сортировались как числа ( или хотябы выводились в том же порядке, что и в начальном хеше).



Это сообщение отредактировал(а) XeLpeR - 22.10.2008, 22:39
PM MAIL   Вверх
ginnie
Дата 23.10.2008, 09:49 (ссылка) |  (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



XeLpeR, могу предложить

Код

[% FOREACH key IN tp.keys.nsort %]
    <A href="index.cgi?page=[% key %]">[% tp.$key %]</A>-
[% END %]



Цитата(XeLpeR @  22.10.2008,  22:38 Найти цитируемый пост)
выводились в том же порядке, что и в начальном хеше


Для обычных хешей это невозможно впринципе, т.к. внутри хэша данные хранятся всегда в разном порядке.

P.S. предложенный вариант сам не проверял, т.к. TT не пользуюсь, взял из документации  smile 

Это сообщение отредактировал(а) ginnie - 23.10.2008, 09:50


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
XeLpeR
Дата 23.10.2008, 14:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 22.9.2008

Репутация: нет
Всего: нет



Ура, ура, ура !!!
Огромное спсибо, рааботает ! smile 
PM MAIL   Вверх
Tsaregradskiy
Дата 28.11.2008, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.11.2008

Репутация: нет
Всего: нет



Скажите, а если у меня есть следующий хэш
my %fields = (
  'first_name'    =>    {
     'name'        =>    'Имя',
    'order'        =>    1,
    },
  'last_name'    =>    {
     'name'        =>    'Фамилия',
    'order'        =>    2,
    },
  'email'    =>    {
     'name'        =>    'E-Mail',
    'order'        =>    3,
    },
);
где поле 'order' означает порядок отображения в Template Toolkit.
Как мне отсортировать хэш по этому полю?

Добавлено через 1 минуту и 45 секунд
Цитата(ginnie @ 23.10.2008,  09:49)
XeLpeR, могу предложить

Код

[% FOREACH key IN tp.keys.nsort %]
    <A href="index.cgi?page=[% key %]">[% tp.$key %]</A>-
[% END %]



Цитата(XeLpeR @  22.10.2008,  22:38 Найти цитируемый пост)
выводились в том же порядке, что и в начальном хеше


Для обычных хешей это невозможно впринципе, т.к. внутри хэша данные хранятся всегда в разном порядке.

P.S. предложенный вариант сам не проверял, т.к. TT не пользуюсь, взял из документации  smile

А не поможет ли использование модуля Tie::IxHash? Но пока использовать его мне не удалось.
PM MAIL   Вверх
ginnie
Дата 28.11.2008, 20:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Tsaregradskiy, а не проще использовать другую структуру?

Код

my @fields = (
   [ 'first_name'    =>    'Имя' ],
   [ 'last_name'    =>    'Фамилия'],
   [ 'email' =>    'E-Mail'],
);



--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
Tsaregradskiy
Дата 28.11.2008, 21:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 2
Регистрация: 28.11.2008

Репутация: нет
Всего: нет



Цитата(ginnie @ 28.11.2008,  20:37)
Tsaregradskiy, а не проще использовать другую структуру?

Код

my @fields = (
   [ 'first_name'    =>    'Имя' ],
   [ 'last_name'    =>    'Фамилия'],
   [ 'email' =>    'E-Mail'],
);

Нет, не проще. Во-первых, есть уже куча написанного кода для моей структуры. Во-вторых, это я сокращенно написал, на самом деле там такая структура:
'first_name'    =>    {
     'name'        =>    'Имя',
    'type'        =>    'text',
            'size'        =>    '40',
            'maxlength'    =>    '',
            'value'        =>    '',
     'equal'        =>    '',
     'mask'        =>    '',
     'accept'    =>    'true',
     'marked'    =>    0,
     'order'        =>    1,
    },
и т.п.

Пока решил проблему следующим образом: 
[% FOREACH key IN fields_order.nsort %]
[% fields.$key.name %] и т.д.
[% END %]
где fields_order хэш структуры типа
{
   'first_name' => 1,
   'last_name' => 2,
и т.д.
}
Номера беруться на основании поля order хэша fields.

З.Ы. Вот как всё мрачно: http://www.perlmonks.org/?node_id=651173

PM MAIL   Вверх
ginnie
Дата 29.11.2008, 02:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Комодератор
Сообщений: 1287
Регистрация: 6.1.2008
Где: Москва

Репутация: 4
Всего: 49



Tsaregradskiy, Вы можете мне объяснить, зачем нужно создавать хэш fields_order и затем его сортировать в шаблоне? Попроще никак нельзя сделать?


--------------------
Написать код, понятный компьютеру, может каждый, но только хорошие программисты пишут код, понятный людям. (Мартин Фаулер. Рефакторинг)
PM MAIL Skype Jabber   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Perl: CGI программирование"
korob2001
sharq
  • В этом разделе обсуждаются вопросы относящиеся только к CGI программированию
  • Если ваш вопрос не относится к системному или CGI программированию, задавайте его в общем разделе
  • Если ваш вопрос относится к системному программированию, задавайте его здесь
  • Интерпретатор Perl можно скачать здесь ActiveState, O'REILLY, The source for Perl
  • Справочное руководство "Установка perl-модулей", качать здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, korob2001, sharq.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Perl: разработка для Web | Следующая тема »


 




[ Время генерации скрипта: 0.0804 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.