mirror of https://github.com/4xmen/xshop.git
You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
133 lines
4.4 KiB
PHP
133 lines
4.4 KiB
PHP
<?php
|
|
|
|
namespace App\Helpers;
|
|
|
|
use App\Models\Product;
|
|
use Xmen\StarterKit\Models\Post;
|
|
|
|
class Seo
|
|
{
|
|
public static function post(Post $post)
|
|
{
|
|
$image = $post->getMedia()->count() > 0 ? $post->getMedia()->first()->getUrl('posts-image') : false;
|
|
|
|
\SEOMeta::setTitle($post->title);
|
|
\SEOMeta::setDescription($post->subtitle ? $post->subtitle : false);
|
|
\SEOMeta::setKeywords($post->tags->pluck('name'));
|
|
|
|
\OpenGraph::setDescription($post->subtitle);
|
|
\OpenGraph::setTitle($post->title);
|
|
// \OpenGraph::setUrl($post->url);
|
|
\OpenGraph::addProperty('type', 'articles');
|
|
\OpenGraph::addImage(\Storage::url($image));
|
|
|
|
\JsonLd::setType('article');
|
|
\JsonLd::addValue(
|
|
'mainEntityOfPage',
|
|
[
|
|
'type' => 'WebPage',
|
|
// 'id' => $post->url,
|
|
// 'url' => $post->url,
|
|
'inLanguage' => config('app.locale'),
|
|
'name' => $post->title,
|
|
'datePublished' => $post->created_at,
|
|
'dateModified' => $post->updated_at,
|
|
'description' => $post->subtitle,
|
|
]
|
|
);
|
|
\JsonLd::setTitle(\SEOMeta::getTitle());
|
|
\JsonLd::addValue('headline', $post->title);
|
|
\JsonLd::setDescription($post->subtitle);
|
|
\JsonLd::addValue('articleSection', $post->categories->pluck('name')->implode('، '));
|
|
\JsonLd::addValue(
|
|
'author',
|
|
[
|
|
'type' => 'Person',
|
|
'name' => $post->author->name,
|
|
]
|
|
);
|
|
\JsonLd::addValue(
|
|
'publisher',
|
|
[
|
|
'type' => 'organization',
|
|
'name' => $post->author->name,
|
|
'url' => config('app.url'),
|
|
// 'logo' => [
|
|
// 'type' => 'ImageObject',
|
|
// 'url' => setting('site.logo'),
|
|
// ],
|
|
]
|
|
);
|
|
\JsonLd::addValue('datePublished', $post->created_at);
|
|
\JsonLd::addValue('dateModified', $post->updated_at);
|
|
\JsonLd::addImage(\Storage::url($image));
|
|
}
|
|
|
|
public function product(Product $product)
|
|
{
|
|
$image = $product->getMedia()->count() > 0 ? $product->getMedia()->first()->getUrl('product-image') : false;
|
|
|
|
\SEOMeta::setTitle($product->title);
|
|
\SEOMeta::setDescription($product->excerpt ? $product->excerpt : false);
|
|
\SEOMeta::setKeywords($product->tags->pluck('name'));
|
|
|
|
\OpenGraph::setDescription($product->excerpt);
|
|
\OpenGraph::setTitle($product->title);
|
|
\OpenGraph::setUrl($product->url);
|
|
\OpenGraph::addProperty('type', 'product');
|
|
\OpenGraph::setProduct([
|
|
'price:amount'=>$product->price,
|
|
'price:currency'=>'IRR'
|
|
]);
|
|
\OpenGraph::addImage(\Storage::url($product->image));
|
|
|
|
\JsonLd::setType('Product');
|
|
\JsonLd::addValue(
|
|
'mainEntityOfPage',
|
|
[
|
|
'type' => 'WebPage',
|
|
'id' => $product->url,
|
|
'url' => $product->url,
|
|
'inLanguage' => config('app.locale'),
|
|
'name' => $product->name,
|
|
'datePublished' => $product->created_at,
|
|
'dateModified' => $product->updated_at,
|
|
'description' => $product->excerpt,
|
|
]
|
|
);
|
|
\JsonLd::addValue('name', $product->name);
|
|
\JsonLd::setDescription($product->excerpt ? $product->excerpt : false);
|
|
if ($product->price) {
|
|
\JsonLd::addValue(
|
|
'offers',
|
|
[
|
|
'type' => 'Offer',
|
|
'price' => $product->price,
|
|
'priceCurrency' => 'IRR',
|
|
]
|
|
);
|
|
}
|
|
\JsonLd::addValue(
|
|
'provider',
|
|
[
|
|
'type' => 'organization',
|
|
'name' => self::setting('site.name'),
|
|
'url' => config('app.url'),
|
|
'logo' => [
|
|
'type' => 'ImageObject',
|
|
'url' => self::setting('site.logo'),
|
|
],
|
|
]
|
|
);
|
|
\JsonLd::addValue('datePublished', $product->created_at);
|
|
\JsonLd::addValue('dateModified', $product->updated_at);
|
|
\JsonLd::addImage(\Storage::url($image));
|
|
|
|
}
|
|
|
|
public static function setting($key)
|
|
{
|
|
return $key;
|
|
}
|
|
}
|