Тема: Создание меню и работа с блогами

Здравствуйте!
Подскажите пожайлуста, как автоматически создать меню, которое содержит пути к блогам (появилось в MT 5).
Делаю вот так:

<mt:Blogs include_blogs="children"> 
   <a href="<$mt:BlogURL$>"><$mt:BlogName$></a>
</mt:Blogs>

Все работает за исключением одного - меню должно располагаться в определенном порядке. Как этот порядок можно задать?
Аргументы  sort_by="blog_id" и sort_order="ascend" не работают

2 Отредактировано (03:11:2012 21:54:08)

Re: Создание меню и работа с блогами

Вот так должно сработать:

<mt:Blogs include_blogs="children">
    <mt:SetVarBlock name="blogs_menu" function="push">
        <a href="<mt:BlogURL/>"><mt:BlogName/></a>
    </mt:SetVarBlock>
</mt:Blogs>

<mt:Loop name="blogs_menu">
    <mt:Var name="__value__"/>
</mt:Loop>

Блок Loop можно отсортировать:
http://www.movabletype.org/documentatio … ml#sort_by

3 Отредактировано TheAthlete (04:11:2012 15:24:51)

Re: Создание меню и работа с блогами

Спасибо за помощь, разобрался!
Написал следующий код, который сортирует ссылки по BlogID:

<mt:Blogs include_blogs="children">
  <mt:SetVars>
    blog_id=<$mt:BlogID$>
    blog_link=<a href="<$mt:BlogURL$>"><$mt:BlogName$></a>
  </mt:SetVars>
  <mt:SetHashVar name="my_blog">
    <$mt:Var name="$blog_id" value="$blog_link" $>
  </mt:SetHashVar>
</mt:Blogs> 

<mt:Loop name="my_blog" sort_by="key">
  <$mt:Var name="__value__"$>
</mt:Loop>

Таким образом, используя данный код, можно задавать пункты меню в случайном порядке, используя blog_id:

<mt:Blogs include_blogs="children">
  <mt:SetVars>
    blog_id=<$mt:BlogID$>
    blog_link=<a href="<$mt:BlogURL$>"><$mt:BlogName$></a>
  </mt:SetVars>
  <mt:SetHashVar name="my_blog">
    <$mt:Var name="$blog_id" value="$blog_link" $>
  </mt:SetHashVar>
</mt:Blogs> 

<!-- Здесь задаем меню в нужном нам порядке -->
<$mt:Var name="my_blog{5}"$> <!-- Ссылка меню для блога с BlogID = 5-->
<$mt:Var name="my_blog{2}"$>
<$mt:Var name="my_blog{3}"$>
<$mt:Var name="my_blog{1}"$>

Кстати, заметил одну особенность сортировки ключей, состоящих из чисел - сортировка проводится в алфавитном порядке, а не в числовом. Например, следующий код

<mt:SetHashVar name="num_hash">
    <mt:For from="1" to="12">
      <mt:SetVars>
        num=<$mt:Var name="__index__"$>
        test=test <$mt:Var name="__index__"$>
      </mt:SetVars>
        
      <$mt:Var name="$num" value="$test" $>
    </mt:For>
  </mt:SetHashVar>
      
  <mt:Loop name="num_hash" sort_by="key">
      <p><$mt:Var name="__key__"$> => <$mt:Var name="__value__"$></p>
</mt:Loop>.

Выведет следующие значения:

1 => test 1
10 => test 10
11 => test 11
12 => test 12
2 => test 2
3 => test 3
4 => test 4
5 => test 5
6 => test 6
7 => test 7
8 => test 8
9 => test 9

Использование sort_by="values numeric" работает как-то непонятно, даже если в value задать числа.

Вопрос: как реализовать числовую сортировку? Предположительно внутри это реализовано с помощью встроенной функции sort языка Perl. В Perl можно задать способ сортировки, как числовой, так и алфавитный

4 Отредактировано (06:11:2012 14:43:23)

Re: Создание меню и работа с блогами

А какой результат получается при сортировке по «values numeric»?

Сама функция обработки тега Loop находится в файле lib/MT/Template/ContextHandlers.pm (1850-2026 строки).