mirror of
https://github.com/strapi/strapi.git
synced 2025-11-13 00:29:51 +00:00
Merge branch 'develop' into features/webhooks
This commit is contained in:
commit
f38ff0c801
@ -205,6 +205,7 @@ module.exports = {
|
|||||||
'/3.0.0-beta.x/guides/custom-admin',
|
'/3.0.0-beta.x/guides/custom-admin',
|
||||||
'/3.0.0-beta.x/guides/client',
|
'/3.0.0-beta.x/guides/client',
|
||||||
'/3.0.0-beta.x/guides/draft',
|
'/3.0.0-beta.x/guides/draft',
|
||||||
|
'/3.0.0-beta.x/guides/scheduled-publication',
|
||||||
'/3.0.0-beta.x/guides/slug',
|
'/3.0.0-beta.x/guides/slug',
|
||||||
'/3.0.0-beta.x/guides/send-email',
|
'/3.0.0-beta.x/guides/send-email',
|
||||||
'/3.0.0-beta.x/guides/webhooks',
|
'/3.0.0-beta.x/guides/webhooks',
|
||||||
|
|||||||
77
docs/3.0.0-beta.x/guides/scheduled-publication.md
Normal file
77
docs/3.0.0-beta.x/guides/scheduled-publication.md
Normal file
@ -0,0 +1,77 @@
|
|||||||
|
# Scheduled publication
|
||||||
|
|
||||||
|
This guide will explain how to create an article schedule system.
|
||||||
|
|
||||||
|
## Introduction
|
||||||
|
|
||||||
|
This guide will use this [draft system](./draft.md) guide. You should review it first to understand the draft/published status and the **Article** API that we will use in this guide.
|
||||||
|
|
||||||
|
What we want here is to be able to set a publication date for an article, and at this date, switch the `draft` status to `published`.
|
||||||
|
|
||||||
|
## Example
|
||||||
|
|
||||||
|
For this example, we will have to add a `publish_at` attribute to the **Article** Content Type.
|
||||||
|
|
||||||
|
- Click on the Content Type Builder link in the left menu
|
||||||
|
- Select the **Article** Content Type
|
||||||
|
- Add another field
|
||||||
|
- `date` attribute named `publish_at` with `datetime` type
|
||||||
|
|
||||||
|
And add some data with different dates and status to be able to see the publication happen.
|
||||||
|
Make sure to create some entries with a draft `status` and a `published_at` that is before the current date.
|
||||||
|
|
||||||
|
The goal will be to check every minute if there is `draft` articles that have a `publish_at` lower that the current date.
|
||||||
|
|
||||||
|
## Create a CRON task
|
||||||
|
|
||||||
|
To execute a function every minutes, we will use a CRON task.
|
||||||
|
|
||||||
|
Here is the [full documentation](../concepts/configurations.md#cron-tasks) of this feature.
|
||||||
|
|
||||||
|
**Path —** `./config/functions/cron.js`
|
||||||
|
|
||||||
|
```js
|
||||||
|
module.exports = {
|
||||||
|
'*/1 * * * *': () => {
|
||||||
|
console.log('1 minute later');
|
||||||
|
},
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
Make sure the enabled cron config is set to true in `./config/environments/**/server.json` file.
|
||||||
|
|
||||||
|
::: tip
|
||||||
|
Please note that Strapi's built in CRON feature will not work if you plan to use `pm2` or node based clustering. You will need to execute these CRON tasks outside of Strapi.
|
||||||
|
:::
|
||||||
|
|
||||||
|
## Business logic
|
||||||
|
|
||||||
|
Now we can start writting the publishing logic. The code that will fetch all `draft` **Articles** with a `published_at` that is before the current date.
|
||||||
|
|
||||||
|
Then we will update the `status` of all these articles to `published`.
|
||||||
|
|
||||||
|
**Path —** `./config/functions/cron.js`
|
||||||
|
|
||||||
|
```js
|
||||||
|
module.exports = {
|
||||||
|
'*/1 * * * *': async () => {
|
||||||
|
// fetch articles to publish
|
||||||
|
const draftArticleToPublish = await strapi.api.article.services.article.find({
|
||||||
|
status: 'draft',
|
||||||
|
publish_at_lt: new Date()
|
||||||
|
});
|
||||||
|
|
||||||
|
// update status of articles
|
||||||
|
draftArticleToPublish.forEach(async (article) => {
|
||||||
|
await strapi.api.article.services.article.update(
|
||||||
|
{id: article.id},
|
||||||
|
{status: 'published'}
|
||||||
|
);
|
||||||
|
});
|
||||||
|
},
|
||||||
|
};
|
||||||
|
```
|
||||||
|
|
||||||
|
And tada!
|
||||||
|
|
||||||
|
|
||||||
@ -69,7 +69,7 @@ module.exports = {
|
|||||||
}
|
}
|
||||||
},
|
},
|
||||||
beforeUpdate: async model => {
|
beforeUpdate: async model => {
|
||||||
if (model.getUpdate().title) {
|
if (model.getUpdate() && model.getUpdate().title) {
|
||||||
model.update({
|
model.update({
|
||||||
slug: slugify(model.getUpdate().title),
|
slug: slugify(model.getUpdate().title),
|
||||||
});
|
});
|
||||||
|
|||||||
@ -221,7 +221,7 @@ Then fill the informations:
|
|||||||
|
|
||||||
::: tab Google
|
::: tab Google
|
||||||
|
|
||||||
### Facebook configuration
|
### Google configuration
|
||||||
|
|
||||||
- Visit the Google Developer Console <br> [https://console.developers.google.com/](https://console.developers.google.com/)
|
- Visit the Google Developer Console <br> [https://console.developers.google.com/](https://console.developers.google.com/)
|
||||||
- Click on the **Select a project** dropdown in the top menu
|
- Click on the **Select a project** dropdown in the top menu
|
||||||
|
|||||||
@ -43,12 +43,14 @@ module.exports = {
|
|||||||
let msg = {
|
let msg = {
|
||||||
from: options.from,
|
from: options.from,
|
||||||
to: options.to,
|
to: options.to,
|
||||||
reply_to: options.replyTo,
|
replyTo: options.replyTo,
|
||||||
subject: options.subject,
|
subject: options.subject,
|
||||||
text: options.text,
|
text: options.text,
|
||||||
html: options.html,
|
html: options.html,
|
||||||
templateId: options.templateId,
|
templateId: options.templateId,
|
||||||
dynamic_template_data: options.dynamic_template_data,
|
dynamic_template_data: options.dynamic_template_data,
|
||||||
|
sendAt: options.sendAt,
|
||||||
|
batchId: options.batchId,
|
||||||
};
|
};
|
||||||
|
|
||||||
sendgrid.send(msg, function(err) {
|
sendgrid.send(msg, function(err) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user