Изображение для RSS турбо-страниц

Здравствуйте!

Никак не могу получить изображение для вставки в шапку турбо-страницы через RSS.

Нужно изображение из хедера страницы, которое вставляется туда с помощью кода:
{set $image = $_modx->runSnippet('ms2Gallery', ['tpl' => '@INLINE {$files.0.header}','limit' => 1, 'sortby' => 'rank'])}
<figure class="listar-featuredimg">{$image ? "<img src=\"{$image}\" alt=\"{$_modx->resource.pagetitle}\">" : ""}</figure>
Пример страницы turlog.ru/travel-notes/czvetyi-ludorvaya.html

RSS генерю с помощью общеизвестного способа в чанке:
<item turbo="true">
    <link>{$_modx->config.site_url ~ $id | url}</link>
    <title>{'!rssText' | snippet : [ 'cnt' => ( $longtitle ?: $pagetitle ) ]}</title>
    <pubDate>{$publishedon | date : 'D, d M Y G:i:s +0300'}</pubDate>
    <turbo:content>
        <![CDATA[
            <header>
                <figure>
                <img src=" " alt=" " />
                </figure>
                <h1>{($longtitle ?: $pagetitle)}</h1>
            </header>
            {'!rssCDATA' | snippet : [ 'cnt' => ( $id | resource : 'content' | replace : '"assets/' : ('"' ~ $_modx->config.site_url ~ 'assets/') ) ]}
        ]]>
    </turbo:content>
</item>
Подскажите, как мне поставить сюда это изображение из хедера?
Дмитрий
06 декабря 2019, 14:11
modx.pro
1 042
0

Комментарии: 8

Андрей
06 декабря 2019, 17:38
1
+1
Использовать leftJoin:
{$_modx->runSnippet('pdoResources', [
	...params...
	'loadModels' => 'ms2gallery',
	'leftJoin' => [
		'Image' => [
			'class' => 'msResourceFile',
			'on' => 'modResource.id = Image.resource_id AND Image.parent = 0 AND Image.rank = 0',
		],
		'Thumb' => [
			'class' => 'msResourceFile',
			'on' => 'Image.id = Thumb.parent AND Thumb.path LIKE "%afisha%"', // здесь afisha это название thumbnails из источника файлов, заменить на своё.
		]
	],
	'select' => [
		'modResource' => '*',
		'Image' => 'Image.url as image',
		'Thumb' => 'Thumb.url as thumb',
	]
])}
    Дмитрий
    09 декабря 2019, 10:55
    0
    Thumb обязательно?

    Я правильно понимаю, что этот код вставляется в страницу, формирующую xml, а передается значение Image чанку? Или этот код вставить в чанк, перед вызовом значения?

    params — это какие-то мои значения для вызова чанка?
      Дмитрий
      09 декабря 2019, 11:35
      0
      Код страницы такой:

      <?xml version="1.0" encoding="utf-8"?>
      <rss xmlns:yandex="http://news.yandex.ru" xmlns:media="http://search.yahoo.com/mrss/" xmlns:turbo="http://turbo.yandex.ru" version="2.0">
          <channel>
              <title>[[++site_name]]</title>
              <link>[[++site_url]]</link>
              <description>[[*description]]</description>
              <language>ru</language>
              [[!pdoResources?
                  &parents=`3, 22, 47, 197`
                  &tpl=`tpl.yandex.turbo.rss`
                  &limit=`0`
              ]]
          </channel>
      </rss>
      Не совсем понимаю где надо использовать предлженный вами код.
        Андрей
        09 декабря 2019, 12:44
        0
        Я правильно понимаю, что этот код вставляется в страницу, формирующую xml, а передается значение Image чанку?
        Да, всё верно, это код в страницу формирующую xml, т.е. вызов pdoResources заменить на:
        {$_modx->runSnippet('!pdoResources', [
        	'parents' => '3,22,47,197',
                'tpl' => 'tpl.yandex.turbo.rss',
                'limit' => 0,
        	'loadModels' => 'ms2gallery',
        	'leftJoin' => [
        		'Image' => [
        			'class' => 'msResourceFile',
        			'on' => 'modResource.id = Image.resource_id AND Image.parent = 0 AND Image.rank = 0',
        		],
        		'Thumb' => [
        			'class' => 'msResourceFile',
        			'on' => 'Image.id = Thumb.parent AND Thumb.path LIKE "%afisha%"', // здесь afisha это название thumbnails из источника файлов, заменить на своё.
        		]
        	],
        	'select' => [
        		'modResource' => '*',
        		'Image' => 'Image.url as image',
        		'Thumb' => 'Thumb.url as thumb',
        	]
        ])}

        Thumb обязательно?
        Нет, если миниатюра не нужна, можно убрать. В чанке соответственно вставляем или thumb или image:
        <figure>
            <img src="{$image}" alt=" " />
        </figure>
          Дмитрий
          09 декабря 2019, 13:26
          0
          Не работает :((
            Андрей
            09 декабря 2019, 13:58
            0
            Код протестирован, т.к. взят с действующего сайта и 100% работает, только параметры из вашей страницы подставил.

            Если есть возможность — присылайте доступы в телеграм или на почту (кнопка и контакт в профиле), посмотрю из за чего не работает.
              Дмитрий
              09 декабря 2019, 14:07
              0
              Поправил синтаксис (лишние запятые) — все ОК. Спасибо!
              Если вдруг все «испортится», воспользуюсь вашим предложением, напишу в личку:)
      Сергей
      16 января 2022, 21:56
      0
      Добрый день.
      Не подскажете, как сделать вывод изображений в RSS, добавленных в статьи через плейсхолдеры [[+ms2g.1]], [[+ms2g.2]]..?
      Чанк:
      [[!pdoResources?
      	&parents=`11`
      	&class=`modResource`
      	&loadModels=`ms2gallery`
      	&tpl=`test4567.tpl`
      	&leftJoin=`{
      		"Image": {
      			"class": "msResourceFile",
      			"on": "modResource.id = Image.resource_id AND Image.parent = 0 AND Image.rank = 0"
      		},
      		"Thumb": {
      			"class": "msResourceFile",
      			"on": "Image.id = Thumb.parent AND Thumb.path LIKE '%big%'"
      		}
      	}`
      	&select=`{
      		"modResource": "*",
      		"Image": "Image.url as image",
      		"Thumb": "Thumb.url as big"
      	}`
      	&showLog=`1`
      	&limit=`0`
      	&groupby=`modResource.id`
      ]]
      В итоге:
      — Если вызвать без шаблона, то изображения в статье будут выглядеть так:
      [[+ms2g.1]]
      [[+ms2g.2]]
      — Если добавить изображения в ресурс RSS (во вкладке Галерея), то они будут выводиться во всех статьях.
      А нужны изображения статей.
        Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.
        8