Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Хаки » Как изменить ссылку на картинку разметки OG?

Как изменить ссылку на картинку разметки OG?


     27.07.2017    Open Graph    Все вопросы » Хаки    1821

вопрос
Как известно, для разметки Open Graph ссылка на картинку берется из {image-1), что при использовании доп. поля "Загружаемое изображение" не есть правильным. Как можно это исправить, чтобы брало ссылку не из тега, а из доп. поля?

Ответил: yeahga


В файле engine/modules/show.full.php

Найти и удалить строку:
if ( count($images) ) $social_tags['image'] = $images[0];


Далее дважды найти строку:
if($value[3] == "image") {


И выше вставить:
if($thumb_url) $social_tags['image'] = $thumb_url;
elseif ($img_url) $social_tags['image'] = $img_url;
else $social_tags['image'] = "ссылка на заглушку";

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

hakypuhbiu
Юзер

hakypuhbiu - 9 августа 2017 20:11 -

Это не верно, тут код на произвольную картинку, если к примеру есть 2 поля, первое на постер, а второе на галерею, то он берет произвольно, а должен быть прописан OG на определенное поле как правило это на главную картинку новости поле poster к примеру.

yeahga
Юзер

yeahga - 9 августа 2017 23:15 -

Ну так пропиши для определенного поля:
$xfieldsdata = xfieldsdataload( $row['xfields'] );

if($xfieldsdata['имя нужного доп. поля с картинкой'] ) {
			$path_parts = @pathinfo($xfieldsdata['имя нужного доп. поля с картинкой']);

			if( file_exists(ROOT_DIR . "/uploads/posts/" .$path_parts['dirname']."/thumbs/".$path_parts['basename']) ) {
				$social_tags['image'] = $config['http_home_url'] . "uploads/posts/" . $path_parts['dirname']."/thumbs/".$path_parts['basename'];
			} else {
				$social_tags['image'] = $config['http_home_url'] . "uploads/posts/" . $path_parts['dirname']."/".$path_parts['basename'];
			}					
			
} else  $social_tags['image'] = "ссылка на заглушку";

yeahga
Юзер

yeahga - 5 сентября 2017 19:22 -

Вот более корректный ответ.
Найти:
		if( count($xfields) ) {
			
			$xfieldsdata = xfieldsdataload( $row['xfields'] );

Ниже вставить:
			if($xfieldsdata['имя нужного доп. поля с картинкой'] ) {
			$path_parts = @pathinfo($xfieldsdata['имя нужного доп. поля с картинкой']);

			if( file_exists(ROOT_DIR . "/uploads/posts/" .$path_parts['dirname']."/thumbs/".$path_parts['basename']) ) {
				$social_tags['image'] = $config['http_home_url'] . "uploads/posts/" . $path_parts['dirname']."/thumbs/".$path_parts['basename'];
			} else {
				$social_tags['image'] = $config['http_home_url'] . "uploads/posts/" . $path_parts['dirname']."/".$path_parts['basename'];
			}					
			
			} else  $social_tags['image'] = "ссылка на заглушку";

Railway_Academy
Юзер

Railway_Academy - 5 сентября 2017 20:06 -

а почему именно так? Почему такой большой код и еще обращение как базе есть

yeahga
Юзер

yeahga - 5 сентября 2017 21:00 -

Где обращение к базе??
Ok, можно сделать так,
это
					if( $value[12] AND file_exists(ROOT_DIR . "/uploads/posts/" .$path_parts['dirname']."/thumbs/".$path_parts['basename']) ) {
						$thumb_url = $config['http_home_url'] . "uploads/posts/" . $path_parts['dirname']."/thumbs/".$path_parts['basename'];
						$img_url = $config['http_home_url'] . "uploads/posts/" . $path_parts['dirname']."/".$path_parts['basename'];
					} else {
						$img_url = 	$config['http_home_url'] . "uploads/posts/" . $path_parts['dirname']."/".$path_parts['basename'];
						$thumb_url = "";
					}

Заменить на это
					if( $value[12] AND file_exists(ROOT_DIR . "/uploads/posts/" .$path_parts['dirname']."/thumbs/".$path_parts['basename']) ) {
						$thumb_url = $config['http_home_url'] . "uploads/posts/" . $path_parts['dirname']."/thumbs/".$path_parts['basename'];
						$img_url = $config['http_home_url'] . "uploads/posts/" . $path_parts['dirname']."/".$path_parts['basename'];
						$social_tags['image'] = $thumb_url;
					} else {
						$img_url = 	$config['http_home_url'] . "uploads/posts/" . $path_parts['dirname']."/".$path_parts['basename'];
						$thumb_url = "";
						$social_tags['image'] = $img_url;
					}

Удалив
if ( count($images) ) $social_tags['image'] = $images[0];

Все правки в файле engine/modules/show.full.php

yeahga
Юзер

yeahga - 6 сентября 2017 08:40 -

Начиная с 11-ой версии DLE вообще можешь просто вставить код:
[available=showfull][xfgiven_x]<meta property="og:image" content="[xfvalue_thumb_url_x]">[/xfgiven_x][/available]

в шаблон main.tpl внутрь тега <head>

где x - имя нужного дополнительного поля с картинкой

Не забудь в файле engine/modules/show.full.php удалить или закомментировать строку
if ( count($images) ) $social_tags['image'] = $images[0];


Вот и всё)

oxana
Юзер

oxana - 14 июля 2018 03:49 -

А как сделать такую последовательность:

Первым проверяется дополнительное поле "Загружаемое изображение".
Если заполнено, то в Open Graph идет ссылка на оригинальное (самое большое) изображение из этого поля.

Если дополнительное поле "Загружаемое изображение" не заполнено, то проверяется наличие картинок тексте в новости. Если есть, то в Open Graph идет ссылка на оригинальное изображение первой картинки найденной в тексте.

Если в тексте новости нет изображений, то проверяется наличие изображений в коротком описании. Если есть, то то в Open Graph идет ссылка на оригинальное изображение картинки из короткого описания.

Если в коротком описании нет изображений, то в Open Graph идет заглушка.

oxana
Юзер

oxana - 18 июля 2018 07:25 -

Цитата: yeahga
Начиная с 11-ой версии DLE вообще можешь просто вставить код:
[available=showfull][xfgiven_x]<meta property="og:image" content="[xfvalue_thumb_url_x]">[/xfgiven_x][/available]

в шаблон main.tpl внутрь тега <head>

Никто не подсказывает и пришлось сделать комбинацию из двух способов
В файле engine/modules/show.full.php сделала проверку допполя "Загружаемое изображение" и когда оно не пустое то срабатывает код в шаблоне main.tpl

Что-то у меня не получается вставить в сообщение код

yeahga
Юзер

yeahga - 5 сентября 2017 21:05 -

Только две строчки дописал, одну удалил. Не большой код?)

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

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

наверх