Необходимо вывести постраничный список авторов, отсортированных по количеству написанных книг.
Под именем автора должен быть список книг, в написании которых учавствовал текущий автор.
На странице может быть не более 6 книг.
Книга, которая не попала на текущую страницу должна перейти на следующую страницу вместе с именем автора.
Авторы, которые не учавствовали в написании книг, присутствовать в списке не должны.
Количество книг на странице нужно вынести в глобальную переменную.
Например:
PAGE 1
author 1
***********************
book 1
book 4
book 7
book 9
book 10
***********************
author 3
***********************
book 1
***********************
PAGE 2
author 3
***********************
book 2
book 6
book 8
book 9
***********************
Здравствуйте, hooper11, Вы писали:
H>Необходимо вывести постраничный список авторов, отсортированных по количеству написанных книг. H>Под именем автора должен быть список книг, в написании которых учавствовал текущий автор. H>На странице может быть не более 6 книг. H>Книга, которая не попала на текущую страницу должна перейти на следующую страницу вместе с именем автора. H>Авторы, которые не учавствовали в написании книг, присутствовать в списке не должны. H>Количество книг на странице нужно вынести в глобальную переменную.
Похоже, за один проход такое не сделать. Вечером поковыряюсь, может накидаю чего.
Здравствуйте, hooper11, Вы писали:
H>Необходимо вывести постраничный список авторов, отсортированных по количеству написанных книг. H>Под именем автора должен быть список книг, в написании которых учавствовал текущий автор. H>На странице может быть не более 6 книг. H>Книга, которая не попала на текущую страницу должна перейти на следующую страницу вместе с именем автора. H>Авторы, которые не учавствовали в написании книг, присутствовать в списке не должны. H>Количество книг на странице нужно вынести в глобальную переменную.
Вобщем, для затравки.
1. Организовываем рекурсию №1 по страницам (условие выхода из нее количесвто_строк_на_странице > $заданного_в_глобальной_переменной).
Таскаем с собой переменные: текущее_количество_строк, текущий_автор
2. Внутри рекурсии №1 можно запустить рекурсию №2, котороя крутится по автору
Таскаем с собой переменные: текущий_автор, номер_текущей_книги, количество_книг_данного_автора
Вот и все. При входе в рекурсию №1 проверять начали ли мы новую страницу и если да, то смотреть, продолжаем ли мы список книг данного автора или начинаем нового.
Все довольно просто, за исключением того, что нужно аккуратненько таскать в рекурсивные шаблоны все нужные значения переменных и ничего не потерять.
Ah! The infinite wonders of Abyss! If there's anything you don't like — you'll find it here. (c) Tanar'ri saying
Здравствуйте, don_Kabanos, Вы писали:
_K>Здравствуйте, hooper11, Вы писали:
H>>Необходимо вывести постраничный список авторов, отсортированных по количеству написанных книг. H>>Под именем автора должен быть список книг, в написании которых учавствовал текущий автор. H>>На странице может быть не более 6 книг. H>>Книга, которая не попала на текущую страницу должна перейти на следующую страницу вместе с именем автора. H>>Авторы, которые не учавствовали в написании книг, присутствовать в списке не должны. H>>Количество книг на странице нужно вынести в глобальную переменную.
_K>Вобщем, для затравки.
_K>1. Организовываем рекурсию №1 по страницам (условие выхода из нее количесвто_строк_на_странице > $заданного_в_глобальной_переменной). _K>Таскаем с собой переменные: текущее_количество_строк, текущий_автор
_K>2. Внутри рекурсии №1 можно запустить рекурсию №2, котороя крутится по автору _K>Таскаем с собой переменные: текущий_автор, номер_текущей_книги, количество_книг_данного_автора
_K>Вот и все. При входе в рекурсию №1 проверять начали ли мы новую страницу и если да, то смотреть, продолжаем ли мы список книг данного автора или начинаем нового.
_K>Все довольно просто, за исключением того, что нужно аккуратненько таскать в рекурсивные шаблоны все нужные значения переменных и ничего не потерять.
кстати, данный подход удобен тем, что задача разбивается на 2 этапа. Сначала просто разбить весь этот список по страницам, а потом внедрить логику "какого автора писать в начале страницы"
Ah! The infinite wonders of Abyss! If there's anything you don't like — you'll find it here. (c) Tanar'ri saying
Здравствуйте, don_Kabanos, Вы писали:
_K>Все довольно просто, за исключением того, что нужно аккуратненько таскать в рекурсивные шаблоны все нужные значения переменных и ничего не потерять.
Все было бы просто, если бы не сортировка по кол-ву книг в написании которых автор принимал участие.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, don_Kabanos, Вы писали:
_K>>Все довольно просто, за исключением того, что нужно аккуратненько таскать в рекурсивные шаблоны все нужные значения переменных и ничего не потерять.
L>Все было бы просто, если бы не сортировка по кол-ву книг в написании которых автор принимал участие.
Слоненка я и не приметил... ну, ничего...
как я понял, проблемя в том, чтобы организовать счетчик строк, обрабатывая отсортированных авторов... можно исхитриться так (чисто набросок):
<xsl:template name="крутилка_авторов">
<xsl:param name="счетчик_строк"/>
<xsl:param name="текущий автор"/>
<xsl:if test=""><!-- для антизацикливания -->
<!-- Крутилка авторов -->
<xsl:for-each select="">
<xsl:sort /> <!-- Сортировка их как надо -->
<!-- Проверка текущего ли автора обрабатываем -->
<xsl:if test="">
<xsl:call-template name="отрисовка одной строки">
<!-- нужные параметры -->
</xsl:call-template>
</xsl:if>
</xsl:for-each>
</xsl:if>
</xsl:template>
<xsl:template name="отрисовка одной строки">
<!-- отрисовка -->
<xsl:call-template name="крутилка_авторов">
<xsl:param name="счетчик_строк"/>
<xsl:param name="текущий автор"/>
</xsl:call-template>
</xsl:template>
Надеюсь, нигде не лоханулся. Есть маза, что в template name="отрисовка одной строки" потребуется вставить антизацикливающий if
ну, всегда зная текущего автора и имея счетчик строк — думаю, можно все налабать
Ah! The infinite wonders of Abyss! If there's anything you don't like — you'll find it here. (c) Tanar'ri saying
Здравствуйте, don_Kabanos, Вы писали:
_K>Слоненка я и не приметил... ну, ничего...
_K>как я понял, проблемя в том, чтобы организовать счетчик строк, обрабатывая отсортированных авторов... можно исхитриться так (чисто набросок):
А ты напиши. Мне тоже показалось что не проблема будет, но как-то не вышло сходу.
Здравствуйте, Lloyd, Вы писали:
L>Здравствуйте, don_Kabanos, Вы писали:
_K>>Слоненка я и не приметил... ну, ничего...
_K>>как я понял, проблемя в том, чтобы организовать счетчик строк, обрабатывая отсортированных авторов... можно исхитриться так (чисто набросок):
L>А ты напиши. Мне тоже показалось что не проблема будет, но как-то не вышло сходу.
в том наброске это реализовано. Там вся фишка в том, чтобы тащить параметр из for-each через промежуточный шаблон
L>Да ты не набросок, а готовый xsl выложи. Мне тоже поначалу показалось, что все просто, но когда начал писать ....
Постараюсь... просто у меня предотпускная пятница...
Ah! The infinite wonders of Abyss! If there's anything you don't like — you'll find it here. (c) Tanar'ri saying
в том наброске это реализовано. Там вся фишка в том, чтобы тащить параметр из for-each через промежуточный шаблон
L>>Да ты не набросок, а готовый xsl выложи. Мне тоже поначалу показалось, что все просто, но когда начал писать ....
_K>Постараюсь... просто у меня предотпускная пятница...
если у вас получиться это сделать буду очень благодарен, потому что я не могу что -то ето сделать