spatie/schema-org
fournit un générateur fluide pour tous les types Schema.org et leurs propriétés. Le code dans src
est généré à partir du fichier de normes JSON-LD de Schema.org, il fournit donc des objets et des méthodes pour l'ensemble du vocabulaire de base. Les classes et méthodes sont également entièrement documentées à titre de référence rapide.
utilisez SpatieSchemaOrgSchema;$localBusiness = Schema::localBusiness() ->nom('Spatie') ->email('[email protected]') ->contactPoint(Schema::contactPoint()->areaServed('Worldwide'));echo $localBusiness->toScript();
<script type="application/ld+json">{"@context": "https://schema.org","@type": "LocalBusiness","name": "Spatie","email": " [email protected]","contactPoint": {"@type": "ContactPoint","areaServed": "Dans le monde entier"}}</script>
Nous investissons beaucoup de ressources dans la création des meilleurs packages open source de leur catégorie. Vous pouvez nous soutenir en achetant l'un de nos produits payants.
Nous apprécions grandement que vous nous envoyiez une carte postale de votre ville natale, mentionnant le(s) forfait(s) que vous utilisez. Vous trouverez notre adresse sur notre page contact. Nous publions toutes les cartes postales reçues sur notre mur virtuel de cartes postales.
Vous pouvez installer le package via composer :
le compositeur nécessite spatie/schema-org
Tous les types peuvent être instanciés via la classe de fabrique SpatieSchemaOrgSchema
ou avec le mot-clé new
.
$localBusiness = Schema::localBusiness()->name('Spatie');// Est équivalent à :$localBusiness = new LocalBusiness();$localBusiness->name('Spatie');
Tous les types acceptent également les tableaux du type de données attendu, par exemple,
sameAs
accepte une chaîne ou un tableau de chaînes.
Tous les types implémentent également ArrayAccess
du SPL pour accéder aux propriétés via la notation matricielle :
$anotherLocalBusiness = new LocalBusiness();var_dump(isset($anotherLocalBusiness['name'])); // => false$anotherLocalBusiness['name'] = 'Spatie';var_dump(isset($anotherLocalBusiness['name'])); // => truevar_dump($anotherLocalBusiness['name']); // => 'Spatie'unset($anotherLocalBusiness['name']);var_dump(isset($anotherLocalBusiness['name'])); // => faux
Les types peuvent être convertis en tableau ou rendus en script.
$localBusiness->toArray();echo $localBusiness->toScript();echo $localBusiness; // Même résultat que `toScript()`
De plus, tous les types peuvent être convertis en une simple chaîne JSON en appelant simplement json_encode()
avec votre objet :
echo json_encode($localBusiness);
Je vous recommande de vérifier vos données structurées avec l'outil de test de données structurées de Google.
Depuis la version 1.6.0, tous les types enfants d'énumération sont disponibles sous forme de classes avec des constantes.
Schema::book()->bookFormat(SpatieSchemaOrgBookFormatType::Hardcover);
Il n'existe pas de documentation API complète pour les types et les propriétés. Vous pouvez vous référer à la source ou au site schema.org.
Si vous ne souhaitez pas rompre la chaîne d'un objet de schéma volumineux, vous pouvez utiliser la méthode if
pour modifier le schéma de manière conditionnelle.
utiliser SpatieSchemaOrgLocalBusiness;utiliser SpatieSchemaOrgSchema;$business = ['name' => 'Spatie'];$localBusiness = Schema::localBusiness() ->nom($entreprise['nom']) ->if(isset($business['email']), fonction (LocalBusiness $schema) use ($business) {$schema->email($business['email']); });
Depuis la version 2.6.0, la clé identifier
est remplacée par @id
pour les identifiants de chaîne simples. Cela est dû à la définition de la syntaxe ld+json
.
Toutes les syntaxes schema.org ont déjà une représentation intégrée pour les URI et les URL, par exemple dans les microdonnées « itemid », dans RDFa 1.1, « ressource », dans JSON-LD, « @id ».
— schema.org/docs // PR#102 // PR#157
Si vous devez définir une propriété personnalisée, vous pouvez utiliser la méthode setProperty
.
$localBusiness->setProperty('foo', 'bar');
Si vous avez besoin de récupérer une propriété, vous pouvez utiliser la méthode getProperty
. Vous pouvez éventuellement transmettre un deuxième paramètre pour fournir une valeur par défaut.
$localBusiness->getProperty('nom'); // 'Spatie'$localBusiness->getProperty('bar'); // null$localBusiness->getProperty('bar', 'baz'); // 'baz'
Toutes les propriétés peuvent être récupérées sous forme de tableau avec la méthode getProperties
.
$localBusiness->getProperties(); // ['nom' => 'Spatie', ...]
Plusieurs propriétés peuvent être définies simultanément à l'aide de la méthode addProperties
.
$localBusiness->addProperties(['name' => 'value', 'foo' => 'bar']);
Le contexte et le type peuvent être récupérés avec les méthodes getContext
et getType
.
$localBusiness->getContext(); // 'https://schema.org'$localBusiness->getType(); // 'Entreprise Locale'
Le Graph possède de nombreuses méthodes et utilitaires - le moyen le plus simple et sécurisé consiste à utiliser les méthodes surchargées de la classe SpatieSchemaOrgSchema
elle-même. Ces méthodes obtiendront une instance déjà créée ou nouvelle du schéma demandé.
$graph = new Graph();// Créer un produit et pré-lier l'organisation$graph->product() ->name('Mon produit sympa') ->brand($graph->organization());// Masquer l'organisation du script créé tag$graph->hide(SpatieSchemaOrgOrganization::class);// Remplissez ailleurs l'organisation$graph->organization() ->name('My Awesome Company');// Rendre le graphique dans le script tagecho $graph;
Avec ces outils, le graphique est une collection de tous les schémas disponibles, peut relier ces schémas les uns aux autres et empêcher les schémas d'assistance d'être rendus dans la balise de script.
Parfois, vous devez suivre plusieurs nœuds Graph du même type – par exemple plusieurs nœuds Person
pour différentes personnes de votre organisation. Pour ce faire, vous pouvez utiliser des identifiants de nœud sur votre instance de graphique. Si vous ne fournissez pas d'identifiant, un identifiant default
de mot clé réservé sera utilisé.
utiliser SpatieSchemaOrgGraph;use SpatieSchemaOrgPerson;$graph = new Graph();// ajouter une personne en utilisant chaining$graph->person('freekmurze') ->givenName('Freek') ->Nom de famille('Van der Herten') ->alternateName('freekmurze');// ajouter une personne en utilisant Closure$graph->person('sebastiandedeyne', function(Person $sebastian, Graph $graph): void {$sebastian->givenName('Sebastian') ->NomFamille('De Deyne') ->alternateName('sebastiandedeyne'); }); // ajoute une personne en utilisant la fermeture et un deuxième appel avec le même identifiant$graph->person('gummibeer', fn(Person $gummibeer) => $gummibeer->alternateName('gummibeer') );$graph->person('gummibeer') ->givenName('Tom') ->familyName('Witkowski');$graph->person('random')->name('Random Person');// masquer la personne aléatoire de Graph$graph->hide(Person::class, 'random ');echo json_encode($graph);
{"@context":"https://schema.org","@graph":[ {"@type": "Person", "givenName": "Freek", "familyName": "Van der Herten", "alternateName": "freekmurze"}, {"@type": "Person", "givenName": "Sebastian", "familyName": "De Deyne", "alternateName": "sebastiandedeyne"}, {"@type": "Person", "alternateName": "gummibeer", "givenName": "Tom", "familyName": "Witkowski"} ] }
Schema.org autorise les entités multi-typées - pour les utiliser avec ce package, vous pouvez utiliser la classe MultiTypedEntity
- qui fonctionne de manière similaire au graphique.
$mte = new MultiTypedEntity();$mte->hotelRoom()->name('La Suite Présidentielle');$mte->product()->offers( Schéma :: offre () ->nom('Une nuit') ->prix(100000.00) ->prixDevise('USD') );$mte->product(function (Produit $product) {$product->aggregateRating( Schéma ::aggregateRating() ->meilleure note(5) ->pire note(4) ); });echo json_encode($mte);
{ "@context":"https://schema.org", "@type":[ "HotelRoom", "Produit" ], "name": "La Suite Présidentielle", "offers":{ "@type": "Offre", "name": "Une nuit", "price": 100000, "priceCurrency": "USD" }, "aggregateRating":{ "@type": "AggregateRating", "bestRating":5, "worstRating":4 } }
Il n’existe pas de véritable règle sur la manière dont les propriétés sont fusionnées. Il utilise uniquement array_merge()
en coulisses. Vous devez donc éviter de définir la même propriété sur différents types dans le MTE ou vous assurer que toutes les propriétés ont la même valeur et que la propriété utilisée à la fin n'a pas d'importance.
Le type Float
n'est pas disponible car c'est un mot-clé réservé en PHP
Le type Physician
n'est pas disponible car il étend un type de la spécification d'extension health
.
Veuillez consulter CHANGELOG pour plus d'informations sur ce qui a changé récemment.
$ test du compositeur
Veuillez consulter CONTRIBUER pour plus de détails.
Si vous avez trouvé un bug concernant la sécurité, veuillez envoyer un mail à [email protected] au lieu d'utiliser le suivi des problèmes.
Vous êtes libre d'utiliser ce package, mais s'il parvient à votre environnement de production, nous apprécions grandement que vous nous envoyiez une carte postale de votre ville natale, mentionnant lequel de nos packages vous utilisez.
Notre adresse est : Spatie, Kruikstraat 22, 2018 Anvers, Belgique.
Nous publions toutes les cartes postales reçues sur le site Internet de notre entreprise.
Sébastien De Deyne
Tom Witkowski
Tous les contributeurs
La licence MIT (MIT). Veuillez consulter le fichier de licence pour plus d'informations.