Skip to content

Commit

Permalink
Merge branch 'main' into bas-pro-str
Browse files Browse the repository at this point in the history
  • Loading branch information
jsparkdev authored Nov 22, 2024
2 parents 48f1b11 + 728fd04 commit 9964e32
Show file tree
Hide file tree
Showing 35 changed files with 1,097 additions and 245 deletions.
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ We welcome contributions of any size and contributors of any skill level. As an
>
> There, you'll find all the information below, and so much more!
This document is has some basic information to get you started, but we encourage you to visit our [dedicated site for contributing to Astro docs](https://contribute.docs.astro.build) for all the information you need!
This document has some basic information to get you started, but we encourage you to visit our [dedicated site for contributing to Astro docs](https://contribute.docs.astro.build) for all the information you need!

There, you will find a writing and style guide, instructions on how to make changes and open PRs, guidance for translating the docs, and even information about how to help review Astro Docs PRs.

Expand Down
8 changes: 4 additions & 4 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -35,7 +35,7 @@
"@types/node": "^18.6.4",
"@typescript-eslint/eslint-plugin": "^5.46.1",
"@typescript-eslint/parser": "^5.46.1",
"astro": "4.16.8",
"astro": "4.16.13",
"astro-auto-import": "^0.4.2",
"astro-eslint-parser": "^0.16.0",
"astro-og-canvas": "^0.5.0",
Expand Down Expand Up @@ -65,9 +65,9 @@
"unist-util-visit": "^5.0.0"
},
"dependencies": {
"@astrojs/check": "^0.9.3",
"@astrojs/sitemap": "^3.1.6",
"@astrojs/starlight": "^0.29.0",
"@astrojs/check": "^0.9.4",
"@astrojs/sitemap": "^3.2.1",
"@astrojs/starlight": "^0.29.1",
"@docsearch/js": "^3.5.2",
"@expressive-code/plugin-collapsible-sections": "^0.38.3",
"@lunariajs/core": "https://pkg.pr.new/lunariajs/lunaria/@lunariajs/core@62a858f",
Expand Down
280 changes: 149 additions & 131 deletions pnpm-lock.yaml

Large diffs are not rendered by default.

370 changes: 370 additions & 0 deletions src/content/docs/de/guides/migrate-to-astro/from-create-react-app.mdx

Large diffs are not rendered by default.

2 changes: 1 addition & 1 deletion src/content/docs/en/guides/authentication.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import ReadMore from '~/components/ReadMore.astro'

Authentication and authorization are two security processes that manage access to your website or app. Authentication verifies a visitor's identity, while authorization grants access to protected areas and resources.

Authentication allows you to customize areas of your site for logged-in individuals and provides the greatest protection for personal or private information. Authentication libraries (e.g. [Lucia Auth](https://lucia-auth.com/), [Auth.js](https://authjs.dev/), [Clerk](https://clerk.com)) provide utilities for multiple authentication methods such as email sign-in and OAuth providers.
Authentication allows you to customize areas of your site for logged-in individuals and provides the greatest protection for personal or private information. Authentication libraries (e.g. [Auth.js](https://authjs.dev/), [Clerk](https://clerk.com)) provide utilities for multiple authentication methods such as email sign-in and OAuth providers.

:::tip
There is no official authentication solution for Astro, but you can find [community "auth" integrations](https://astro.build/integrations/?search=auth) in the integrations directory.
Expand Down
2 changes: 1 addition & 1 deletion src/content/docs/en/guides/integrations-guide/mdx.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ Or you can use that exported `title` in your page using `import` and `import.met
```astro title="src/pages/index.astro"
---
const matches = await import.meta.glob('./posts/*.mdx', { eager: true });
const posts = Object.values(posts);
const posts = Object.values(matches);
---
{posts.map(post => <p>{post.title}</p>)}
Expand Down
1 change: 0 additions & 1 deletion src/content/docs/en/reference/error-reference.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -81,7 +81,6 @@ The following reference is a complete list of the errors you may encounter while
- [**i18nNoLocaleFoundInPath**](/en/reference/errors/i18n-no-locale-found-in-path/)<br/>The path doesn't contain any locale
- [**RouteNotFound**](/en/reference/errors/route-not-found/)<br/>Route not found.
- [**EnvInvalidVariables**](/en/reference/errors/env-invalid-variables/)<br/>Invalid Environment Variables
- [**EnvUnsupportedGetSecret**](/en/reference/errors/env-unsupported-get-secret/)<br/>Unsupported astro:env getSecret
- [**ServerOnlyModule**](/en/reference/errors/server-only-module/)<br/>Module is only available server-side
- [**RewriteWithBodyUsed**](/en/reference/errors/rewrite-with-body-used/)<br/>Cannot use Astro.rewrite after the request body has been read
- [**UnknownFilesystemError**](/en/reference/errors/unknown-filesystem-error/)<br/>An unknown error occurred while reading or writing files to disk.
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,11 @@ import DontEditWarning from '~/components/DontEditWarning.astro'
<DontEditWarning />


:::caution[Deprecated]
This error is from an older version of Astro and is no longer in use. If you are unable to upgrade your project to a more recent version, then you can consult [unmaintained snapshots of older documentation](/en/upgrade-astro/#older-docs-unmaintained) for assistance.
:::


> **EnvUnsupportedGetSecret**: `astro:env/server` exported function `getSecret` is not supported by your adapter.
## What went wrong?
Expand Down
3 changes: 3 additions & 0 deletions src/content/docs/fr/community-resources/content.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -87,3 +87,6 @@ Avez-vous publié une recette ou un guide pour travailler avec Astro ? [Modifiez
### Astro DB
- [Création d'un livre d'or avec Astro DB](https://ryantrimble.com/blog/creating-a-guestbook-with-astro-db/) (en)
- [Comment construire un compteur de vues avec Astro DB](https://www.vorillaz.com/astro-views) (en)

### Points de terminaison de l'API
- [Diffusion en continu d'un fichier dans Astro](https://astropatterns.dev/p/gems/server-endpoints-file-streaming) (en)
2 changes: 1 addition & 1 deletion src/content/docs/fr/guides/authentication.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,7 @@ import ReadMore from '~/components/ReadMore.astro'

L'authentification et l'autorisation sont deux processus de sécurité qui gèrent l'accès à votre site web ou à votre application. L'authentification permet de vérifier l'identité d'un visiteur, tandis que l'autorisation permet d'accéder à des zones et des ressources protégées.

L'authentification vous permet de personnaliser les zones de votre site pour les personnes connectées et offre la meilleure protection pour les informations personnelles ou privées. Les bibliothèques d'authentification (par exemple [Lucia Auth](https://lucia-auth.com/), [Auth.js](https://authjs.dev/), [Clerk](https://clerk.com)) fournissent des utilitaires pour plusieurs méthodes d'authentification telles que la connexion par e-mail et les fournisseurs OAuth.
L'authentification vous permet de personnaliser les zones de votre site pour les personnes connectées et offre la meilleure protection pour les informations personnelles ou privées. Les bibliothèques d'authentification (par exemple [Auth.js](https://authjs.dev/), [Clerk](https://clerk.com)) fournissent des utilitaires pour plusieurs méthodes d'authentification telles que la connexion par e-mail et les fournisseurs OAuth.

:::tip
Il n'y a pas de solution d'authentification officielle pour Astro, mais vous pouvez trouver [dans les intégrations de la communauté en recherchant "auth"](https://astro.build/integrations/?search=auth).
Expand Down
295 changes: 295 additions & 0 deletions src/content/docs/fr/guides/cms/flotiq.mdx
Original file line number Diff line number Diff line change
@@ -0,0 +1,295 @@
---
title: Flotiq & Astro
description: Ajouter du contenu à votre projet Astro en utilisant Flotiq comme CMS
type: cms
service: Flotiq
i18nReady: true
---

import PackageManagerTabs from '~/components/tabs/PackageManagerTabs.astro';
import { Steps } from '@astrojs/starlight/components';

[Flotiq](https://flotiq.com) est un CMS headless conçu pour différents frontends, tels que les sites statiques, les applications mobiles et les applications web. Les développeurs et les créateurs de contenu gèrent et diffusent le contenu par le biais d'API REST et GraphQL.

## Intégration avec Astro

Ce guide permet d'utiliser l'API CMS headless de Flotiq avec un projet Astro pour afficher du contenu sur votre site web.

### Pré-requis

Pour commencer, vous aurez besoin de :

1. **Un projet Astro** - Vous pouvez créer un nouveau projet en utilisant la commande `npm create astro@latest`.
2. **Un compte Flotiq** - Si vous n'avez pas de compte, [inscrivez-vous gratuitement](https://editor.flotiq.com/register).
3. **Une clé API en lecture seule Flotiq** - Découvrez [comment obtenir votre clé](https://flotiq.com/docs/API/).

### Configuration des variables d'environnement

Ajoutez la clé API en lecture seule de votre compte Flotiq au fichier `.env` à la racine de votre projet Astro :

```ini title=".env"
FLOTIQ_API_KEY=__YOUR_FLOTIQ_API_KEY__
```

### Définir un type de contenu dans Flotiq

Tout d'abord, vous devez définir un exemple de [définition de type de contenu](https://flotiq.com/docs/panel/content-types/) dans Flotiq pour stocker des données.

Connectez-vous à votre compte Flotiq et créez une définition de type de contenu personnalisée avec l'exemple de configuration `Blog Post` suivant :
- **Label** : Blog Post
- **API Name** : blogpost
- **Fields** :
- **Title** : texte, obligatoire
- **Slug** : texte, obligatoire
- **Content** : texte enrichi, obligatoire

Ensuite, créez un ou plusieurs exemples d'[objets de contenu](https://flotiq.com/docs/panel/content-objects/) en utilisant le type `Blog Post`.

### Installation du SDK TypeScript de Flotiq

Pour connecter votre projet à Flotiq, installez le [Flotiq SDK](https://github.com/flotiq/flotiq-api-ts) en utilisant le gestionnaire de paquets de votre choix :

<PackageManagerTabs>
<Fragment slot="npm">
```sh
npm install flotiq-api-ts
```
</Fragment>
<Fragment slot="pnpm">
```sh
pnpm add flotiq-api-ts
```
</Fragment>
<Fragment slot="yarn">
```sh
yarn add flotiq-api-ts
```
</Fragment>
</PackageManagerTabs>

Ensuite, configurez le SDK en utilisant vos informations d'identification. Créez un nouveau fichier nommé `flotiq.ts` dans le répertoire `src/lib` de votre projet :

```ts title="src/lib/flotiq.ts"
import { FlotiqApi } from "flotiq-api-ts";

export const flotiq = new FlotiqApi(import.meta.env.FLOTIQ_API_KEY);
```

Cette configuration peut maintenant être utilisée dans l'ensemble de votre projet.

### Récupérer et afficher les données de Flotiq

<Steps>

1. Récupérez les données `Blog Post` sur une page Astro en utilisant l'API personnalisée de votre contenu `BlogpostAPI` :

```astro title="src/pages/index.astro"
---
import { flotiq } from "../lib/flotiq";
const posts = await flotiq.BlogpostAPI.list();
---
```

2. Affichez le contenu dans votre modèle Astro. Vous aurez accès au `title`, `slug`, et `content` de vos articles ainsi qu'à d'autres données internes de l'article :

```astro title="src/pages/index.astro" ins={6-21}
---
import { flotiq } from "../lib/flotiq";
const posts = await flotiq.BlogpostAPI.list();
---
<html lang="fr">
<head>
<title>Astro</title>
</head>
<body>
{posts.data?.map((post) => (
<section>
<a href={`/posts/${post.slug}`}>
<h2>{post.title}</h2>
</a>
<div>{post.internal?.createdAt}</div>
<div set:html={post.content}/>
</section>
))}
</body>
</html>
```

3. Démarrez le serveur de développement et visitez votre page de prévisualisation à `http://localhost:4321` pour voir la liste de vos articles de blog. Chaque article renvoie à une page qui n'existe pas encore. Celles-ci seront créées à l'étape suivante.

</Steps>

### Générer des pages individuelles

Astro prend en charge le pré-rendu de toutes vos pages à l'avance, ou la création d'itinéraires à la demande lorsqu'elles sont demandées. Suivez les instructions pour la [génération de site statique](#génération-de-sites-statiques) ou le [rendu à la demande](#rendu-à-la-demande) pour construire les routes de pages pour vos articles de blog.

#### Génération de sites statiques

En mode de génération de sites statiques (SSG), utilisez la méthode `getStaticPaths()` pour récupérer tous les chemins d'accès possibles aux articles de blog à partir de Flotiq.

<Steps>

1. Créez un nouveau fichier `[slug].astro` dans le répertoire `/src/pages/posts/`. Récupérez tous les articles du blog et renvoyez-les dans la méthode `getStaticPaths()` :

```astro title="src/pages/posts/[slug].astro"
---
import type { Blogpost } from "flotiq-api-ts";
import { flotiq } from "../../lib/flotiq";
export async function getStaticPaths() {
const posts = await flotiq.BlogpostAPI.list();
return posts.data?.map((post) => ({
params: { slug: post.slug },
props: post
})) || []
}
---
```

2. Ajoutez le modèle pour afficher un message individuel :

```astro title="src/pages/posts/[slug].astro" ins={12-20}
---
import type { Blogpost } from "flotiq-api-ts";
import { flotiq } from "../../lib/flotiq";
export async function getStaticPaths() {
const posts = await flotiq.BlogpostAPI.list();
return posts.data?.map((post) => ({
params: { slug: post.slug },
props: post
})) || []
}
const post: Blogpost = Astro.props;
---
<html lang="fr">
<title>{post.title}</title>
<body>
<h1>{post.title}</h1>
<div set:html={post.content}/>
</body>
</html>
```

3. Visitez `http://localhost:4321` et cliquez sur un article de blog lié dans votre liste. Vous pourrez alors naviguer vers la page de l'article en question.

</Steps>

#### Rendu à la demande

Si vous utilisez le mode [SSR](/fr/guides/server-side-rendering/), vous devrez récupérer un seul article en vous basant sur son `slug`.

<Steps>

1. Créer un nouveau fichier `[slug].astro` dans le répertoire `/src/pages/posts/`. Récupérer l'article par son champ `slug`, en incluant la logique pour afficher une page 404 si la route n'est pas trouvée :

```astro title="src/pages/posts/[slug].astro"
---
import type { Blogpost } from "flotiq-api-ts";
import { flotiq } from "../../lib/flotiq";
const { slug } = Astro.params;
let post: Blogpost;
const blogpostList = await flotiq.BlogpostAPI.list({
filters: JSON.stringify({
slug: {
type: 'equals',
filter: slug,
}
}),
limit: 1
});
if (blogpostList.data?.[0]) {
post = blogpostList.data[0]
} else {
return Astro.redirect('/404');
}
---
```

2. Ajoutez le modèle pour afficher un message individuel :

```astro title="src/pages/posts/[slug].astro" ins={24-30}
---
import type { Blogpost } from "flotiq-api-ts";
import { flotiq } from "../../lib/flotiq";
const { slug } = Astro.params;
let post: Blogpost;
const blogpostList = await flotiq.BlogpostAPI.list({
filters: JSON.stringify({
slug: {
type: 'equals',
filter: slug,
}
}),
limit: 1
});
if (blogpostList.data?.[0]) {
post = blogpostList.data[0]
} else {
return Astro.redirect('/404');
}
---
<html lang="fr">
<title>{post.title}</title>
<body>
<h1>{post.title}</h1>
<div set:html={post.content}/>
</body>
</html>
```

3. Visitez `http://localhost:4321` et cliquez sur un article de blog lié dans votre liste. Vous pourrez alors naviguer vers la page de l'article en question.

</Steps>

### Actualiser le SDK après des changements de type de contenu

Lorsque vous utilisez le SDK Flotiq TypeScript (`flotiq-api-ts`), tous vos types de données sont correctement mappés dans le projet Astro.

Si vous apportez des modifications à la structure de vos types de contenu (comme l'ajout d'un nouveau champ ou la modification d'un champ existant), vous devrez actualiser le SDK pour vous assurer que votre projet reflète les dernières mises à jour du modèle.

Pour ce faire, exécutez la commande rebuild de votre gestionnaire de paquets :

<PackageManagerTabs>
<Fragment slot="npm">
```sh
npm rebuild flotiq-api-ts
```
</Fragment>
<Fragment slot="pnpm">
```sh
pnpm rebuild flotiq-api-ts
```
</Fragment>
<Fragment slot="yarn">
```sh
yarn rebuild flotiq-api-ts
// pour yarn v1 (Classic):
// yarn add flotiq-api-ts
```
</Fragment>
</PackageManagerTabs>

Cette opération mettra à jour le SDK, en alignant les types d'objets, les champs et les méthodes de l'API sur votre modèle de données actuel.

## Publier votre site

Pour déployer votre site web, visitez les [guides de déploiement](/fr/guides/deploy/) d'Astro et suivez les instructions de votre hébergeur préféré.

### Redéploiement en fonction des modifications apportées à Flotiq

Pour mettre à jour votre site publié, configurez Flotiq pour qu'il envoie un webhook à votre hébergeur afin de déclencher une reconstruction chaque fois que votre contenu est modifié.

Dans Flotiq, vous pouvez définir le type de contenu et les événements sur lesquels il doit se déclencher, et le configurer en conséquence. Voir la [documentation des Webhooks pour Flotiq](https://flotiq.com/docs/panel/webhooks/async-co-webhook/) pour plus de détails.

## Ressources officielles

- [Documentation de Flotiq](https://flotiq.com/docs)
2 changes: 1 addition & 1 deletion src/content/docs/fr/guides/integrations-guide/mdx.mdx
Original file line number Diff line number Diff line change
Expand Up @@ -111,7 +111,7 @@ Ou vous pouvez utiliser ce `title` exporté dans votre page en utilisant les ins
```astro title="src/pages/index.astro"
---
const matches = await import.meta.glob('./posts/*.mdx', { eager: true });
const posts = Object.values(posts);
const posts = Object.values(matches);
---
{posts.map(post => <p>{post.title}</p>)}
Expand Down
Loading

0 comments on commit 9964e32

Please sign in to comment.