spatie/schema-org
menyediakan pembuat yang lancar untuk semua jenis Schema.org dan propertinya. Kode di src
dihasilkan dari file standar JSON-LD Schema.org, sehingga menyediakan objek dan metode untuk seluruh kosakata inti. Kelas dan metode juga didokumentasikan sepenuhnya sebagai referensi cepat.
gunakan SpatieSchemaOrgSchema;$localBusiness = Skema::localBusiness() ->nama('Spatie') ->email('[email protected]') ->contactPoint(Skema::contactPoint()->areaServed('Seluruh Dunia'));echo $localBusiness->toScript();
<script type="application/ld+json">{"@context": "https://schema.org","@type": "LocalBusiness","name": "Spatie","email": " [email protected]","contactPoint": {"@type": "ContactPoint","areaServed": "Seluruh Dunia"}}</script>
Kami menginvestasikan banyak sumber daya untuk menciptakan paket sumber terbuka terbaik di kelasnya. Anda dapat mendukung kami dengan membeli salah satu produk berbayar kami.
Kami sangat menghargai Anda mengirimi kami kartu pos dari kota asal Anda, yang menyebutkan paket kami mana yang Anda gunakan. Anda akan menemukan alamat kami di halaman kontak kami. Kami mempublikasikan semua kartu pos yang diterima di dinding kartu pos virtual kami.
Anda dapat menginstal paket melalui composer:
komposer membutuhkan spatie/schema-org
Semua jenis dapat dipakai melalui kelas pabrik SpatieSchemaOrgSchema
, atau dengan kata kunci new
.
$localBusiness = Skema::localBusiness()->name('Spatie');// Setara dengan:$localBusiness = new LocalBusiness();$localBusiness->name('Spatie');
Semua tipe juga menerima array dari tipe data yang diharapkan, misalnya
sameAs
menerima string atau array string.
Semua tipe juga mengimplementasikan ArrayAccess
SPL untuk mengakses properti melalui notasi array:
$anotherLocalBusiness = LocalBusiness baru();var_dump(isset($anotherLocalBusiness['nama'])); // => false$anotherLocalBusiness['name'] = 'Spatie';var_dump(isset($anotherLocalBusiness['name'])); // => truevar_dump($anotherLocalBusiness['nama']); // => 'Spatie'unset($anotherLocalBusiness['nama']);var_dump(isset($anotherLocalBusiness['nama'])); // => salah
Tipe dapat dikonversi ke array atau dirender ke skrip.
$localBusiness->toArray();echo $localBusiness->toScript();echo $localBusiness; // Outputnya sama dengan `toScript()`
Selain itu, semua tipe dapat dikonversi ke string JSON biasa hanya dengan memanggil json_encode()
dengan objek Anda:
echo json_encode($Bisnis Lokal);
Saya sarankan untuk memeriksa kembali data terstruktur Anda dengan alat pengujian data terstruktur Google.
Mulai v1.6.0, semua tipe anak Enumerasi tersedia sebagai kelas dengan konstanta.
Skema::buku()->bookFormat(SpatieSchemaOrgBookFormatType::Hardcover);
Tidak ada dokumentasi API lengkap untuk tipe dan properti. Anda dapat merujuk ke sumbernya atau ke situs web skema.org.
Jika Anda tidak ingin memutus rantai objek skema besar, Anda dapat menggunakan metode if
untuk mengubah skema secara kondisional.
gunakan SpatieSchemaOrgLocalBusiness;gunakan SpatieSchemaOrgSchema;$business = ['name' => 'Spatie'];$localBusiness = Schema::localBusiness() ->nama($bisnis['nama']) ->if(isset($business['email']), fungsi (LocalBusiness $schema) use ($business) {$schema->email($business['email']); });
Pada v2.6.0 kunci identifier
digantikan oleh @id
untuk pengidentifikasi string sederhana. Hal ini disebabkan oleh definisi sintaksis ld+json
.
Semua sintaksis skema.org sudah memiliki representasi bawaan untuk URI dan URL, misalnya di Microdata 'itemid', di RDFa 1.1, 'resource', di JSON-LD, '@id'.
— skema.org/docs // PR#102 // PR#157
Jika Anda perlu menyetel properti khusus, Anda dapat menggunakan metode setProperty
.
$localBusiness->setProperty('foo', 'bar');
Jika Anda perlu mengambil properti, Anda dapat menggunakan metode getProperty
. Anda juga dapat meneruskan parameter kedua untuk memberikan nilai default.
$localBusiness->getProperty('nama'); // 'Spatie'$localBusiness->getProperty('bar'); // null$localBusiness->getProperty('bar', 'baz'); // 'baz'
Semua properti dapat diambil sebagai array dengan metode getProperties
.
$Bisnis Lokal->getProperties(); // ['nama' => 'Spatie', ...]
Beberapa properti dapat diatur sekaligus menggunakan metode addProperties
.
$localBusiness->addProperties(['name' => 'value', 'foo' => 'bar']);
Konteks dan tipe dapat diambil dengan metode getContext
dan getType
.
$Bisnis Lokal->getContext(); // 'https://schema.org'$localBusiness->getType(); // 'Bisnis Lokal'
Grafik memiliki banyak metode dan utilitas - cara yang paling aman dan paling sederhana adalah dengan menggunakan metode kelas SpatieSchemaOrgSchema
itu sendiri yang kelebihan beban. Metode ini akan mendapatkan contoh skema yang diminta yang sudah dibuat atau baru.
$graph = new Graph();// Membuat produk dan organisasi pra-tautan$graph->product() ->nama('Produk keren saya') ->brand($graph->organization());// Sembunyikan organisasi dari tag skrip yang dibuat$graph->hide(SpatieSchemaOrgOrganization::class);// Di tempat lain isi organisasi$graph->organization() ->name('Perusahaan Saya yang Luar Biasa');// Render grafik ke skrip tagecho $graph;
Dengan alat ini, grafik merupakan kumpulan dari semua skema yang tersedia, dapat menghubungkan skema ini satu sama lain dan mencegah skema pembantu dirender dalam tag skrip.
Terkadang Anda harus melacak beberapa node Grafik dengan tipe yang sama - misalnya beberapa node Person
untuk orang berbeda di Organisasi Anda. Untuk melakukannya, Anda dapat menggunakan pengidentifikasi simpul pada instance grafik Anda. Jika Anda tidak memberikan pengidentifikasi, pengidentifikasi default
kata kunci khusus akan digunakan.
gunakan SpatieSchemaOrgGraph;gunakan SpatieSchemaOrgPerson;$graph = new Graph();// tambahkan Orang menggunakan chaining$graph->person('freekmurze') ->Nama yang diberikan('Gratis') ->namakeluarga('Van der Herten') ->alternateName('freekmurze');// tambahkan Orang menggunakan penutupan$graf->orang('sebastiandedeyne', function(Orang $sebastian, Grafik $graf): void {$sebastian->givenName('Sebastian') ->namakeluarga('De Deyne') ->alternateName('sebastiandedeyne'); }); // menambahkan seseorang menggunakan penutupan dan panggilan kedua dengan pengenal$graph->person('gummibeer', fn(Person $gummibeer) => $gummibeer->alternateName('gummibeer') yang sama );$grafik->orang('gummibeer') ->Nama yang diberikan('Tom') ->familyName('Witkowski');$graph->person('random')->name('Random Person');// sembunyikan orang acak dari Graph$graph->hide(Person::class, 'random ');echo json_encode($grafik);
{"@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 mengizinkan entitas dengan banyak tipe - untuk menggunakannya dengan paket ini Anda dapat menggunakan kelas MultiTypedEntity
- yang cara kerjanya mirip dengan grafik.
$mte = new MultiTypedEntity();$mte->hotelRoom()->name('The Presidential Suite');$mte->produk()->penawaran( Skema::penawaran() ->nama('Satu Malam') -> harga (100.000,00) ->hargaMata Uang('USD') );$mte->produk(fungsi (Produk $produk) {$produk->aggregateRating( Skema::aggregateRating() -> Peringkat terbaik(5) ->Peringkat terburuk(4) ); });echo json_encode($mte);
{ "@context":"https://schema.org", "@type":[ "HotelRoom", "Produk" ], "name":"The Presidential Suite", "penawaran":{ "@type":"Penawaran", "name":"Satu Malam", "harga":100000, "priceCurrency":"USD" }, "aggregateRating":{ "@type":"AggregateRating", "bestRating":5, "worstRating":4 } }
Tidak ada aturan nyata bagaimana properti digabungkan. Itu hanya menggunakan array_merge()
di belakang layar. Jadi, Anda harus menghindari mendefinisikan properti yang sama pada tipe yang berbeda di MTE atau memastikan bahwa semua properti memiliki nilai yang sama sehingga tidak penting properti mana yang digunakan pada akhirnya.
Tipe Float
tidak tersedia karena merupakan kata kunci khusus di PHP
Tipe Physician
tidak tersedia karena merupakan perluasan tipe dari spesifikasi ekstensi health
Silakan lihat CHANGELOG untuk informasi lebih lanjut tentang apa yang berubah baru-baru ini.
$ tes komposer
Silakan lihat KONTRIBUSI untuk rinciannya.
Jika Anda menemukan bug terkait keamanan, silakan kirim email ke [email protected] alih-alih menggunakan pelacak masalah.
Anda bebas menggunakan paket ini, namun jika paket ini masuk ke lingkungan produksi Anda, kami sangat menghargai Anda mengirimi kami kartu pos dari kota asal Anda, yang menyebutkan paket kami mana yang Anda gunakan.
Alamat kami adalah: Spatie, Kruikstraat 22, 2018 Antwerp, Belgia.
Kami mempublikasikan semua kartu pos yang diterima di situs web perusahaan kami.
Sebastian De Deyne
Tom Witkowski
Semua Kontributor
Lisensi MIT (MIT). Silakan lihat File Lisensi untuk informasi lebih lanjut.