fix: caching of FAQ

Fix wrong caching of FAQs for correct generation
This commit is contained in:
webfussel 2025-07-10 10:05:08 +02:00
parent fa0435efdf
commit cffb719a05
2 changed files with 117 additions and 95 deletions

View file

@ -1,11 +1,22 @@
<template> <template>
<section id="services" class="Services content"> <section id="services" class="Services content">
<h1>Projekt buchen</h1> <h1>Projekt buchen</h1>
<h2>Paketpreise für <Highlight>feste Ergebnisse</Highlight>.</h2> <h2>Paketpreise für
<Highlight>feste Ergebnisse</Highlight>
.
</h2>
<p class="margin-top">Manchmal brauchen wir alle einfach nur eine Kleinigkeit und wollen uns nicht lange binden. Das ist natürlich <p class="margin-top">Manchmal brauchen wir alle einfach nur eine Kleinigkeit und wollen uns nicht lange binden. Das ist natürlich
völlig in Ordnung und genau deshalb biete ich dir die Möglichkeit mich gezielt für <Highlight>kleinere Projekte</Highlight> zu buchen.</p> völlig in Ordnung und genau deshalb biete ich dir die Möglichkeit mich gezielt für
<p class="margin-top-small">Hinter diesen Angeboten gibt es <Highlight>keinerlei Abos oder versteckte Kosten</Highlight>. <Highlight>kleinere Projekte</Highlight>
Aus Transparenzgründen sei aber gesagt, dass sich <Highlight>alle Preise zzgl. 19 % Umsatzsteuer</Highlight> verstehen.</p> zu buchen.
</p>
<p class="margin-top-small">Hinter diesen Angeboten gibt es
<Highlight>keinerlei Abos oder versteckte Kosten</Highlight>
.
Aus Transparenzgründen sei aber gesagt, dass sich
<Highlight>alle Preise zzgl. 19 % Umsatzsteuer</Highlight>
verstehen.
</p>
<FreeInfo/> <FreeInfo/>
@ -71,7 +82,7 @@ const intl = new Intl.NumberFormat(
currency: 'EUR', currency: 'EUR',
minimumFractionDigits: 0, minimumFractionDigits: 0,
maximumFractionDigits: 0, maximumFractionDigits: 0,
} },
) )
const oneOff: Service[] = [ const oneOff: Service[] = [
@ -129,7 +140,7 @@ const oneOff : Service[] = [
}, },
] ]
const { data: faq } = await useAsyncData('faq', () => queryCollection('faq').path('/snippets/faq/booking').first()) const { data: faq } = await useAsyncData('faq_booking', () => queryCollection('faq').path('/snippets/faq/booking').first())
const texts = generatePlainText<['title']>(faq.value?.body.value) const texts = generatePlainText<['title']>(faq.value?.body.value)
if (faq) { if (faq) {
@ -143,7 +154,7 @@ if (faq) {
'@type': 'Answer', '@type': 'Answer',
'text': entity.text, 'text': entity.text,
}, },
})) })),
}) })
} }
</script> </script>

View file

@ -1,11 +1,21 @@
<template> <template>
<section id="services" class="Services content"> <section id="services" class="Services content">
<h1>Prepaid Flatrates</h1> <h1>Prepaid Flatrates</h1>
<h2>Genieße fusselige <Highlight>Qualität</Highlight> ohne groß herumzurechnen.</h2> <h2>Genieße fusselige
<Highlight>Qualität</Highlight>
ohne groß herumzurechnen.
</h2>
<p class="margin-top">Bei dir fällt ständig was an oder du hast ein langlaufendes Projekt, bei dem du immer wieder mal Unterstützung brauchst? Kein Ding. <p class="margin-top">Bei dir fällt ständig was an oder du hast ein langlaufendes Projekt, bei dem du immer wieder mal Unterstützung brauchst?
Hier gibt's die <Highlight>Entwickler-Flat</Highlight> für planbare Kosten und On-Demand-Entwicklung.</p> Kein Ding.
<p class="margin-top-small">Aus Transparenzgründen sei gesagt, dass sich <Highlight>alle Preise zzgl. 19 % Umsatzsteuer</Highlight> verstehen.</p> Hier gibt's die
<Highlight>Entwickler-Flat</Highlight>
für planbare Kosten und On-Demand-Entwicklung.
</p>
<p class="margin-top-small">Aus Transparenzgründen sei gesagt, dass sich
<Highlight>alle Preise zzgl. 19 % Umsatzsteuer</Highlight>
verstehen.
</p>
<FreeInfo/> <FreeInfo/>
@ -27,7 +37,8 @@
<span class="value">{{ service.hours }} Stunden pro Woche zugesichert</span> <span class="value">{{ service.hours }} Stunden pro Woche zugesichert</span>
</li> </li>
<li v-for="(check, index) in service.checks"> <li v-for="(check, index) in service.checks">
<Icon class="icon" :class="{ 'yes' : check, 'no' : !check }" :name="check ? 'ph:check-circle-duotone' : 'ph:x-circle-duotone'" mode="svg" /> <Icon class="icon" :class="{ 'yes' : check, 'no' : !check }" :name="check ? 'ph:check-circle-duotone' : 'ph:x-circle-duotone'"
mode="svg"/>
<span class="value">{{ points[index] }}</span> <span class="value">{{ points[index] }}</span>
</li> </li>
</ul> </ul>
@ -135,10 +146,10 @@ const flatrate : Service[] =
true, true,
true, true,
], ],
} },
] ]
const { data : faq } = await useAsyncData('faq', () => queryCollection('faq').path('/snippets/faq/flatrate').first()) const { data: faq } = await useAsyncData('faq_flatrate', () => queryCollection('faq').path('/snippets/faq/flatrate').first())
const texts = generatePlainText<['title']>(faq.value?.body.value) const texts = generatePlainText<['title']>(faq.value?.body.value)
if (faq) { if (faq) {
@ -152,7 +163,7 @@ if (faq) {
'@type': 'Answer', '@type': 'Answer',
'text': entity.text, 'text': entity.text,
}, },
})) })),
}) })
} }
</script> </script>