spatie/schema-org為所有Schema.org 類型及其屬性提供了一個流暢的建構器。 src中的程式碼是從 Schema.org 的 JSON-LD 標準檔案產生的,因此它為整個核心詞彙表提供了物件和方法。這些類別和方法也被完整記錄下來作為快速參考。
使用 SpatieSchemaOrgSchema;$localBusiness = Schema::localBusiness()
->名稱('斯帕蒂')
->電子郵件('[email protected]')
->contactPoint(Schema::contactPoint()->areaServed('全球'));echo $localBusiness->toScript(); <script type="application/ld+json">{"@context": "https://schema.org","@type": "LocalBusiness","name": "Spatie","email": " [email protected]","contactPoint": {"@type": "ContactPoint","areaServed": "全球"}}</script>我們投入了大量資源來創建一流的開源套件。您可以透過購買我們的一款付費產品來支持我們。
我們非常感謝您從家鄉寄給我們一張明信片,並註明您正在使用我們的哪種套餐。您可以在我們的聯絡頁面上找到我們的地址。我們在虛擬明信片牆上發布所有收到的明信片。
您可以透過 Composer 安裝該軟體包:
作曲家需要 spatie/schema-org
所有類型都可以透過SpatieSchemaOrgSchema工廠類別或使用new關鍵字進行實例化。
$localBusiness = Schema::localBusiness()->name('Spatie');// 等價於:$localBusiness = new LocalBusiness();$localBusiness->name('Spatie');所有類型也接受預期資料類型的數組,例如
sameAs接受字串或字串數組。
所有類型也實作 SPL 的ArrayAccess以便透過陣列表示法存取屬性:
$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'])); // => 假
類型可以轉換為陣列或呈現為腳本。
$localBusiness->toArray();echo $localBusiness->toScript();echo $localBusiness; // 與 `toScript()` 相同的輸出
此外,只需使用物件呼叫json_encode()即可將所有類型轉換為純 JSON 字串:
迴聲 json_encode($localBusiness);
我建議使用 Google 的結構化資料測試工具仔細檢查您的結構化資料。
從 v1.6.0 開始,所有枚舉子類型都可以作為帶有常數的類別。
Schema::book()->bookFormat(SpatieSchemaOrgBookFormatType::Hardcover);
沒有關於類型和屬性的完整 API 文件。您可以參考來源或 schema.org 網站。
如果您不想破壞大型架構物件的鏈,可以使用if方法有條件地修改架構。
使用 SpatieSchemaOrgLocalBusiness;使用 SpatieSchemaOrgSchema;$business = ['name' => 'Spatie'];$localBusiness = Schema::localBusiness()
->名稱($business['名稱'])
->if(isset($business['email']), function (LocalBusiness $schema) use ($business) {$schema->email($business['email']);
});從 v2.6.0 開始,對於簡單的字串標識符, identifier鍵被@id替換。這是由於ld+json語法的定義所造成的。
所有 schema.org 語法都已經具有 URI 和 URL 的內建表示,例如在 Microdata 中的「itemid」、在 RDFa 1.1 中的「resource」、在 JSON-LD 中的「@id」。
— schema.org/docs // PR#102 // PR#157
如果您需要設定自訂屬性,可以使用setProperty方法。
$localBusiness->setProperty('foo', 'bar');如果您需要檢索屬性,可以使用getProperty方法。您可以選擇傳入第二個參數來提供預設值。
$localBusiness->getProperty('名稱'); // 'Spatie'$localBusiness->getProperty('bar'); // null$localBusiness->getProperty('bar', 'baz'); // '巴茲'所有屬性都可以使用getProperties方法作為陣列進行檢索。
$localBusiness->getProperties(); // ['name' => 'Spatie', ...]
可以使用addProperties方法一次設定多個屬性。
$localBusiness->addProperties(['name' => 'value', 'foo' => 'bar']);
可以使用getContext和getType方法檢索上下文和類型。
$localBusiness->getContext(); // 'https://schema.org'$localBusiness->getType(); // '本地企業'
Graph 有許多方法和實用程式 - 類型安全且最簡單的方法是使用SpatieSchemaOrgSchema類別本身的重載方法。這些方法將取得所請求模式的已建立實例或新實例。
$graph = new Graph();// 建立產品並預先連結組織$graph->product()
->name('我的酷產品')
->brand($graph->organization());// 從建立的腳本標籤隱藏組織$graph->hide(SpatieSchemaOrgOrganization::class);// 在其他地方填寫組織$graph->organization()
->name('My Awesome Company');// 將圖形渲染到腳本 tagecho $graph;使用這些工具,圖表是所有可用模式的集合,可以將這些模式相互連結並防止在腳本標籤中呈現輔助模式。
有時,您必須追蹤同一類型的多個圖形節點 - 例如組織中不同人員的多個Person節點。為此,您可以在圖形實例上使用節點標識符。如果您不提供標識符,將使用保留關鍵字default標識符。
use SpatieSchemaOrgGraph;use SpatieSchemaOrgPerson;$graph = new Graph();// 使用連結加入一個 Person $graph->person('freekmurze')
->給定名稱('弗里克')
->familyName('范德赫滕')
->alternateName('freekmurze');// 使用closure$graph->person('sebastiandedeyne', function(Person $sebastian, Graph $graph): void {$sebastian->givenName('Sebastian') 加入一個Person
->familyName('De Deyne')
->alternateName('sebastiandedeyne');
});
// 使用閉包新增一個人,並使用相同的識別碼進行第二次呼叫$graph->person('gummibeer', fn(Person $gummibeer) => $gummibeer->alternateName('gummibeer')
);$graph->person('口香糖啤酒')
->givenName('湯姆')
->familyName('Witkowski');$graph->person('random')->name('Random Person');// 從 Graph 隱藏隨機人物$graph->hide(Person::class, 'random ');回顯json_encode($graph); {“@context”:“https://schema.org”,“@graph”:[
{"@type":"Person","givenName":"弗里克","familyName":"范德赫滕","alternateName":"freekmurze"},
{"@type":"Person","givenName":"塞巴斯蒂安","familyName":"De Deyne","alternateName":"sebastiandedeyne"},
{"@type":"Person","alternateName":"gummibeer","givenName":"Tom","familyName":"Witkowski"}
]
}Schema.org 允許多類型實體 - 要將它們與此套件一起使用,您可以使用MultiTypedEntity類別 - 其工作方式與圖類似。
$mte = new MultiTypedEntity();$mte->hotelRoom()->name('總統套房');$mte->product()->offers(
架構::報價()
->name('一晚')
->價格(100000.00)
->價格貨幣('美元')
);$mte->產品(函數(產品$產品){$產品->aggregateRating(
模式::aggregateRating()
->最佳評分(5)
->最差評級(4)
);
});回顯 json_encode($mte); { "@context":"https://schema.org", "@type":[ "飯店房間", "產品"
], "name":"總統套房", "offers":{ "@type":"折扣", "name":"一晚", "price":100000, "priceCurrency":"USD"
}, "aggregateRating":{ "@type":"AggregateRating", "bestRating":5, "worstRating":4
}
}對於如何合併屬性,並沒有真正的規則。它只在幕後使用array_merge() 。因此,您應該避免在 MTE 中的不同類型上定義相同的屬性,或者確保所有屬性都具有相同的值,最終使用哪個屬性並不重要。
Float類型不可用,因為它是 PHP 中的保留關鍵字
Physician類型不可用,因為它擴展了health擴展規範的類型
請參閱變更日誌以了解最近變更的更多資訊。
$ 作曲家測試
詳細資訊請參閱貢獻。
如果您發現有關安全的錯誤,請發送郵件至 [email protected],而不是使用問題追蹤器。
您可以自由使用這個軟體包,但如果它進入您的生產環境,我們非常感謝您從您的家鄉給我們寄一張明信片,註明您正在使用我們的哪個軟體包。
我們的地址是:Spatie, Kruikstraat 22, 2018 安特衛普, 比利時。
我們在公司網站上發布所有收到的明信片。
塞巴斯蒂安·德·戴因
湯姆·維特科斯基
所有貢獻者
麻省理工學院許可證 (MIT)。請參閱許可證文件以獲取更多資訊。