Как передать данные из переменной twig в ld+json?

Доброго времени суток!
Пытаюсь к карточке товара opencart-3 модификатором прикрутить микроразметку application/ld+json.
И вроде всё работает, но только до подключения переменной {{ description_short }} в тексте которой встречаются "(кавычки).
Как экранировать текст переменной twig - {{ description_short }}, чтобы вывести его в application/ld+json ?

<file path='catalog/view/theme/*/template/product/product.twig'>
		<operation  error="skip" info=''>
			<search><![CDATA[
				<div class="breadcrumbs">
			]]></search>
			<add position='before'><![CDATA[
				<script type="application/ld+json">
				{
				  "@context": "http://schema.org/",
				  "@type": "Product",
				  "name": "{{heading_title}}",
				  "image": "{{popup}}",
				  "brand": "{{ manufacturer }}",
				  "description": "{{ description_short }}",
				  "offers": {
					  "@type": "Offer",
						"priceCurrency": "BYN",
						{% if price %}"price": "{{ price|trim(' р.') }}",
						{% else %}"price": "{{ special|trim('р.') }}",{% endif %}
						"itemCondition" : "http://schema.org/NewCondition",
						"availability" : "{{ stock }}"
				  }
				}
				</script>
			]]></add>
		</operation>
	</file>


обновление:***********************
Продолжая эксперименты сделал так - {{ data|json_encode(description_short) }} . 500-ую ошибку это не вызвало, но теперь в этом поле выводит предупреждение - Warning: json_encode() expects parameter 2 to be integer, string given in /system/library/template/Twig/Extension/Core.php on line 664
  • Вопрос задан
  • 840 просмотров
Решения вопроса 1
@AlexSF Автор вопроса
Решение нашлось при очередном изучении документации twig - Фильтр escape .
Фильтр escape экранирует строку для вывода (использует php функцию htmlspecialchars() для html). Он поддерживает различные настройки в зависимости от контекста шаблона. По умолчанию экранируется HTML


{{ description_short|escape }}
<?xml version="1.0" encoding="UTF-8"?>
<modification>
	<code>microdata_json</code>
	<name><![CDATA[Microdata in JSON OC 3.0.x]]></name>
	<version><![CDATA[1.0]]></version>
	<author><![CDATA[Alex]]></author>
	<date><![CDATA[2018.02.01]]></date>
	<file path='catalog/view/theme/*/template/product/product.twig'>
		<operation  error="skip" info=''>
			<search><![CDATA[
				<div class="breadcrumbs">
			]]></search>
			<add position='before'><![CDATA[
				<script type="application/ld+json">
				{
				  "@context": "http://schema.org/",
				  "@type": "Product",
				  "name": "{{heading_title}}",
				  "image": "{{popup}}",
				  "brand": "{{ manufacturer }}",
				  "description": "{{ description_short|escape }}",
				  "offers": {
					  "@type": "Offer",
						"priceCurrency": "BYN",
						{% if price %}"price": "{{ price|trim(' р.') }}",
						{% else %}"price": "{{ special|trim('р.') }}",{% endif %}
						"itemCondition" : "http://schema.org/NewCondition",
						"availability" : "{{ stock }}"
				  }
				}
				</script>
			]]></add>
		</operation>
	</file>
	<file path='catalog/view/theme/*/template/common/header.twig'>
		<operation  error="skip" info=''>
			<search><![CDATA[
				</head>
			]]></search>
			<add position='before'><![CDATA[
				<script type="application/ld+json">
				{
				  "@context": "http://schema.org",
				  "@type": "Store",
				  "name": "Название сайта",
				  "image": "ссыль на лого",
				  "@id": "ссыль на главную сайта",
				  "url": "ссыль на главную сайта",
				  "telephone": "+телефон",				  
				  "priceRange": "от 10 р. до 2 700 р.",
				  "address": {
				    "@type": "PostalAddress",
				    "streetAddress": "адрес",
				    "addressLocality": "город",
				    "postalCode": "212029",
				    "addressCountry": "BY"
				  },
				  "geo": {
				    "@type": "GeoCoordinates",
				    "latitude": 53.865026,
				    "longitude": 30.3307494
				  },
				  "openingHoursSpecification": {
				    "@type": "OpeningHoursSpecification",
				    "dayOfWeek": [
				      "Monday",
				      "Tuesday",
				      "Wednesday",
				      "Thursday",
				      "Friday",
				      "Saturday",
				      "Sunday"
				    ],
				    "opens": "09:00",
				    "closes": "21:00"
				  }
				}
				</script>
				<script type="application/ld+json">
				{
				  "@context": "http://schema.org/",
				  "@type": "WebSite",
				  "name": "Название сайта",
				  "url": "ссыль на главную сайта"				  
				}
				</script>
			]]></add>
		</operation>
	</file>
</modification>
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы