Схема обзора продукта OpenCart 2.3 JSON-LD для каждого цикла?

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

Я пытаюсь создать свой собственный модуль схемы для продукта для 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? Любая помощь приветствуется.


person JuliePera    schedule 27.12.2018    source источник


Ответы (2)


почему бы не использовать 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>';

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

person Martin Zeitler    schedule 27.12.2018
comment
Спасибо! Но исходный код работает, проблема только в том, что есть несколько отзывов. Кроме того, я не знаю, как реализовать ваше предложение выше. Я полностью построил часть json-ld, как я упоминал выше, я думаю, что ей нужен только файл comma. Будет ли ваш код работать с OC 2.3? - person JuliePera; 27.12.2018
comment
@JuliePera предоставленный вами код недействителен и не анализируется (не соответствует требуемому формату, поэтому не работает). мой пример дает правильный вывод и рассматривает возможность добавления отзывов. очевидно, вам нужно будет заменить строки значениями. - person Martin Zeitler; 27.12.2018
comment
Код, который я разместил, был просто фрагментом, взятым из полностью собранного файла json-ld. Я упомянул об этом выше. Я разместил только ту часть кода, где есть проблема. - person JuliePera; 27.12.2018

Попробуй это

"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 } ?>
]
}
person camingout    schedule 01.09.2019