Поместите значения из сложного слоя данных в переменную GTM - PullRequest
0 голосов
/ 30 апреля 2018

У меня нет проблем с созданием переменных GTM из «простого» dataLayer, пример:

"transactionEntity": "ORDER",
"transactionId": "193552702",

Но не могу понять, как извлечь значения из объекта. В основном мне нужно взять значения из этого dataLayer:

var dataLayer = [({
    "productReviews": [{
        "name": "Donna S. - Stockton, CA",
        "datePublished": "2016-01-01",
        "ratingValue": "5",
        "reviewBody": "Lorem ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua."
    }, {
        "name": "Sharon N. - Belfast, UK",
        "datePublished": "2016-02-01",
        "ratingValue": "5",
        "reviewBody": "Sed ut perspiciatis unde omnis iste natus error sit voluptatem accusantium doloremque laudantium, totam rem aperiam."
    }, {
        "name": "Elizabeth M. - Richmond, VA",
        "datePublished": "2016-03-01",
        "ratingValue": "5",
        "reviewBody": "At vero eos et accusamus et iusto odio dignissimos ducimus qui blanditiis praesentium voluptatum deleniti atque corrupti quos."
    }],
})]

И передайте значения name, datePublished, ratingValue, reviewBody в следующую переменную GTM:

<script type="application/ld+json">
{
    "review": [{
        "@type": "Review",
        "author": {
            "@type": "Person",
            "name": ""
        },
        "datePublished": "",
        "reviewRating": {
            "@type": "Rating",
            "ratingValue": "",
            "bestRating": "5",
            "worstRating": "1"
        },
        "reviewBody": ""
    }, {
        "@type": "Review",
        "author": {
            "@type": "Person",
            "name": ""
        },
        "datePublished": "",
        "reviewRating": {
            "@type": "Rating",
            "ratingValue": "",
            "bestRating": "5",
            "worstRating": "1"
        },
        "reviewBody": ""
    }, {
        "@type": "Review",
        "author": {
            "@type": "Person",
            "name": ""
        },
        "datePublished": "",
        "reviewRating": {
            "@type": "Rating",
            "ratingValue": "",
            "bestRating": "5",
            "worstRating": "1"
        },
        "reviewBody": ""
    }]
}
</script>

ОБНОВЛЕНИЕ: согласно ответу vinoaj, я сделал следующее:

<script type="application/ld+json">
{
    "@context": "http://schema.org",
    "@type": "Product",
    "name": "{{dataLayerProductName}}",
    "sku": "{{dataLayerProductId}}",
    "aggregateRating": {
        "@type": "AggregateRating",
        "ratingValue": "{{dataLayerRatingValue}}",
        "reviewCount": "{{dataLayerReviewCount}}"
    },
    "review": [
    var productReviews = {{dataLayerProductReviews}};
    for (i = 0, l = productReviews.length; i < l; i++){
        var r = productReviews[i];
        {
            "@type": "Review",
                "author": {
                    "@type": "Person",
                    "name": "r.name"
                },
                "datePublished": "r.datePublished",
                "reviewRating": {
                    "@type": "Rating",
                    "ratingValue": "r.ratingValue",
                    "bestRating": "5",
                    "worstRating": "1"
                },
                "reviewBody": "r.reviewBody"
        },
    }]
}
</script>

но это дает и ошибку " Синтаксическая ошибка: ожидаемое значение, объект или массив ."

p.s. Я знаю, что обновление вопроса не является правильным способом сделать это, но нет способа вставить код в комментарии в удобочитаемой форме.

1 Ответ

0 голосов
/ 01 мая 2018

Для работы с объектами, переданными на слой данных, выполните следующие действия.

Шаг 1

Создание переменной уровня данных для ключа productReviews.

Назовите вашу переменную DLV - productReviews или что-то подобное, простое, но описательное.

Шаг 2

Создайте пользовательский тег HTML, который что-то делает с вашим объектом. В приведенном ниже примере я просто выводю значения каждого обзора. В вашем случае вы можете изменить приведенное ниже, чтобы сгенерировать объект JSON + LD.

<script>
  var productReviews = {{DLV - productReviews}};
  for (i = 0, l = productReviews.length; i < l; i++){
    var r = productReviews[i];
    console.log("GTM says: ", r.name, r.datePublished, r.ratingValue, r.reviewBody);
  }
</script>

или попробуйте создать объект JSON-LD в соответствии с вашим примером:

<script>
  var reviewArr = [];
  var productReviews = {{DLV - productReviews}};
  for (i = 0, l = productReviews.length; i < l; i++){
    var r = productReviews[i];
    reviewArr.push({
        "@type": "Review",
        "author": {
            "@type": "Person",
            "name": r.name
        },
        "datePublished": r.datePublished,
        "reviewRating": {
            "@type": "Rating",
            "ratingValue": r.ratingValue,
            "bestRating": "5",
            "worstRating": "1"
        },
        "reviewBody": r.reviewBody
    })
  }
</script>


<script type="application/ld+json">
{
    "@context": "http://schema.org",
    "@type": "Product",
    "name": "{{dataLayerProductName}}",
    "sku": "{{dataLayerProductId}}",
    "aggregateRating": {
        "@type": "AggregateRating",
        "ratingValue": "{{dataLayerRatingValue}}",
        "reviewCount": "{{dataLayerReviewCount}}"
    },
    "review": reviewArr
}
</script>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...