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
или в подвале, стандарт разрешает.
Комментарии
Попиарю свой кастомчик, может кому пригодится. Все тоже самое что в статье, только вынесено в хуки. Когда нужно много такой разметки сделать для разных страниц, типов материалов позволит все организованно держать в 1 месте.
Сори что даблпост, нельзя редактировать. В общем накидал по своей ссылке выше тоже парочку примеров, может тоже кому пригодится. Там также есть пример для отзывов и статей.
лучше использовать hook_process_html, ну а ещё лучше переместить всё в подвал перед
</body>
Окей, спасибо, учту. Запишу себе переделать. Вот только я не понял на счет переноса в футер. Лучше всего, получается, в $page_bottom запихать?
да
При работе с
entity_metadata_wrapper
рекомендуется оборачивать код вtry...catch
Оставить комментарий