spatie/schema-org
fornece um construtor fluente para todos os tipos do Schema.org e suas propriedades. O código em src
é gerado a partir do arquivo de padrões JSON-LD do Schema.org, portanto, fornece objetos e métodos para todo o vocabulário principal. As classes e métodos também estão totalmente documentados como referência rápida.
use SpatieSchemaOrgSchema;$localBusiness = Schema::localBusiness() ->nome('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>
Investimos muitos recursos na criação dos melhores pacotes de código aberto. Você pode nos apoiar comprando um de nossos produtos pagos.
Agradecemos muito que você nos envie um cartão postal de sua cidade natal, mencionando qual(is) de nossos pacotes você está usando. Você encontrará nosso endereço em nossa página de contato. Publicamos todos os cartões postais recebidos em nosso mural virtual de cartões postais.
Você pode instalar o pacote via compositor:
compositor requer spatie/schema-org
Todos os tipos podem ser instanciados por meio da classe de fábrica SpatieSchemaOrgSchema
ou com a palavra-chave new
.
$localBusiness = Schema::localBusiness()->name('Spatie');// É equivalente a:$localBusiness = new LocalBusiness();$localBusiness->name('Spatie');
Todos os tipos também aceitam matrizes do tipo de dados esperado, por exemplo,
sameAs
aceita uma string ou uma matriz de strings.
Todos os tipos também implementam o ArrayAccess
do SPL para acessar as propriedades via notação de array:
$anotherLocalBusiness = new LocalBusiness();var_dump(isset($anotherLocalBusiness['nome'])); // => false$anotherLocalBusiness['name'] = 'Spatie';var_dump(isset($anotherLocalBusiness['name'])); // => truevar_dump($anotherLocalBusiness['nome']); // => 'Spatie'unset($anotherLocalBusiness['name']);var_dump(isset($anotherLocalBusiness['name'])); // => falso
Os tipos podem ser convertidos em um array ou renderizados em um script.
$localBusiness->toArray();echo $localBusiness->toScript();echo $localBusiness; // Mesma saída que `toScript()`
Além disso, todos os tipos podem ser convertidos em uma string JSON simples apenas chamando json_encode()
com seu objeto:
echo json_encode($localBusiness);
Recomendo verificar novamente seus dados estruturados com a ferramenta de teste de dados estruturados do Google.
A partir da versão 1.6.0, todos os tipos filhos de Enumeração estão disponíveis como classes com constantes.
Schema::book()->bookFormat(SpatieSchemaOrgBookFormatType::Hardcover);
Não há documentação completa da API para tipos e propriedades. Você pode consultar a fonte ou o site schema.org.
Se não quiser quebrar a cadeia de um objeto de esquema grande, você pode usar o método if
para modificar condicionalmente o esquema.
use SpatieSchemaOrgLocalBusiness;use SpatieSchemaOrgSchema;$business = ['name' => 'Spatie'];$localBusiness = Schema::localBusiness() ->nome($empresa['nome']) ->if(isset($business['email']), function (LocalBusiness $schema) use ($business) {$schema->email($business['email']); });
A partir da v2.6.0, a chave identifier
é substituída por @id
para identificadores de string simples. Isso se deve à definição da sintaxe ld+json
.
Todas as sintaxes do schema.org já possuem representação integrada para URIs e URLs, por exemplo, em Microdata 'itemid', em RDFa 1.1, 'resource', em JSON-LD, '@id'.
— esquema.org/docs // PR#102 // PR#157
Se precisar definir uma propriedade personalizada, você pode usar o método setProperty
.
$localBusiness->setProperty('foo', 'bar');
Se precisar recuperar uma propriedade, você pode usar o método getProperty
. Opcionalmente, você pode passar um segundo parâmetro para fornecer um valor padrão.
$localBusiness->getProperty('nome'); // 'Spatie'$localBusiness->getProperty('bar'); // null$localBusiness->getProperty('bar', 'baz'); // 'baz'
Todas as propriedades podem ser recuperadas como um array com o método getProperties
.
$localBusiness->getProperties(); // ['nome' => 'Spatie', ...]
Várias propriedades podem ser definidas de uma só vez usando o método addProperties
.
$localBusiness->addProperties(['nome' => 'valor', 'foo' => 'barra']);
O contexto e o tipo podem ser recuperados com os métodos getContext
e getType
.
$localBusiness->getContext(); // 'https://schema.org'$localBusiness->getType(); // 'LocalBusiness'
O Graph possui muitos métodos e utilitários - a maneira mais simples e com segurança de tipo é usar os métodos sobrecarregados da própria classe SpatieSchemaOrgSchema
. Esses métodos obterão uma instância nova ou já criada do esquema solicitado.
$graph = new Graph();// Cria um produto e pré-vincula a organização$graph->product() ->nome('Meu produto legal') ->brand($graph->organization());// Oculta a organização da tag do script criado$graph->hide(SpatieSchemaOrgOrganization::class);// Em outro lugar preencha a organização$graph->organization() ->name('My awesome Company');// Renderiza o gráfico para o script tagecho $graph;
Com essas ferramentas, o gráfico é uma coleção de todos os esquemas disponíveis, pode vincular esses esquemas entre si e evitar que esquemas auxiliares sejam renderizados na tag de script.
Às vezes, você precisa controlar vários nós gráficos do mesmo tipo - por exemplo, vários nós Person
para diferentes pessoas em sua organização. Para fazer isso, você pode usar identificadores de nó em sua instância do gráfico. Se você não fornecer um identificador, um identificador default
de palavra-chave reservada será usado.
use SpatieSchemaOrgGraph;use SpatieSchemaOrgPerson;$graph = new Graph();// adicione uma Pessoa usando encadeamento$graph->person('freekmurze') ->dadoNome('Freek') ->nomedafamília('Van der Herten') ->alternateName('freekmurze');// adiciona uma Pessoa usando encerramento$graph->person('sebastiandedeyne', function(Person $sebastian, Graph $graph): void {$sebastian->givenName('Sebastian') ->nomedafamília('De Deyne') ->nomeAlternativo('sebastiandedeyne'); }); // adiciona uma pessoa usando encerramento e segunda chamada com o mesmo identificador$graph->person('gummibeer', fn(Person $gummibeer) => $gummibeer->alternateName('gummibeer') );$graph->pessoa('gummibeer') ->dadoNome('Tom') ->familyName('Witkowski');$graph->person('random')->name('Random Person');// oculta a pessoa aleatória do Graph$graph->hide(Person::class, 'random ');echo json_encode($gráfico);
{"@context":"https://schema.org","@graph":[ {"@type":"Person","givenName":"Freek","familyName":"Van der Herten","alternateName":"freekmurze"}, {"@type":"Pessoa","givenName":"Sebastian","familyName":"De Deyne","alternateName":"sebastiandedeyne"}, {"@type":"Person","alternateName":"gummibeer","givenName":"Tom","familyName":"Witkowski"} ] }
Schema.org permite entidades multidigitadas - para usá-las com este pacote você pode usar a classe MultiTypedEntity
- que funciona de forma semelhante ao gráfico.
$mte = new MultiTypedEntity();$mte->hotelRoom()->name('A Suíte Presidencial');$mte->product()->offers( Esquema::oferta() ->nome('Uma Noite') ->preço(100.000,00) ->preçoMoeda('USD') );$mte->produto(function (Produto $produto) {$produto->agregadoRating( Esquema::agregadoRating() ->melhor classificação(5) ->piorClassificação(4) ); });echo json_encode($mte);
{ "@context":"https://schema.org", "@type":[ "Quarto de Hotel", "Produto" ], "name":"Suíte Presidencial", "offers":{ "@type":"Oferta", "name":"Uma noite", "price":100000, "priceCurrency":"USD" }, "agregateRating":{ "@type":"AggregateRating", "bestRating":5, "worstRating":4 } }
Não existe uma regra real sobre como as propriedades são mescladas. Ele usa apenas array_merge()
nos bastidores. Portanto, você deve evitar definir a mesma propriedade em tipos diferentes no MTE ou certificar-se de que todas as propriedades tenham o mesmo valor, de modo que não seja importante qual propriedade será usada no final.
O tipo Float
não está disponível porque é uma palavra-chave reservada em PHP
O tipo Physician
não está disponível porque estende um tipo da especificação da extensão health
Consulte CHANGELOG para obter mais informações sobre o que mudou recentemente.
$ teste do compositor
Consulte CONTRIBUINDO para obter detalhes.
Se você encontrou um bug relacionado à segurança, envie um email para [email protected] em vez de usar o rastreador de problemas.
Você é livre para usar este pacote, mas se ele chegar ao seu ambiente de produção, agradecemos muito que você nos envie um cartão postal de sua cidade natal, mencionando quais de nossos pacotes você está usando.
Nosso endereço é: Spatie, Kruikstraat 22, 2018 Antuérpia, Bélgica.
Publicamos todos os cartões postais recebidos no site da nossa empresa.
Sebastião De Deyne
Tom Witkowski
Todos os colaboradores
A licença MIT (MIT). Consulte Arquivo de licença para obter mais informações.