Динамически показать предыдущий / следующий div с XQuery - рекурсия?
Знающее сообщество,
Короче говоря, я хочу добиться следующего: у меня есть XML-файл со списком пиццы внутри (это своего рода тестовый файл). На моей странице есть меню выбора, из которого пользователь выбирает одну пиццу и размер пиццы, которые затем отображаются ниже. Контент будет отображаться только после того, как пользователь выбрал. Это функция:
declare function app:showpizza2($node as node(), $model as map(*)){
let $pizza1 := request:get-parameter('selectMenu1', '')
let $size1 := request:get-parameter('size1', '')
return
for $pizza in $app:pizza//pizza
where $pizza/@id eq $pizza1
let $id := $pizza/@id
return
(<a data-key="{ $id }" class="person"><div>{ $pizza1 }</div></a>,
<div>{ $size1 }</div>)
};
Теперь со второй функцией я хочу создать кнопки "предыдущий / следующий", которые берут текущую показанную пиццу, находят ее внутри дерева XML и затем продвигаются на один шаг вверх или вниз. Пока что я могу показать одну пиццу выше или ниже с такими строками:
declare function app:previousPizza($node as node(), $model as map(*)){
let $pizza1 := request:get-parameter('selectMenu1', '')
return
for $pizza in $app:pizza//pizza
where $pizza/@id eq $pizza1
let $previousPizza := $pizza/preceding::pizza[1]
return
<p>{ $previousPizza }</p>
};
Проблема, конечно, в том, что в качестве "текущего параметра пиццы" я выбираю только выбранное пользователем значение из меню выбора. Так что я думаю, что это типичная проблема рекурсии, потому что я хочу иметь функцию, которая всегда принимает текущий параметр после нажатия на кнопку, но я действительно не знаю, как этого добиться. Вы можете помочь?
Это мой HTML-файл, где я вызываю эти функции:
<div class="row">
<div class="col-sm-4">
<!-- form for choosing pizza -->
<form action="?">
<!-- select Pizza type -->
<select name="selectMenu1" id="pizzamenu1"
data-placeholder="Pizza wählen" style="width:150px">
<option value=""></option>
<option value="pizza1">Pizza 1</option>
<option value="pizza2">Pizza 2</option>
<option value="pizza3">Pizza 3</option>
</select>
<!-- select pizza size -->
<select name="size1" data-placeholder="Größe wählen"
style="width:150px;" onchange="this.form.submit()">
<option value=""></option>
<option value="family">Familien Pizza</option>
<option value="medium">Mittel Pizza</option>
<option value="small">Kleine Pizza</option>
</select>
</form>
</div>
</div>
<div class="row">
<div class="col-sm-4">
<!-- showpizza2 returns chosen pizza from select menu -->
<div data-template="app:showpizza2"/>
<!-- Show previous pizza -->
<div data-template="app:previousPizza"/>
</div>
</div>
Благодарю.
1 ответ
Поскольку значение выбранной пользователем пиццы происходит из списка HTML, она находится в $model
, Ваша функция Xquery для кнопок "следующий / предыдущий" должна получить доступ к $model, чтобы начать там, где вы хотите.
Нам нужно увидеть, как вы вызываете модули xquery в вашем .html
файлы, чтобы дать вам пример рабочего кода. Но проблемы, которые вы описываете, вероятно, возникают там.
См. Документацию по использованию модели для хранения данных приложения.