spatie/schema-org
มอบเครื่องมือสร้าง Schema.org ทุก ประเภทและคุณสมบัติต่างๆ ได้อย่างคล่องแคล่ว โค้ดใน src
สร้างขึ้นจากไฟล์มาตรฐาน JSON-LD ของ Schema.org ดังนั้นจึงจัดเตรียมออบเจ็กต์และวิธีการสำหรับคำศัพท์หลักทั้งหมด คลาสและเมธอดยังได้รับการบันทึกไว้อย่างครบถ้วนเพื่อใช้เป็นข้อมูลอ้างอิงอย่างรวดเร็ว
ใช้ SpatieSchemaOrgSchema;$localBusiness = Schema::localBusiness() ->ชื่อ('สปาตี้') -> อีเมล ('[email protected]') ->contactPoint(Schema::contactPoint()->areaServed('Worldwide'));echo $localBusiness->toScript();
<script type="application/ld+json">{"@context": "https://schema.org","@type": "LocalBusiness","name": "Spatie", "อีเมล": " [email protected]","contactPoint": {"@type": "ContactPoint", "areaServed": "ทั่วโลก"}}</script>
เราลงทุนทรัพยากรจำนวนมากเพื่อสร้างแพ็คเกจโอเพ่นซอร์สที่ดีที่สุดในระดับเดียวกัน คุณสามารถสนับสนุนเราได้โดยการซื้อหนึ่งในผลิตภัณฑ์ที่ต้องชำระเงินของเรา
เราขอขอบคุณอย่างยิ่งที่คุณส่งโปสการ์ดจากบ้านเกิดของคุณถึงเรา โดยระบุว่าคุณใช้แพ็คเกจใดของเรา คุณจะพบที่อยู่ของเราในหน้าติดต่อของเรา เราเผยแพร่โปสการ์ดที่ได้รับทั้งหมดบนวอลล์โปสการ์ดเสมือนของเรา
คุณสามารถติดตั้งแพ็คเกจผ่านทางผู้แต่ง:
ผู้แต่งต้องการ spatie/schema-org
ทุกประเภทสามารถสร้างอินสแตนซ์ได้ผ่านคลาสโรงงาน SpatieSchemaOrgSchema
หรือด้วยคีย์เวิร์ด new
$localBusiness = Schema::localBusiness()->name('Spatie');// เทียบเท่ากับ:$localBusiness = new LocalBusiness();$localBusiness->name('Spatie');
ทุกประเภทยังยอมรับอาร์เรย์ของประเภทข้อมูลที่คาดหวัง เช่น
sameAs
ยอมรับสตริงหรืออาร์เรย์ของสตริง
ทุกประเภทยังใช้ ArrayAccess
ของ SPL เพื่อเข้าถึงคุณสมบัติผ่านสัญลักษณ์อาร์เรย์:
$anotherLocalBusiness = LocalBusiness ใหม่();var_dump(isset($anotherLocalBusiness['ชื่อ'])); // => 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 ธรรมดาได้เพียงแค่เรียก json_encode()
ด้วยอ็อบเจ็กต์ของคุณ:
echo json_encode($localBusiness);
ฉันขอแนะนำให้ตรวจสอบข้อมูลที่มีโครงสร้างของคุณอีกครั้งด้วยเครื่องมือทดสอบข้อมูลที่มีโครงสร้างของ Google
ในเวอร์ชัน 1.6.0 ประเภทย่อยการแจงนับทั้งหมดจะมีให้เป็นคลาสที่มีค่าคงที่
Schema::book()->bookFormat(SpatieSchemaOrgBookFormatType::ปกแข็ง);
ไม่มีเอกสารประกอบ API ฉบับสมบูรณ์สำหรับประเภทและคุณสมบัติ คุณสามารถอ้างอิงถึงแหล่งที่มาหรือเว็บไซต์ schema.org
หากคุณไม่ต้องการแยกสายโซ่ของวัตถุสคีมาขนาดใหญ่ คุณสามารถใช้วิธี if
เพื่อแก้ไขสคีมาแบบมีเงื่อนไขได้
ใช้ SpatieSchemaOrgLocalBusiness;ใช้ SpatieSchemaOrgSchema;$business = ['name' => 'Spatie'];$localBusiness = Schema::localBusiness() ->ชื่อ($ธุรกิจ['ชื่อ']) ->if(isset($business['email']), ฟังก์ชัน (LocalBusiness $schema) ใช้ ($business) {$schema->email($business['email']); -
ตั้งแต่เวอร์ชัน 2.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(); // ['ชื่อ' => 'สปาตี้', ...]
คุณสามารถตั้งค่าคุณสมบัติหลายรายการพร้อมกันได้โดยใช้เมธอด addProperties
$localBusiness->addProperties(['name' => 'value', 'foo' => 'bar']);
คุณสามารถดึงข้อมูลบริบทและประเภทได้ด้วยเมธอด getContext
และ getType
$localBusiness->getContext(); // 'https://schema.org'$localBusiness->getType(); // 'ธุรกิจท้องถิ่น'
Graph มีวิธีการและยูทิลิตี้มากมาย วิธีที่ปลอดภัยและง่ายที่สุดคือการใช้เมธอดที่โอเวอร์โหลดของคลาส SpatieSchemaOrgSchema
วิธีการเหล่านี้จะได้รับอินสแตนซ์ที่สร้างไว้แล้วหรืออินสแตนซ์ใหม่ของสคีมาที่ร้องขอ
$graph = new Graph();// สร้างผลิตภัณฑ์และเชื่อมโยงองค์กรล่วงหน้า$graph->product() ->ชื่อ('ผลิตภัณฑ์เจ๋งๆ ของฉัน') ->brand($graph->organization());// ซ่อนองค์กรจากแท็กสคริปต์ที่สร้างขึ้น$graph->hide(SpatieSchemaOrgOrganization::class);// ที่อื่นกรอกองค์กร$graph->organization() ->ชื่อ('บริษัทที่ยอดเยี่ยมของฉัน');// แสดงกราฟเป็นสคริปต์ tagecho $graph;
ด้วยเครื่องมือเหล่านี้ กราฟคือชุดของสคีมาที่มีอยู่ทั้งหมด สามารถเชื่อมโยงสคีมาเหล่านี้เข้าด้วยกัน และป้องกันไม่ให้สคีมาตัวช่วยแสดงผลในแท็กสคริปต์
บางครั้งคุณต้องติดตามโหนดกราฟหลายรายการที่เป็นประเภทเดียวกัน - ตัวอย่างเช่น โหนด Person
หลายรายการสำหรับบุคคลต่างๆ ในองค์กรของคุณ ในการทำเช่นนั้น คุณสามารถใช้ตัวระบุโหนดบนอินสแตนซ์กราฟของคุณได้ หากคุณไม่ระบุตัวระบุ ระบบจะใช้ตัวระบุ default
ของคำหลักที่สงวนไว้
ใช้ SpatieSchemaOrgGraph; ใช้ SpatieSchemaOrgPerson;$graph = new Graph();// เพิ่มบุคคลโดยใช้ chaining$graph->person('freekmurze') ->givenName('ฟรี') ->ชื่อครอบครัว('ฟาน เดอร์ แฮร์เทน') ->alternateName('freekmurze');// เพิ่มบุคคลโดยใช้ closure$graph->person('sebastiandedeyne', function(Person $sebastian, Graph $graph): void {$sebastian->givenName('Sebastian') ->ชื่อครอบครัว('เดอ ดีน') ->alternateName('เซบาสเตียนเดดีน'); - // เพิ่มบุคคลโดยใช้การปิดและการเรียกครั้งที่สองด้วยตัวระบุเดียวกัน$graph->person('gummibeer', fn(Person $gummibeer) => $gummibeer->alternateName('gummibeer') );$graph->person('gummibeer') ->givenName('ทอม') ->familyName('Witkowski');$graph->person('random')->name('Random Person');// ซ่อนบุคคลสุ่มจาก Graph$graph->hide(Person::class, 'random ');echo json_encode($กราฟ);
{"@context"https://schema.org","@graph":[ {"@type""บุคคล""givenName"": Freek "" familyName "" Van der Herten "" ชื่อสำรอง "" freekmurze"}, {"@type": "บุคคล" "givenName" "เซบาสเตียน" "ชื่อครอบครัว" "เดอ ดีน" "ชื่อสำรอง" "เซบาสเตียนเดดีน"}, {"@type""บุคคล""ทางเลือกอื่น"":กัมมิเบียร์ "givenName": "ทอม" "ชื่อครอบครัว" "" Witkowski "} - -
Schema.org อนุญาตให้มีเอนทิตีหลายประเภท - หากต้องการใช้กับแพ็คเกจนี้ คุณสามารถใช้คลาส MultiTypedEntity
- ซึ่งทำงานคล้ายกับกราฟ
$mte = new MultiTypedEntity();$mte->hotelRoom()->name('The Presidential Suite');$mte->product()->offers( สคีมา::offer() ->ชื่อ('คืนหนึ่ง') ->ราคา(100,000.00) ->ราคาสกุลเงิน('USD') );$mte->product(function (ผลิตภัณฑ์ $product) {$product->aggregateRating( Schema::aggregateRating() -> คะแนนที่ดีที่สุด (5) -> คะแนนแย่ที่สุด (4) - });echo json_encode($mte);
{ "@context"https://schema.org", "@type":[ "ห้องพักโรงแรม", "ผลิตภัณฑ์" ], "ชื่อ"ห้องเพรสซิเดนเชียลสวีท", "ข้อเสนอ":{ "@type":เสนอ", "ชื่อ": คืนหนึ่ง ", "ราคา": 100000, "priceCurrency": "USD" }, "aggregateRating":{ "@type":AggregateRating", "bestRating":5, "worstRating":4 - -
ไม่มีกฎเกณฑ์ที่แท้จริงเกี่ยวกับวิธีการรวมคุณสมบัติต่างๆ มันใช้เฉพาะ array_merge()
เบื้องหลังเท่านั้น ดังนั้นคุณควรหลีกเลี่ยงการกำหนดคุณสมบัติเดียวกันในประเภทที่แตกต่างกันใน MTE หรือตรวจสอบให้แน่ใจว่าคุณสมบัติทั้งหมดมีค่าเท่ากัน โดยไม่สำคัญว่าจะต้องใช้คุณสมบัติใดในตอนท้าย
ไม่สามารถใช้ประเภท Float
ได้เนื่องจากเป็นคีย์เวิร์ดที่สงวนไว้ใน PHP
ไม่มีประเภท Physician
เนื่องจากเป็นการขยายประเภทจากข้อกำหนดส่วนขยาย health
โปรดดู CHANGELOG สำหรับข้อมูลเพิ่มเติมว่ามีอะไรเปลี่ยนแปลงเมื่อเร็วๆ นี้
การทดสอบผู้แต่ง $
โปรดดูการมีส่วนร่วมเพื่อดูรายละเอียด
หากคุณพบข้อบกพร่องเกี่ยวกับการรักษาความปลอดภัย โปรดส่งอีเมลไปที่ [email protected] แทนการใช้ตัวติดตามปัญหา
คุณสามารถใช้แพ็คเกจนี้ได้อย่างอิสระ แต่หากมันเหมาะกับสภาพแวดล้อมการใช้งานจริงของคุณ เราขอขอบคุณอย่างยิ่งที่คุณส่งโปสการ์ดจากบ้านเกิดของคุณมาให้เรา โดยระบุว่าคุณกำลังใช้แพ็คเกจใดของเรา
ที่อยู่ของเราคือ: Spatie, Kruikstraat 22, 2018 แอนต์เวิร์ป, เบลเยียม
เราเผยแพร่ไปรษณียบัตรที่ได้รับทั้งหมดบนเว็บไซต์ของบริษัทของเรา
เซบาสเตียน เดอ ไดน์
ทอม วิทโคว์สกี้
ผู้ร่วมให้ข้อมูลทั้งหมด
ใบอนุญาตเอ็มไอที (MIT) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม