1
0
Fork 0
mirror of https://github.com/archtechx/laravel-seo.git synced 2025-12-12 01:44:03 +00:00

Add support for Favicons (#11)

* wip

* wip

* wip

* Update tests/Pest/FaviconTest.php

Co-authored-by: Samuel Štancl <samuel.stancl@gmail.com>

* Update tests/Pest/FaviconTest.php

Co-authored-by: Samuel Štancl <samuel.stancl@gmail.com>

* Update README.md

Co-authored-by: Samuel Štancl <samuel.stancl@gmail.com>
This commit is contained in:
Lars Klopstra 2021-11-14 19:28:19 +01:00 committed by GitHub
parent 1b2bfb2945
commit 5ca343a116
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
6 changed files with 66 additions and 1 deletions

View file

@ -99,6 +99,18 @@ When a value is set specifically for Twitter, it will be prioritized over the ge
seo()->twitterTitle('About us') seo()->twitterTitle('About us')
``` ```
### Favicons
By default, no favicon links will be included. You can manually enable the extension by calling:
```php
seo()->favicon('path/to/logo.png');
```
We'll generate a 32x32px `public/favicon.ico` & `public/favicon.png` icon. This should be sufficient for most cases.
**Please keep in mind that you need to install the [imagick](https://pecl.php.net/package/imagick) php extension and [intervention/image](http://image.intervention.io/) composer package.**
### Defaults ### Defaults
To configure default values, call the methods with the `default` argument: To configure default values, call the methods with the `default` argument:

View file

@ -0,0 +1,2 @@
<link rel="icon" type="image/x-icon" href="{{ asset('favicon.ico') }}">
<link rel="icon" type="image/png" href="{{ asset('favicon.png') }}">

View file

@ -31,7 +31,8 @@
"orchestra/testbench": "^6.9", "orchestra/testbench": "^6.9",
"nunomaduro/larastan": "^0.6.10", "nunomaduro/larastan": "^0.6.10",
"pestphp/pest": "^1.2", "pestphp/pest": "^1.2",
"pestphp/pest-plugin-laravel": "^1.0" "pestphp/pest-plugin-laravel": "^1.0",
"intervention/image": "^2.7"
}, },
"extra": { "extra": {
"laravel": { "laravel": {

View file

@ -5,7 +5,9 @@ declare(strict_types=1);
namespace ArchTech\SEO; namespace ArchTech\SEO;
use Closure; use Closure;
use Exception;
use Illuminate\Support\Str; use Illuminate\Support\Str;
use Intervention\Image\ImageManager;
/** /**
* @method $this title(string $title = null, ...$args) Set the title. * @method $this title(string $title = null, ...$args) Set the title.
@ -176,6 +178,40 @@ class SEOManager
return $this->set('image', "https://s.useflipp.com/{$template}.png?s={$signature}&v={$query}"); return $this->set('image', "https://s.useflipp.com/{$template}.png?s={$signature}&v={$query}");
} }
/** Enable favicon extension. */
public function favicon(string $path): static
{
if (! class_exists(ImageManager::class)) {
throw new Exception('Intervention not available, please run `composer require intervention/image`');
}
$this->extensions['favicon'] = true;
$doesntHaveFavicon = ! file_exists(public_path('favicon.ico'));
$sourceIconDoesntExist = ! file_exists($path);
if ($sourceIconDoesntExist) {
throw new Exception("Given icon path `{$path}` does not exist.");
}
if ($doesntHaveFavicon) {
// GD driver doesn't support .ico, that's why we use ImageMagick.
$manager = new ImageManager(['driver' => 'imagick']);
$manager
->make($path)
->resize(32, 32)
->save(public_path('favicon.ico'));
$manager
->make($path)
->resize(32, 32)
->save(public_path('favicon.png'));
}
return $this;
}
/** Append canonical URL tags to the document head. */ /** Append canonical URL tags to the document head. */
public function withUrl(): static public function withUrl(): static
{ {

View file

@ -0,0 +1,14 @@
<?php
use function PHPUnit\Framework\assertFileExists;
test("it should throw an exception if the given source icon doesn't exist", function () {
seo()->favicon('i-dont-exist.png');
})->throws(Exception::class, 'Given icon path `i-dont-exist.png` does not exist.');
test('it should generate two favicons', function () {
seo()->favicon(__DIR__ . '/../stubs/logo.png');
assertFileExists(public_path('favicon.ico'));
assertFileExists(public_path('favicon.png'));
});

BIN
tests/stubs/logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 10 KiB