Схема обзора продуктов OpenCart 2.3 JSON-LD для каждого цикла? - PullRequest
0 голосов
/ 27 декабря 2018

Я на самом деле не кодер, я сломался и пытаюсь заработать в интернет-магазине.Я открываю интернет-магазин с использованием OpenCart 2.3.0.2 и пытаюсь оптимизировать его до запуска.На этот раз я пытаюсь улучшить его с помощью структурированной разметки данных.Так как у меня нет финансовых возможностей (на данный момент) для покупки модулей, я делаю это сам и изучаю, как работают вещи.

Я пытаюсь создать свою собственную схему Schema for Product, для OpenCart 2.3, но застрял на части обзора.JSON-LD полностью собран и протестирован.

Я пытался разметить, используя JSON-LD, узнал об этом на этой странице и на форуме OpenCart, вот фрагмент проблемного кода (часть обзора):

"review": [
  <?php foreach($reviewss as $review) { ?>
  {
    "@type": "Review",
    "author": "<?php echo $review['author'];?>",
    "datePublished": "<?php echo $review['date_added'];?>",
    "description": "<?php echo $review['text'];?>",
    "name": "<?php echo $review['author'];?>",
    "reviewRating": {
    "@type": "Rating",
    "bestRating": "5",
    "ratingValue": "<?php echo $review['rating'];?>",
    "worstRating": "1"
    }
  } 
  <?php } ?>
]
}

, которые выдают результат:

  "review": [
  {
    "@type": "Review",
    "author": "A Parker",
    "datePublished": "16/12/2018",
    "description": "Wow! Product arrive yesterday and it's well packed. The product is well-designed.",
    "name": "A Parker",
    "reviewRating": {
    "@type": "Rating",
    "bestRating": "5",
    "ratingValue": "5",
    "worstRating": "1"
    }
  } #there should be a comma here after "}". 
  {
    "@type": "Review",
    "author": "David Lay",
    "datePublished": "15/12/2018",
    "description": "Great product! Works as advertised.",
    "name": "David Lay",
    "reviewRating": {
    "@type": "Rating",
    "bestRating": "5",
    "ratingValue": "5",
    "worstRating": "1"
    }
  } 
  ]
}


Here's the correct one. Tested using Google Structured Data Markup.


  "review": [
  {
    "@type": "Review",
    "author": "A Parker",
    "datePublished": "16/12/2018",
    "description": "Wow! Product arrive yesterday and it's well packed. The product is well-designed.",
    "name": "A Parker",
    "reviewRating": {
    "@type": "Rating",
    "bestRating": "5",
    "ratingValue": "5",
    "worstRating": "1"
    }
  },
  {
    "@type": "Review",
    "author": "David Lay",
    "datePublished": "15/12/2018",
    "description": "Great product! Works as advertised.",
    "name": "David Lay",
    "reviewRating": {
    "@type": "Rating",
    "bestRating": "5",
    "ratingValue": "5",
    "worstRating": "1"
    }
  } 
  ]
}

Я не уверен, как это называется на самом деле, я думаю, что проблема - LOOP.Там должна быть запятая, чтобы отделить обзор для каждого поста обзора.Код работает нормально, если есть только 1 отзыв.

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

Я дергал себя за волосы, чтобы решить эту проблему.Я не знаю PHP, но я очень старался, читая форум, на тему цикла и условия if / then, foreach и т. Д. Но с трудом могу это понять.

Я не уверен, какзадать вопрос, может быть Как сделать цикл публикации обзоров продуктов в OpenCart 2.3 для схемы JSON-LD? Любая помощь очень ценится.

Ответы [ 2 ]

0 голосов
/ 01 сентября 2019

Попробуйте это

"review": [

  <?php foreach($reviews as $key => $review); { ?>
  {
    "@type": "Review",
    "author": "<?php echo $review['author'];?>",
    "datePublished": "<?php echo $review['date_added'];?>",
    "description": "<?php echo $review['text'];?>",
    "name": "<?php echo $review['author'];?>",
    "reviewRating": {
    "@type": "Rating",
    "bestRating": "5",
    "ratingValue": "<?php echo $review['rating'];?>",
    "worstRating": "1"
    }
  } 
  <?php if ($key != (count($reviews) - 1)){ ?>,<?php } ?><?php } ?>
]
}
0 голосов
/ 27 декабря 2018

почему бы не использовать json_encode()?

Схема JSON-LD Product выглядит совершенно иначе:

<script type="application/ld+json">
{
  "@context": "http://schema.org",
  "@type": "Product",
  "aggregateRating": {
    "@type": "AggregateRating",
    "ratingValue": "3.5",
    "reviewCount": "11"
  },
  "description": "0.7 cubic feet countertop microwave. Has six preset cooking categories and convenience features like Add-A-Minute and Child Lock.",
  "name": "Kenmore White 17\" Microwave",
  "image": "kenmore-microwave-17in.jpg",
  "offers": {
    "@type": "Offer",
    "availability": "http://schema.org/InStock",
    "price": "55.00",
    "priceCurrency": "USD"
  },
  "review": [{
      "@type": "Review",
      "author": "Ellie",
      "datePublished": "2011-04-01",
      "description": "The lamp burned out and now I have to replace it.",
      "name": "Not a happy camper",
      "reviewRating": {
        "@type": "Rating",
        "bestRating": "5",
        "ratingValue": "1",
        "worstRating": "1"
      }
    }, {
      "@type": "Review",
      "author": "Lucas",
      "datePublished": "2011-03-25",
      "description": "Great microwave for the price. It is small and fits in my apartment.",
      "name": "Value purchase",
      "reviewRating": {
        "@type": "Rating",
        "bestRating": "5",
        "ratingValue": "4",
        "worstRating": "1"
      }
  }]
}
</script>

например:

$data = (object) array(
    "@context" => "http://schema.org",
    "@type" => "Product",
    "aggregateRating" => (object) array(
        "@type": "AggregateRating",
        "ratingValue" => "3.5",
        "reviewCount" => "11"
    ),
    "description" => "0.7 cubic feet countertop microwave. Has six preset cooking categories and convenience features like Add-A-Minute and Child Lock.",
    "name" => "Kenmore White 17\" Microwave",
    "image"=> "kenmore-microwave-17in.jpg",
    "offers" => (object) array(
        "@type": "Offer",
        "availability": "http://schema.org/InStock",
        "price": "55.00",
        "priceCurrency": "USD"
    ),
    "review" => array()
);

foreach($reviews as $review) {
    array_push($data->review, $review);
}

echo '<script type="application/ld+json">';
echo json_encode($data);
echo '</script>';

также см. инструмент для тестирования структурированных данных .

...