spatie/schema-org
proporciona un generador fluido para todos los tipos de Schema.org y sus propiedades. El código en src
se genera a partir del archivo de estándares JSON-LD de Schema.org, por lo que proporciona objetos y métodos para todo el vocabulario principal. Las clases y métodos también están completamente documentados como referencia rápida.
utilizar SpatieSchemaOrgSchema;$localBusiness = Esquema::localBusiness() ->nombre('Espatia') ->correo electrónico('[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>
Invertimos muchos recursos en la creación de los mejores paquetes de código abierto. Puedes apoyarnos comprando uno de nuestros productos pagos.
Agradecemos mucho que nos envíe una postal desde su ciudad natal, mencionando cuál de nuestros paquetes está utilizando. Encontrarás nuestra dirección en nuestra página de contacto. Publicamos todas las postales recibidas en nuestro muro virtual de postales.
Puede instalar el paquete a través del compositor:
el compositor requiere spatie/schema-org
Se pueden crear instancias de todos los tipos a través de la clase de fábrica SpatieSchemaOrgSchema
o con la new
palabra clave.
$localBusiness = Schema::localBusiness()->name('Spatie');// Es equivalente a:$localBusiness = new LocalBusiness();$localBusiness->name('Spatie');
Todos los tipos también aceptan matrices del tipo de datos esperado, por ejemplo,
sameAs
acepta una cadena o una matriz de cadenas.
Todos los tipos también implementan ArrayAccess
del SPL para acceder a las propiedades mediante notación de matriz:
$otroNegocioLocal = new LocalNegocio();var_dump(isset($otroNegocioLocal['nombre'])); // => false$otroNegocioLocal['nombre'] = 'Spatie';var_dump(isset($otroNegocioLocal['nombre'])); // => truevar_dump($otroNegocioLocal['nombre']); // => 'Spatie'unset($otroNegocioLocal['nombre']);var_dump(isset($otroNegocioLocal['nombre'])); // => falso
Los tipos se pueden convertir en una matriz o representar en un script.
$localBusiness->toArray();echo $localBusiness->toScript();echo $localBusiness; // Misma salida que `toScript()`
Además, todos los tipos se pueden convertir a una cadena JSON simple simplemente llamando a json_encode()
con su objeto:
echo json_encode ($localBusiness);
Recomiendo verificar sus datos estructurados con la herramienta de prueba de datos estructurados de Google.
A partir de v1.6.0, todos los tipos secundarios de enumeración están disponibles como clases con constantes.
Esquema::libro()->libroFormat(SpatieSchemaOrgBookFormatType::Hardcover);
No existe documentación API completa para tipos y propiedades. Puede consultar la fuente o el sitio web esquema.org.
Si no desea romper la cadena de un objeto de esquema grande, puede utilizar el método if
para modificar condicionalmente el esquema.
use SpatieSchemaOrgLocalBusiness;use SpatieSchemaOrgSchema;$business = ['nombre' => 'Spatie'];$localBusiness = Schema::localBusiness() ->nombre($negocio['nombre']) ->if(isset($negocio['correo electrónico']), función (LocalBusiness $esquema) uso ($negocio) {$esquema->correo electrónico($negocio['correo electrónico']); });
A partir de v2.6.0, la clave identifier
se reemplaza por @id
para identificadores de cadena simples. Esto se debe a la definición de la sintaxis ld+json
.
Todas las sintaxis de Schema.org ya tienen representación incorporada para URI y URL, por ejemplo, en Microdatos 'itemid', en RDFa 1.1, 'recurso', en JSON-LD, '@id'.
— esquema.org/docs // PR#102 // PR#157
Si necesita establecer una propiedad personalizada, puede utilizar el método setProperty
.
$localBusiness->setProperty('foo', 'bar');
Si necesita recuperar una propiedad, puede utilizar el método getProperty
. Opcionalmente, puede pasar un segundo parámetro para proporcionar un valor predeterminado.
$localNegocio->getProperty('nombre'); // 'Spatie'$localBusiness->getProperty('bar'); // null$localBusiness->getProperty('bar', 'baz'); // 'baz'
Todas las propiedades se pueden recuperar como una matriz con el método getProperties
.
$localNegocio->getProperties(); // ['nombre' => 'Espatia', ...]
Se pueden establecer varias propiedades a la vez utilizando el método addProperties
.
$localBusiness->addProperties(['nombre' => 'valor', 'foo' => 'bar']);
El contexto y el tipo se pueden recuperar con los métodos getContext
y getType
.
$localNegocio->getContext(); // 'https://schema.org'$localBusiness->getType(); // 'Negocio Local'
Graph tiene muchos métodos y utilidades; la forma más sencilla y con seguridad de tipos es utilizar los métodos sobrecargados de la propia clase SpatieSchemaOrgSchema
. Estos métodos obtendrán una instancia nueva o ya creada del esquema solicitado.
$graph = new Graph();// Crear un producto y previncular la organización$graph->product() ->nombre('Mi producto genial') ->brand($graph->organization());// Ocultar la organización de la etiqueta del script creado$graph->hide(SpatieSchemaOrgOrganization::class);// En otro lugar, complete la organización$graph->organization() ->name('My Awesome Company');// Representar gráfico en script tagecho $graph;
Con estas herramientas, el gráfico es una colección de todos los esquemas disponibles, puede vincular estos esquemas entre sí y evitar que los esquemas auxiliares se representen en la etiqueta de script.
A veces es necesario realizar un seguimiento de varios nodos Graph del mismo tipo; por ejemplo, varios nodos Person
para diferentes personas de su organización. Para hacerlo, puede utilizar identificadores de nodo en su instancia de gráfico. Si no proporciona un identificador, se utilizará un identificador default
de palabra clave reservada.
use SpatieSchemaOrgGraph;use SpatieSchemaOrgPerson;$graph = new Graph();// agregue una persona usando encadenamiento$graph->person('freekmurze') ->nombredado('Freek') ->nombredefamilia('Van der Herten') ->alternateName('freekmurze');// agregue una Persona usando cierre$graph->person('sebastiandedeyne', function(Persona $sebastian, Graph $graph): void {$sebastian->givenName('Sebastian') ->nombredefamilia('De Deyne') ->nombrealternativo('sebastiandedeyne'); }); // agrega una persona usando cierre y segunda llamada con el mismo identificador$graph->person('gummibeer', fn(Person $gummibeer) => $gummibeer->alternateName('gummibeer') );$gráfico->persona('gummibeer') ->nombre dado('Tom') ->familyName('Witkowski');$graph->person('random')->name('Random Person');// ocultar la persona aleatoria de Graph$graph->hide(Person::class, 'random ');echo json_encode($gráfico);
{"@context":"https://schema.org","@graph":[ {"@type":"Persona","givenName":"Freek","familyName":"Van der Herten","alternateName":"freekmurze"}, {"@type":"Persona","givenName":"Sebastian","familyName":"De Deyne","alternateName":"sebastiandedeyne"}, {"@type":"Persona","alternateName":"gummibeer","givenName":"Tom","familyName":"Witkowski"} ] }
Schema.org permite entidades de varios tipos; para usarlas con este paquete, puede usar la clase MultiTypedEntity
, que funciona de manera similar al gráfico.
$mte = new MultiTypedEntity();$mte->hotelRoom()->nombre('La Suite Presidencial');$mte->producto()->ofertas( Esquema::oferta() ->nombre('Una noche') ->precio(100000.00) ->precioMoneda('USD') );$mte->producto(función (Producto $producto) {$producto->aggregateRating( Esquema::clasificación agregada() ->mejor calificación(5) ->peor calificación (4) ); });echo json_encode($mte);
{ "@context":"https://schema.org", "@type":[ "Habitación de hotel", "Producto" ], "name":"La Suite Presidencial", "offers":{ "@type":"Oferta", "name":"Una noche", "price":100000, "priceCurrency":"USD" }, "aggregateRating":{ "@type":"AggregateRating", "bestRating":5, "peorRating":4 } }
No existe una regla real sobre cómo se fusionan las propiedades. Solo usa array_merge()
detrás de escena. Por lo tanto, debe evitar definir la misma propiedad en diferentes tipos en el MTE o asegurarse de que todas las propiedades tengan el mismo valor y que no sea importante qué propiedad se use al final.
El tipo Float
no está disponible ya que es una palabra clave reservada en PHP
El tipo Physician
no está disponible porque extiende un tipo de la especificación de extensión health
Consulte CHANGELOG para obtener más información sobre los cambios recientes.
$ prueba de compositor
Consulte CONTRIBUCIÓN para obtener más detalles.
Si encuentra un error relacionado con la seguridad, envíe un correo electrónico a [email protected] en lugar de utilizar el rastreador de problemas.
Eres libre de utilizar este paquete, pero si llega a tu entorno de producción, te agradeceremos mucho que nos envíes una postal desde tu ciudad natal, mencionando cuál de nuestros paquetes estás utilizando.
Nuestra dirección es: Spatie, Kruikstraat 22, 2018 Amberes, Bélgica.
Publicamos todas las postales recibidas en el sitio web de nuestra empresa.
Sebastián Deyne
Tom Witkowski
Todos los contribuyentes
La Licencia MIT (MIT). Consulte el archivo de licencia para obtener más información.