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) โปรดดูไฟล์ใบอนุญาตสำหรับข้อมูลเพิ่มเติม