Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Шаблоны (TPL) » Как вывести og:image в шапке через доп. поле?

Как вывести og:image в шапке через доп. поле?


     30.01.2020    Все вопросы » Шаблоны (TPL)    1487

вопрос
Не использую на сайте полную и краткую новость, все сделано через доп. поля.
Движок в версии 13.3 автоматом проставляет микроразметку для социалок только из новостей.

Нужно вывести картинку из доп. поля в og:image

На оф.сайте нашел решение вида , где main_foto мое доп поле.

Но в версии 13.3 оно не работает, выводит в исходном коде вот так

Ответил: леший


Вот плагин от 13.2 (но я посмотрел код, он в 13.3 ни чем не отличается и должен работать)

"НАЗВАНИЕ_ДОПОЛНИТЕЛЬНОГО_ПОЛЯ" - встречается два раза (меняем на своё, в случае автора вопроса заменить надо на "main_foto")
"ПУТЬ_К_КАРТИНКЕ_ЗАГЛУШКЕ" - прописывается на тот случай если дополнительное поле не заполнено (можно прописать например путь к логотипу).
Первоисточник

6 комментариев

maks
Юзер

maks - 30 января 2020 21:49 -

На каких страницах и где? В полной новости в head(т.е. в main)?

arts-amateur
Юзер

arts-amateur - 30 января 2020 22:23 -

Потерся код при публикации, вот это вставляю
<meta property="og:image" content="[xfvalue_image_url_main_foto]">

Вот это получаю
<meta property="og:image" content="">


Да, его только в main в <head> нужно ставить. В fullstory работает, но толку. Социалки подгружают только микроразметку из <head>

TechnicalMan
Юзер

TechnicalMan - 1 февраля 2020 14:31 -

я делаю всегда так:
вставить в main.tpl в раздел <head>
[available=showfull]
<meta property="og:image" content="[xfvalue_image_url_main_foto]">
[/available]

проблем не было. единственная - появилась недавно - эта конструкция не работает при использовании модуля Dle SEO с сайта lazydev

arts-amateur
Юзер

arts-amateur - 1 февраля 2020 14:59 -

Я уже все перепробовал, не работает в любом месте в main.tpl
В полной - все нормально выводит

TeraMoune
Эксперт

TeraMoune - 2 февраля 2020 00:24 -

А какие плагины установлены ? Я решил проверить тоже выводит ли доп поле в main.tpl и у меня так же ничего не вышло. Я начал отключать плагины один за другим и где-то в низу списка заметил как поле появилось.

Попробуйте так же отключать и найдите плагин. На чистом движке я проверил всё выводит как надо.

Тестовый репозиторий установки плагинов: teramoune

sipaj
Юзер

sipaj - 8 июня 2020 21:51 -

У меня был такой случай - заказчик озаботился тем, что на его сайте в основном в meta og:image не попадали картинки. Как оказалось, картинки он добавлял через дополнительное поле и потому в show.full.php они не попадали в обработку. Хотя вроде бы в этом файле есть попытка вытащить что-то из дополнительных полей. Вот код:
$allcontent = $row['full_story'].$row['short_story'].$row['xfields'];

Но картинки в доп.полях не в виде html тега img, потому добавление доп полей в $allcontent не имеет смысла. (Думаю у движка DLE это ещё не осознанный разработчиками баг)
Разрешил проблему заказчика следующим, достаточно универсальным образом.
<?xml version="1.0" encoding="utf-8"?>
<dleplugin>
	<name>Любая картинка из доп. поля в og:image</name>
	<description>Sipaj 2020</description>
	<icon></icon>
	<version>1.0</version>
	<dleversion>13.2</dleversion>
	<versioncompare>greater</versioncompare>
	<upgradeurl></upgradeurl>
	<filedelete>0</filedelete>
	<needplugin></needplugin>
	<mysqlinstall><![CDATA[]]></mysqlinstall>
	<mysqlupgrade><![CDATA[]]></mysqlupgrade>
	<mysqlenable><![CDATA[]]></mysqlenable>
	<mysqldisable><![CDATA[]]></mysqldisable>
	<mysqldelete><![CDATA[]]></mysqldelete>
	<phpinstall><![CDATA[]]></phpinstall>
	<phpupgrade><![CDATA[]]></phpupgrade>
	<phpenable><![CDATA[]]></phpenable>
	<phpdisable><![CDATA[]]></phpdisable>
	<phpdelete><![CDATA[]]></phpdelete>

	<file name="engine/modules/show.full.php">

		<operation action="after">
			<searchcode><![CDATA[$social_tags['image'] = str_replace("/medium/","/",$social_tags['image']);]]></searchcode>
			<replacecode><![CDATA[
		} else {
			$_xpics = explode('||', $row['xfields']);
			if ( count($_xpics) ) {
				foreach ($_xpics AS $_xval) {
					if (preg_match('#\d{4}\-[01]\d\/.+\.(jpe?g|png|gif|webp)#is', $_xval)) {
						$_fival = explode('|', $_xval);
						$_fival = explode(',', $_fival[1]);
						$social_tags['image'] = $config['http_home_url'].'uploads/posts/'.$_fival[0];
						break;
					}
				}
			}
]]></replacecode>

			<searchcount>1</searchcount>

		</operation>

	</file>
</dleplugin>

Алгоритм следующий. Если стандартным способом не удаётся найти картинку в тексте новости, то берутся из новости дополнительные поля (любые поля!) и в них производим поиск первой попавшейся картинки удовлетворяющей regexp условию: \d{4}\-[01]\d\/.+\.(jpe?g|png|gif|webp)
Думаю это лучшее универсальное решение, потому что не надо заморачиваться с указанием имени дополнительного поля. Даже если админ сменит имя доп.поля - плагин всё равно будет работать. Подойдёт как для одиночной картинки, так и для галереи. А для тонкой настройки, когда важно из какого доп.поля брать картинку, подойдёт плагин в топике.

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

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

наверх