1
0
Fork 0
mirror of https://github.com/archtechx/laravel-seo.git synced 2025-12-12 01:44:03 +00:00
This commit is contained in:
Chris Southam 2025-11-26 13:33:50 +00:00 committed by GitHub
commit edfb7da3d8
No known key found for this signature in database
GPG key ID: B5690EEEBB952194
2 changed files with 28 additions and 28 deletions

View file

@ -7,7 +7,7 @@ By default, it uses `<title>` and OpenGraph tags. It also ships with a Twitter e
**Features**:
- Setting SEO tags from PHP
- Setting SEO tags from Blade
- Integration with [Flipp](https://useflipp.com) and [Previewify](https://previewify.app), to automatically generate cover images
- Integration with [Flipp](https://useflipp.com) and [PreviewLinks](https://previewlinks.io), to automatically generate cover images
- Custom extension support
- Expressive & simple API
- Customizable views
@ -228,26 +228,26 @@ The `flipp()` method also returns a signed URL to the image, which lets you use
<img alt="@seo('title')" src="@seo('flipp', 'blog')">
```
### Previewify integration
### PreviewLinks integration
First, you need to add your Previewify API keys:
1. Add your API key to the `PREVIEWIFY_KEY` environment variable. You can get the key [here](https://previewify.app/app/account).
First, you need to add your PreviewLinks API keys:
1. Add your API key to the `PREVIEWLINKS_API_TOKEN` environment variable. You can get the key [here](https://previewlinks.io/app/account).
2. Go to `config/services.php` and add:
```php
'previewify' => [
'key' => env('PREVIEWIFY_KEY'),
'previewlinks' => [
'key' => env('PREVIEWLINKS_API_TOKEN'),
],
```
Then, register your templates, for example in `AppServiceProvider`:
```php
seo()->previewify('blog', 24);
seo()->previewify('page', 83);
seo()->previewlink('blog', 24);
seo()->previewlink('page', 83);
```
After that, you can use the templates by calling `seo()->previewify()` like this:
After that, you can use the templates by calling `seo()->previewlink()` like this:
```php
seo()->previewify('blog', ['title' => 'Foo', 'content' => 'bar'])`
seo()->previewlink('blog', ['title' => 'Foo', 'content' => 'bar'])`
```
The call will set the generated image as the OpenGraph and Twitter card images. The generated URLs are signed.
@ -257,16 +257,16 @@ If no data array is provided, the method will use the `title` and `description`
```php
seo()->title($post->title);
seo()->description($post->excerpt);
seo()->previewify('blog');
seo()->previewlink('blog');
```
The `previewify()` method also returns a signed URL to the image, which lets you use it in other places, such as blog cover images.
The `previewlink()` method also returns a signed URL to the image, which lets you use it in other places, such as blog cover images.
```php
<img alt="@seo('title')" src="@seo('previewify', 'blog')">
<img alt="@seo('title')" src="@seo('previewlink', 'blog')">
```
> **Note**
> The `previewify:` prefix will be automatically prepended to all provided data keys.
> The `previewlink:` prefix will be automatically prepended to all provided data keys.
## Examples

View file

@ -184,23 +184,23 @@ class SEOManager
return $this->set('image', "https://s.useflipp.com/{$template}.png?s={$signature}&v={$query}");
}
/** Configure or use Previewify. */
public function previewify(string $alias, int|string|array|null $data = null): string|static
/** Configure or use PreviewLinks. */
public function previewlink(string $alias, int|string|array $data = null): string|static
{
if (is_string($data) || is_int($data)) {
$this->meta("previewify.templates.$alias", (string) $data);
$this->meta("previewlink.templates.$alias", (string) $data);
return $this;
}
if ($data === null) {
$data = [
'previewify:title' => $this->raw('title'),
'previewify:description' => $this->raw('description'),
'previewlinks:title' => $this->raw('title'),
'previewlinks:description' => $this->raw('description'),
];
} else {
$data = array_combine(
array_map(fn ($key) => str_starts_with($key, 'previewify:') ? $key : "previewify:{$key}", array_keys($data)),
array_map(fn ($key) => str_starts_with($key, 'previewlinks:') ? $key : "previewlinks:{$key}", array_keys($data)),
$data,
);
}
@ -208,12 +208,12 @@ class SEOManager
$query = base64_encode(json_encode($data, JSON_THROW_ON_ERROR));
/** @var string $template */
$template = $this->meta("previewify.templates.$alias");
$template = $this->meta("previewlink.templates.$alias");
$signature = hash_hmac('sha256', $query, config('services.previewify.key'));
$signature = hash_hmac('sha256', $query, config('services.previewlinks.key'));
return $this->set('image', "https://previewify.app/generate/templates/{$template}/signed?signature={$signature}&fields={$query}");
}
return $this->set('image', "https://previewlinks.io/generate/templates/{$template}/signed?fields={$query}&signature={$signature}");
}
/** Enable favicon extension. */
public function favicon(): static
@ -336,11 +336,11 @@ class SEOManager
*/
public function render(...$args): array|string|null
{
// Flipp and Previewify support more arguments
if (in_array($args[0], ['flipp', 'previewify'], true)) {
// Flipp and PreviewLinks support more arguments
if (in_array($args[0], ['flipp', 'previewlink'], true)) {
$method = array_shift($args);
// The `flipp` and `previewify` methods return image URLs
// The `flipp` and `previewlink` methods return image URLs
// so we don't sanitize the returned value with e() here
return $this->{$method}(...$args);
}
@ -353,7 +353,7 @@ class SEOManager
// An array means we don't return anything, e.g. `@seo(['title' => 'foo'])
if (is_array($args[0])) {
foreach ($args[0] as $type => $value) {
if (in_array($type, ['flipp', 'previewify'], true)) {
if (in_array($type, ['flipp', 'previewlink'], true)) {
$this->{$type}(...Arr::wrap($value));
} else {
$this->set($type, $value);