spatie/schema-org
모든 Schema.org 유형 및 해당 속성에 대한 유창한 빌더를 제공합니다. src
의 코드는 Schema.org의 JSON-LD 표준 파일에서 생성되므로 전체 핵심 어휘에 대한 개체와 메서드를 제공합니다. 클래스와 메서드도 빠른 참조로 완벽하게 문서화되어 있습니다.
SpatieSchemaOrgSchema;$localBusiness = Schema::localBusiness() 사용 ->name('스파티') ->이메일('[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>
우리는 동급 최고의 오픈 소스 패키지를 만드는 데 많은 리소스를 투자합니다. 유료 제품 중 하나를 구매하여 우리를 지원할 수 있습니다.
귀하가 사용하고 있는 당사 패키지를 언급하면서 귀하의 고향에서 엽서를 보내주셔서 진심으로 감사드립니다. 연락처 페이지에서 주소를 확인하실 수 있습니다. 우리는 수신된 모든 엽서를 가상 엽서 월에 게시합니다.
작곡가를 통해 패키지를 설치할 수 있습니다.
작곡가에게는 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 문자열로 변환할 수 있습니다.
echo json_encode($localBusiness);
Google의 구조화된 데이터 테스트 도구를 사용하여 구조화된 데이터를 다시 확인하는 것이 좋습니다.
v1.6.0부터 모든 Enumeration 하위 유형은 상수가 있는 클래스로 사용 가능합니다.
Schema::book()->bookFormat(SpatieSchemaOrgBookFormatType::Hardcover);
유형 및 속성에 대한 전체 API 문서는 없습니다. 출처를 참고하시거나schema.org 웹사이트를 참고하시면 됩니다.
대규모 스키마 개체의 체인을 끊고 싶지 않은 경우 if
메서드를 사용하여 조건부로 스키마를 수정할 수 있습니다.
SpatieSchemaOrgLocalBusiness 사용; SpatieSchemaOrgSchema 사용;$business = ['name' => 'Spatie'];$localBusiness = Schema::localBusiness() ->이름($비즈니스['이름']) ->if(isset($business['email']), 함수 (LocalBusiness $schema) 사용 ($business) {$schema->email($business['email']); });
v2.6.0부터 간단한 문자열 식별자의 경우 identifier
키가 @id
로 대체되었습니다. 이는 ld+json
구문에 대한 정의 때문입니다.
모든 Schema.org 구문에는 이미 URI 및 URL에 대한 기본 제공 표현이 있습니다(예: 마이크로데이터 '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' => '값', 'foo' => 'bar']);
컨텍스트 및 유형은 getContext
및 getType
메소드를 사용하여 검색할 수 있습니다.
$localBusiness->getContext(); // 'https://schema.org'$localBusiness->getType(); // '지역업체'
Graph에는 많은 메서드와 유틸리티가 있습니다. 형식이 안전하고 가장 간단한 방법은 SpatieSchemaOrgSchema
클래스 자체의 오버로드된 메서드를 사용하는 것입니다. 이러한 메서드는 요청된 스키마의 이미 생성된 인스턴스나 새 인스턴스를 가져옵니다.
$graph = new Graph();// 제품 생성 및 조직 사전 연결$graph->product() ->name('내 멋진 제품') ->brand($graph->organization());// 생성된 스크립트에서 조직 숨기기 tag$graph->hide(SpatieSchemaOrgOrganization::class);// 다른 곳에서 조직을 작성$graph->organization() ->name('나의 멋진 회사');// 그래프를 스크립트로 렌더링 tagecho $graph;
이러한 도구를 사용하면 그래프는 사용 가능한 모든 스키마의 모음이며 이러한 스키마를 서로 연결하고 도우미 스키마가 스크립트 태그에서 렌더링되는 것을 방지할 수 있습니다.
때로는 동일한 유형의 여러 그래프 노드를 추적해야 하는 경우가 있습니다. 예를 들어 조직의 여러 사람에 대한 여러 Person
노드를 추적해야 합니다. 이를 위해 그래프 인스턴스에서 노드 식별자를 사용할 수 있습니다. 식별자를 제공하지 않으면 예약된 키워드 default
식별자가 사용됩니다.
SpatieSchemaOrgGraph 사용; SpatieSchemaOrgPerson 사용;$graph = new Graph();// chaining$graph->person('freekmurze')을 사용하여 사람 추가 ->givenName('프리크') ->familyName('반 데르 헤르텐') ->alternateName('freekmurze');// closure를 사용하여 사람 추가$graph->person('sebastiandedeyne', function(Person $sebastian, Graph $graph): void {$sebastian->givenName('Sebastian') ->familyName('드 데인') ->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($graph);
{"@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에서는 다중 유형 엔터티를 허용합니다. 이 패키지와 함께 사용하려면 그래프와 유사하게 작동하는 MultiTypedEntity
클래스를 사용할 수 있습니다.
$mte = new MultiTypedEntity();$mte->hotelRoom()->name('프레지덴셜 스위트');$mte->product()->offers( 스키마::제안() ->name('원 나잇') ->가격(100000.00) ->가격통화('USD') );$mte->product(함수 (제품 $product) {$product->aggregateRating( 스키마::aggregateRating() ->최고평가(5) ->최악평가(4) ); });echo json_encode($mte);
{ "@context":"https://schema.org", "@type":[ "HotelRoom", "제품" ], "name":"프레지덴셜 스위트룸", "제안":{ "@type":"제안", "name":"1박", "price":100000, "priceCurrency":"USD" }, "aggregateRating":{ "@type":"AggregateRating", "bestRating":5, "worstRating":4 } }
속성을 병합하는 방법에 대한 실제 규칙은 없습니다. 배후에서는 array_merge()
만 사용합니다. 따라서 MTE의 서로 다른 유형에 동일한 속성을 정의하는 것을 피하거나 모든 속성이 동일한 값을 보유하는지 확인해야 합니다. 따라서 마지막에 어떤 속성이 사용되는지는 중요하지 않습니다.
Float
유형은 PHP의 예약어이므로 사용할 수 없습니다.
Physician
유형은 health
확장 사양에서 유형을 확장하므로 사용할 수 없습니다.
최근 변경된 사항에 대한 자세한 내용은 CHANGELOG를 참조하세요.
$ 작곡가 테스트
자세한 내용은 CONTRIBUTING을 참조하세요.
보안 관련 버그를 발견한 경우 이슈 트래커를 사용하는 대신 [email protected]로 메일을 보내주세요.
이 패키지를 무료로 사용할 수 있지만, 귀하의 프로덕션 환경에 적용된다면 귀하가 사용하고 있는 패키지를 언급하면서 고향에서 엽서를 보내주시면 감사하겠습니다.
주소는 Spatie, Kruikstraat 22, 2018 Antwerp, Belgium입니다.
우리는 받은 모든 엽서를 회사 웹사이트에 게시합니다.
세바스티안 드 데이네
톰 위트코프스키
모든 기여자
MIT 라이센스(MIT). 자세한 내용은 라이센스 파일을 참조하십시오.