VuePal provides a bridge between Drupal and Vue. It comes with a set of components and composables to make your life easier when working with Drupal.
export default defineNuxtConfig({
vuepal: {
frontendRouting: {
enabled: true,
langcodes: ['de', 'fr', 'en'],
outputPath: './../drupal/config/default/frontend_routing.settings.yml',
},
},
})
With this feature enabled, you can create a static frontend page in Nuxt and
still use all the routing features of Drupal in your frontend application. You
can define your aliases in the frontend page using definePageMeta
. The module
will automatically create a Drupal configuration file that can be imported and
processed by the
Drupal frontend_routing
module.
definePageMeta({
name: 'static-page-example',
drupalFrontendRoute: true,
languageMapping: {
de: '/de/statisch',
fr: '/fr/statique',
en: '/en/static',
},
})
export default defineNuxtConfig({
vuepal: {
drupalRoute: {
enabled: true,
},
},
})
This option enables the useDrupalRoute()
composable. This composable provides
the necessary GraphQL fragment and query to fetch the route data and metatags of
a Drupal page.
You can optionally also let Vuepal generate GraphQL route queries for you:
export default defineNuxtConfig({
vuepal: {
drupalRoute: {
enabled: true,
// The route queries that will be generated for useDrupalRouteQuery().
routeQueries: {
slug: { fragments: ['nodePage'] },
nodePage: { fragments: ['nodePage'] },
nodeCanonical: {
fragments: ['nodeContact', 'nodePage', 'nodePressRelease'],
},
},
},
},
})
This will generate three route queries. They can be used with
useDrupalRouteQuery
:
const { entity } = await useDrupalRouteQuery('slug')
Behind the scenes, this will call useGraphqlQuery
and useDrupalRoute
.
export default defineNuxtConfig({
vuepal: {
adminToolbar: {
enabled: true,
},
},
})
The admin toolbar component fetches the Drupal administration menu and displays
it in your frontend application.
<template>
<ClientOnly>
<div v-if="drupalUser.accessToolbar && !isEditing">
<VuepalAdminToolbar :key="language" />
</div>
</ClientOnly>
</template>
<script setup lang="ts">
const route = useRoute()
const drupalUser = useDrupalUser()
const language = useCurrentLanguage()
const isEditing = computed(
() =>
!!(route.query.blokkliEditing || route.query.blokkliPreview) &&
drupalUser.value.accessToolbar,
)
</script>
export default defineNuxtConfig({
vuepal: {
localTasks: {
enabled: true,
},
},
})
The local tasks component fetches the local tasks of a Drupal page and displays
them in your frontend application.
<template>
<ClientOnly>
<div class="flex">
<div class="mx-auto w-auto bg-white py-8 xl:min-w-[1174px]">
<VuepalLocalTasks />
</div>
</div>
</ClientOnly>
</template>
Example of a full VuePal configuration in the nuxt.config.ts
file.
export default defineNuxtConfig({
vuepal: {
adminToolbar: {
enabled: true,
},
localTasks: {
enabled: true,
},
drupalRoute: {
enabled: true,
},
frontendRouting: {
enabled: true,
langcodes: ['de', 'fr', 'en'],
outputPath: './../drupal/config/default/frontend_routing.settings.yml',
},
devMode: {
enabled: true,
url: `https://${NUXT_REQUEST_HOST}`,
forceHttps: true,
},
},
})