xandeadx.ru Блог музицирующего веб-девелопера

Drupal → Добавить на страницу данные о товаре в формате JSON-LD

Опубликовано в

Один из способов добавления данных о товаре в формате JSON-LD в head страницы:

/**
 * Implements hook_node_view().
 */
function hook_node_view($node, $view_mode, $langcode) {
  if ($node->type == 'product_display' && $view_mode == 'full') {
    $product_wrap = entity_metadata_wrapper('node', $node)->field_product;
    $product_price = $product_wrap->commerce_price->value();
 
    $jsonld = array(
      '@context' => 'http://schema.org/',
      '@type' => 'Product',
      'name' => $product_wrap->title->value(),
      'sku' => $product_wrap->sku->value(),
      'image' => $product_wrap->field_image->file->url->value(),
      'offers' => array(
        '@type' => 'Offer',
        'price' => commerce_currency_amount_to_decimal($product_price['amount'], $product_price['currency_code']),
        'priceCurrency' => $product_price['currency_code'],
      ),
    );
 
    drupal_add_html_head(array(
      '#tag' => 'script',
      '#attributes' => array('type' => 'application/ld+json'),
      '#value' => drupal_json_encode($jsonld),
    ), 'script_jsonld_product');
  }
}

Ф-ю drupal_add_html_head() можно вызывать везде до выполнения template_process_html().

Конечно ничто не мешает вывести это прямо в node--product-display.tpl.php или в подвале, стандарт разрешает.

Описание схемы Product.

Написанное актуально для Drupal 7
Похожие записи

Комментарии RSS

Попиарю свой кастомчик, может кому пригодится. Все тоже самое что в статье, только вынесено в хуки. Когда нужно много такой разметки сделать для разных страниц, типов материалов позволит все организованно держать в 1 месте.

Сори что даблпост, нельзя редактировать. В общем накидал по своей ссылке выше тоже парочку примеров, может тоже кому пригодится. Там также есть пример для отзывов и статей.

лучше использовать hook_process_html, ну а ещё лучше переместить всё в подвал перед </body>

Окей, спасибо, учту. Запишу себе переделать. Вот только я не понял на счет переноса в футер. Лучше всего, получается, в $page_bottom запихать?

да

При работе с entity_metadata_wrapper рекомендуется оборачивать код в try...catch

Оставить комментарий

Содержимое этого поля является приватным и не будет отображаться публично. Если у вас есть аккаунт в Gravatar, привязанный к этому e-mail адресу, то он будет использован для отображения аватара.
  • Адреса страниц и электронной почты автоматически преобразуются в ссылки.
  • Доступные HTML теги: <a> <i> <b> <strong> <code> <ul> <ol> <li> <blockquote> <em> <s>
  • Строки и параграфы переносятся автоматически.
  • Подсветка кода осуществляется с помощью тегов: <code>, <css>, <html>, <ini>, <javascript>, <sql>, <php>. Поддерживаемые стили выделения кода: <foo>, [foo].

Подробнее о форматировании