spatie/schema-org
предоставляет удобный конструктор для всех типов Schema.org и их свойств. Код в src
генерируется из файла стандартов JSON-LD Schema.org, поэтому он предоставляет объекты и методы для всего основного словаря. Классы и методы также полностью документированы в качестве краткого справочника.
используйте 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
принимает строку или массив строк.
Все типы также реализуют ArrayAccess
SPL для доступа к свойствам через нотацию массива:
$anotherLocalBusiness = новый 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, просто вызвав json_encode()
для вашего объекта:
эхо json_encode ($ localBusiness);
Я рекомендую дважды проверить ваши структурированные данные с помощью инструмента тестирования структурированных данных Google.
Начиная с версии 1.6.0, все дочерние типы Enumeration доступны как классы с константами.
Схема::book()->bookFormat(SpatieSchemaOrgBookFormatType::Hardcover);
Полной документации по API для типов и свойств не существует. Вы можете обратиться к источнику или к сайту Schema.org.
Если вы не хотите разрывать цепочку большого объекта схемы, вы можете использовать метод if
для условного изменения схемы.
используйте SpatieSchemaOrgLocalBusiness;use SpatieSchemaOrgSchema;$business = ['name' => 'Spatie'];$localBusiness = Schema::localBusiness() ->name($business['имя']) ->if(isset($business['email']), функция (LocalBusiness $schema) use ($business) {$schema->email($business['email']); });
Начиная с версии 2.6.0 ключ identifier
заменен на @id
для простых строковых идентификаторов. Это связано с определением синтаксиса ld+json
.
Все синтаксисы Schema.org уже имеют встроенное представление URI и URL-адресов, например, в Microdata «itemid», в RDFa 1.1 «ресурс», в 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' => 'Спати', ...]
Несколько свойств можно установить одновременно с помощью метода 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();// добавляем человека, используя цепочку $graph->person('freekmurze') ->givenName('Фрик') ->familyName('Ван дер Хертен') ->alternateName('freekmurze');// добавляем человека с помощью замыкания$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('гаммибир') ->givenName('Том') ->familyName('Witkowski');$graph->person('random')->name('Random Person');// скрываем случайного человека из графика $graph->hide(Person::class, 'random ');echo json_encode($graph);
{"@context":"https://schema.org","@graph":[ {"@type":"Person","givenName":"Фрик","familyName":"Ван дер Хертен","alternateName":"freekmurze"}, {"@type":"Person","givenName":"Себастьян","familyName":"Де Дейн","alternateName":"sebastiandedeyne"}, {"@type":"Person","alternateName":"gummibeer","givenName":"Том","familyName":"Витковски"} ] }
Schema.org допускает многотипизированные объекты — чтобы использовать их с этим пакетом, вы можете использовать класс MultiTypedEntity
, который работает аналогично графу.
$mte = new MultiTypedEntity();$mte->hotelRoom()->name('Президентский люкс');$mte->product()->предложения( Схема::offer() ->name('Одна ночь') ->цена(100000.00) ->priceCurrency('USD') );$mte->product(function (Product $product) {$product->aggregateRating( Схема::aggregateRating() ->лучшийрейтинг(5) ->худший рейтинг(4) ); });echo json_encode($mte);
{ "@context":"https://schema.org", "@type":[ "HotelRoom", "Product" ], "name":"Президентский люкс", "offers":{ "@type":"Предложение", "name":"Одна ночь", "price":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 (MIT). Пожалуйста, смотрите файл лицензии для получения дополнительной информации.