spatie/schema-org
bietet einen flüssigen Builder für alle Schema.org-Typen und ihre Eigenschaften. Der Code in src
wird aus der JSON-LD-Standarddatei von Schema.org generiert und stellt daher Objekte und Methoden für das gesamte Kernvokabular bereit. Die Klassen und Methoden sind als Kurzreferenz auch vollständig dokumentiert.
benutze SpatieSchemaOrgSchema;$localBusiness = Schema::localBusiness() ->name('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": "Worldwide"}}</script>
Wir investieren viele Ressourcen in die Erstellung erstklassiger Open-Source-Pakete. Sie können uns unterstützen, indem Sie eines unserer kostenpflichtigen Produkte kaufen.
Wir freuen uns sehr, dass Sie uns eine Postkarte aus Ihrer Heimatstadt schicken und erwähnen, welches unserer Pakete Sie verwenden. Unsere Adresse finden Sie auf unserer Kontaktseite. Wir veröffentlichen alle erhaltenen Postkarten auf unserer virtuellen Postkartenwand.
Sie können das Paket über Composer installieren:
Komponist benötigt spatie/schema-org
Alle Typen können über die Factory-Klasse SpatieSchemaOrgSchema
oder mit dem Schlüsselwort new
instanziiert werden.
$localBusiness = Schema::localBusiness()->name('Spatie');// Entspricht:$localBusiness = new LocalBusiness();$localBusiness->name('Spatie');
Alle Typen akzeptieren auch Arrays des erwarteten Datentyps, zum Beispiel akzeptiert
sameAs
einen String oder ein Array von Strings.
Alle Typen implementieren außerdem den ArrayAccess
der SPL für den Zugriff auf die Eigenschaften über die Array-Notation:
$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'])); // => falsch
Typen können in ein Array konvertiert oder in ein Skript gerendert werden.
$localBusiness->toArray();echo $localBusiness->toScript();echo $localBusiness; // Gleiche Ausgabe wie „toScript()“.
Darüber hinaus können alle Typen in einen einfachen JSON-String konvertiert werden, indem Sie einfach json_encode()
mit Ihrem Objekt aufrufen:
echo json_encode($localBusiness);
Ich empfehle, Ihre strukturierten Daten mit dem Testtool für strukturierte Daten von Google noch einmal zu überprüfen.
Ab v1.6.0 sind alle untergeordneten Aufzählungstypen als Klassen mit Konstanten verfügbar.
Schema::book()->bookFormat(SpatieSchemaOrgBookFormatType::Hardcover);
Es gibt keine vollständige API-Dokumentation für Typen und Eigenschaften. Sie können auf die Quelle oder auf die Website schema.org verweisen.
Wenn Sie die Kette eines großen Schemaobjekts nicht unterbrechen möchten, können Sie das Schema mit der if
-Methode bedingt ändern.
use SpatieSchemaOrgLocalBusiness;use SpatieSchemaOrgSchema;$business = ['name' => 'Spatie'];$localBusiness = Schema::localBusiness() ->name($business['name']) ->if(isset($business['email']), function (LocalBusiness $schema) use ($business) {$schema->email($business['email']); });
Ab v2.6.0 wird der identifier
für einfache Zeichenfolgenbezeichner durch @id
ersetzt. Dies liegt an der Definition für die ld+json
-Syntax.
Alle schema.org-Syntaxen verfügen bereits über eine integrierte Darstellung für URIs und URLs, z. B. in Microdata „itemid“, in RDFa 1.1 „resource“, in JSON-LD „@id“.
– schema.org/docs // PR#102 // PR#157
Wenn Sie eine benutzerdefinierte Eigenschaft festlegen müssen, können Sie die setProperty
-Methode verwenden.
$localBusiness->setProperty('foo', 'bar');
Wenn Sie eine Eigenschaft abrufen müssen, können Sie die Methode getProperty
verwenden. Sie können optional einen zweiten Parameter übergeben, um einen Standardwert bereitzustellen.
$localBusiness->getProperty('name'); // 'Spatie'$localBusiness->getProperty('bar'); // null$localBusiness->getProperty('bar', 'baz'); // 'baz'
Alle Eigenschaften können mit der Methode getProperties
als Array abgerufen werden.
$localBusiness->getProperties(); // ['name' => 'Spatie', ...]
Mit der Methode addProperties
können mehrere Eigenschaften gleichzeitig festgelegt werden.
$localBusiness->addProperties(['name' => 'value', 'foo' => 'bar']);
Kontext und Typ können mit den Methoden getContext
und getType
abgerufen werden.
$localBusiness->getContext(); // 'https://schema.org'$localBusiness->getType(); // 'LocalBusiness'
Der Graph verfügt über viele Methoden und Dienstprogramme – die typsichere und einfachste Möglichkeit besteht darin, die überladenen Methoden der SpatieSchemaOrgSchema
Klasse selbst zu verwenden. Diese Methoden rufen eine bereits erstellte oder neue Instanz des angeforderten Schemas ab.
$graph = new Graph();// Ein Produkt erstellen und die Organisation vorverknüpfen$graph->product() ->name('Mein cooles Produkt') ->brand($graph->organization());// Verstecke die Organisation vor dem erstellten Skript-Tag$graph->hide(SpatieSchemaOrgOrganization::class);// Fülle die Organisation woanders aus$graph->organization() ->name('My awesome Company');// Diagramm in Skript rendern tagecho $graph;
Mit diesen Tools ist das Diagramm eine Sammlung aller verfügbaren Schemata, kann diese Schemata miteinander verknüpfen und verhindern, dass Hilfsschemata im Skript-Tag gerendert werden.
Manchmal müssen Sie den Überblick über mehrere Graph-Knoten desselben Typs behalten – zum Beispiel mehrere Person
für verschiedene Personen in Ihrer Organisation. Dazu können Sie Knotenbezeichner in Ihrer Diagramminstanz verwenden. Wenn Sie keinen Bezeichner angeben, wird ein reservierter default
-Schlüsselwortbezeichner verwendet.
use SpatieSchemaOrgGraph;use SpatieSchemaOrgPerson;$graph = new Graph();// eine Person hinzufügen mit Hilfe von Chaining$graph->person('freekmurze') ->givenName('Freek') ->Familienname('Van der Herten') ->alternateName('freekmurze');// füge eine Person mit Schließung hinzu$graph->person('sebastiandedeyne', function(Person $sebastian, Graph $graph): void {$sebastian->givenName('Sebastian') ->Familienname('De Deyne') ->alternateName('sebastiandedeyne'); }); // füge eine Person hinzu, indem du einen Abschluss und einen zweiten Aufruf mit derselben Kennung verwendest $graph->person('gummibeer', fn(Person $gummibeer) => $gummibeer->alternateName('gummibeer') );$graph->person('gummibeer') ->givenName('Tom') ->familyName('Witkowski');$graph->person('random')->name('Random Person');// die zufällige Person aus Graph ausblenden$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 erlaubt mehrfach typisierte Entitäten. Um sie mit diesem Paket zu verwenden, können Sie die MultiTypedEntity
-Klasse verwenden, die ähnlich wie das Diagramm funktioniert.
$mte = new MultiTypedEntity();$mte->hotelRoom()->name('The Presidential Suite');$mte->product()->offers( Schema::offer() ->name('Eine Nacht') ->Preis(100000,00) ->priceCurrency('USD') );$mte->product(function (Product $product) {$product->aggregateRating( Schema::aggregateRating() ->beste Bewertung(5) ->schlechteste Bewertung(4) ); });echo json_encode($mte);
{ „@context“: „https://schema.org“, „@type“:[ „HotelRoom“, „Product“ ], „name“: „Die Präsidentensuite“, „offers“:{ „@type“: „Angebot“, „name“: „Eine Nacht“, „price“: 100000, „priceCurrency“: „USD“ }, „aggregateRating“:{ „@type“: „AggregateRating“, „bestRating“:5, „worstRating“:4 } }
Es gibt keine wirkliche Regel, wie die Eigenschaften zusammengeführt werden. Es verwendet array_merge()
nur im Hintergrund. Sie sollten daher vermeiden, dieselbe Eigenschaft für verschiedene Typen im MTE zu definieren, oder sicherstellen, dass alle Eigenschaften denselben Wert haben, sodass es nicht wichtig ist, welche Eigenschaft am Ende verwendet wird.
Der Float
-Typ ist nicht verfügbar, da es sich um ein reserviertes Schlüsselwort in PHP handelt
Der Typ Physician
ist nicht verfügbar, da er einen Typ aus der health
erweitert
Weitere Informationen zu den letzten Änderungen finden Sie im CHANGELOG.
$ Composer-Test
Weitere Informationen finden Sie unter BEITRAGEN.
Wenn Sie einen Sicherheitsfehler gefunden haben, senden Sie bitte eine E-Mail an [email protected], anstatt den Issue-Tracker zu verwenden.
Es steht Ihnen frei, dieses Paket zu verwenden, aber wenn es in Ihre Produktionsumgebung gelangt, würden wir uns sehr freuen, wenn Sie uns eine Postkarte aus Ihrer Heimatstadt schicken und erwähnen, welches unserer Pakete Sie verwenden.
Unsere Adresse lautet: Spatie, Kruikstraat 22, 2018 Antwerpen, Belgien.
Wir veröffentlichen alle erhaltenen Postkarten auf unserer Firmenwebsite.
Sebastian De Deyne
Tom Witkowski
Alle Mitwirkenden
Die MIT-Lizenz (MIT). Weitere Informationen finden Sie in der Lizenzdatei.