Перейти до вмісту
Пошук в
  • Детальніше...
Шукати результати, які ...
Шукати результати в ...

Картинка в facebook после нажатиия кнопки like


ravick

Recommended Posts

Появилась задача сделать так, чтобы при нажатии кнопки Like на странице новости на сайте (ocStore 0.2.0), в Facebook на странице пользователя отображалась именно картинка из новости, а не какая-либо другая на странице.

Решается это с помощью добавления строчки

<meta property="og:image" content=thumbnail_image" />

в <head>, где значение аттрибута content - ссылка на искомое изображение.

Вопрос в том как вытащить переменную $thumb (ссылка на изображение) из файла контроллера модуля news.php в header.php, иначе он пишет ошибку, типа такая переменная неопределена.

Надіслати
Поділитися на інших сайтах


попробуйте добавить вот это в контроллер шапки

if (isset($this->request->get['product_id'])) {
   $this->data['product_id'] = $this->request->get['product_id'];
   $this->load->model('catalog/product');
   $product_info = $this->model_catalog_product->getProduct($this->request->get['product_id']);
   $this->data['product_name'] = $product_info['name'];
   $this->data['product_url'] = $this->url->link('product/product', 'product_id=' . $product_info['product_id']);
   $this->load->model('tool/image');
   if ($product_info['image']) {
    $this->data['product_thumb'] = $this->model_tool_image->resize($product_info['image'], $this->config->get('config_image_thumb_width'), $this->config->get('config_image_thumb_height'));
   } else {
    $this->data['product_thumb'] = '';
   }
  } else {
   $this->data['product_id'] = 0;
  }
а вот это в тпл шапки

<meta property="og:title" content="<?php echo $product_name; ?>" />
<meta property="og:url" content="<?php echo $product_url; ?>" />
<meta property="og:image" content="<?php echo $product_thumb; ?>" />
<meta property="og:site_name" content="site.com" />
<meta property="fb:admins" content=""/>

теоритически все заработает включая другие штуки для соц сетей

  • +1 2
Надіслати
Поділитися на інших сайтах

Спасибо огромное, всё заработало!)

только вместо строчки

$this->data['product_url'] = $this->url->link('product/product', 'product_id=' . $product_info['product_id']);
из-за которой выдавалась ошибка, написал

$this->data['product_url'] = $this->model_tool_seo_url->rewrite(HTTP_SERVER . 'index.php?route=product/product' . '&product_id=' . $product_info['product_id']);

С добавлением картинок из новостей тоже разобрался, сделал по аналогии.

Надіслати
Поділитися на інших сайтах


у меня просто эти куски кода были в одном из модулей и я долго думал нафига они ... пока не нагуглил что такое

<meta property="og:image"

Надіслати
Поділитися на інших сайтах

  • 1 month later...

я все так же сделал и все работает, но есть один косяк - в журнла ошибок все время пишутся ошибки:

2012-02-26 23:51:39 - PHP Notice: Undefined variable: product_name in /var/www/vhosts/mysite.ru/httpdocs/catalog/view/theme/default/template/common/header.tpl on line 29

2012-02-26 23:51:39 - PHP Notice: Undefined variable: product_url in /var/www/vhosts/mysite.ru/httpdocs/catalog/view/theme/default/template/common/header.tpl on line 30

2012-02-26 23:51:39 - PHP Notice: Undefined variable: product_thumb in /var/www/vhosts/mysite.ru/httpdocs/catalog/view/theme/default/template/common/header.tpl on line 31

как я понимаю, это возникает, потому что картинки же генерятся только для продуктовой страницы, а на всех остальных возникает ошибка. можно это как-то убрать? не знаю, мешает работе или нет, но как-то "некрасиво". или забить?

Надіслати
Поділитися на інших сайтах


  • 1 year later...

Чтобы без нотайсов: в контроллере делай

$this->data['is_product_page'] = true;

А в шаблоне оберни в:

<?php if ($is_product_page) { ?>

...

<?php } ?>

 

на главной

<meta property="og:title" content="<b>Notice</b>: Undefined variable: product_name in <b>/home/***/***/vqmod/vqcache/vq2-catalog_view_theme_*_template_common_header.tpl</b> on line <b>5</b>" />
<meta property="og:url" content="<b>Notice</b>: Undefined variable: product_url in <b>/home/***/***/vqmod/vqcache/vq2-catalog_view_theme_*_template_common_header.tpl</b> on line <b>6</b>" />
<meta property="og:image" content="<b>Notice</b>: Undefined variable: product_thumb in <b>/home/***/***/vqmod/vqcache/vq2-catalog_view_theme_*_template_common_header.tpl</b> on line <b>7</b>" />
<meta property="og:site_name" content="site.com" />

В коде страниц товаров всё появляется (og:url content=картинке_товара_в_кеше), но ВКонтакт всё равно крепит логотип..

PS: Так и не понял смысл $is_product_page, если и так запросы что на главной, что на странице товара, в хедере одинаковые?

      Другое дело, если бы $is_product_page только на странице продукта запрашивало. Более того, содержимое запроса на главной отсутствует в принципе, вот и выползают ошибки

Может и не в хэдер вовсе пихать? ))) а в product.tpl. И тогда перед блоком продукта будет инфа о его картинке. Или контакту принципиально брать между хэдтегов?Судя по тому, что берёт логотип - нет.

Надіслати
Поділитися на інших сайтах


  • 3 weeks later...
  • 10 months later...

Я в своем случае, чтобы на странице новости корректно назначался og:image по картинке в новости, добавил в контроллер новостей строчку после назначения картинки:

$this->document->setOgImage($this->data['thumb']);

Надіслати
Поділитися на інших сайтах


  • 1 year later...

Я в своем случае, чтобы на странице новости корректно назначался og:image по картинке в новости, добавил в контроллер новостей строчку после назначения картинки:

$this->document->setOgImage($this->data['thumb']);

Можете подсказать в какой файл и после какой строки сделали эту вставку?

Надіслати
Поділитися на інших сайтах

Вот мой контроллер новостей:

<?php
class ControllerModuleNews extends Controller {
	private $_name = 'news';

	protected function index($setting) {
		static $module = 0;

		$this->language->load('module/' . $this->_name);

      	$this->data['heading_title'] = $this->language->get('heading_title');

		$this->document->addStyle('catalog/view/theme/sstore/style/news.css');

		$this->data['customtitle'] = $this->config->get($this->_name . '_customtitle' . $this->config->get('config_language_id'));
		$this->data['header'] = $this->config->get($this->_name . '_header');

		if (!$this->data['customtitle']) { $this->data['customtitle'] = $this->data['heading_title']; }
		if (!$this->data['header']) { $this->data['customtitle'] = ''; }

		$this->data['icon'] = $this->config->get($this->_name . '_icon');
		$this->data['box'] = $this->config->get($this->_name . '_box');

		$this->data['text_more'] = $this->language->get('text_more');
		$this->data['text_posted'] = $this->language->get('text_posted');

		$this->data['buttonlist'] = $this->language->get('buttonlist');

		$this->load->model('catalog/news');
		$this->load->model('tool/image');

		$this->data['news_count'] = $this->model_catalog_news->getTotalNews();
        

		$this->data['news_limit'] = $setting['limit'];

		if ($this->data['news_count'] > $this->data['news_limit']) {
			$this->data['showbutton'] = true;
		} else {
			$this->data['showbutton'] = false;
		}

		$this->data['newslist'] = $this->url->link('information/news');

		$this->data['show_headline'] = $this->config->get($this->_name . '_headline_module');

		$this->data['numchars'] = $setting['numchars'];

		if (isset($this->data['numchars'])) {
			$chars = $this->data['numchars'];
		} else {
			$chars = 100;
		}

		$this->data['news'] = array();
        

        
		$results = $this->model_catalog_news->getNewsShort($setting['limit']);
        
    

		foreach ($results as $result) {
			if ($result['image']) {
				$image = $this->model_tool_image->resize($result['image'], 230, 205);
			} else {
				$image = false;
			}

			$news_length = strlen(utf8_decode($result['description']));

			if ($news_length > $chars) {
                $description = strip_tags(html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8'));
                $description = substr($description, 0, $chars);    
                $description = rtrim($description, "!,.-");
                $description = substr($description, 0, strrpos($description, ' ')); 
                $description .= "...";
			} else {
				$description = html_entity_decode($result['description'], ENT_QUOTES, 'UTF-8');
			}

			$this->data['news'][] = array(
				'title'        		=> $result['title'],
				'image'			=> $image,
				'description'	=> $description,
				'href'         		=> $this->url->link('information/news', 'news_id=' . $result['news_id']),
				'posted'   		=> date($this->language->get('date_format_short'), strtotime($result['date_added']))
			);
		}

		$this->data['module'] = $module++;

		// Template
		$this->data['template'] = $this->config->get('config_template');

		if (file_exists(DIR_TEMPLATE . $this->config->get('config_template') . '/template/module/' . $this->_name . '.tpl')) {
			$this->template = $this->config->get('config_template') . '/template/module/' . $this->_name . '.tpl';
		} else {
			$this->template = 'default/template/module/' . $this->_name . '.tpl';
		}

		$this->render();
	}
}
?>
Надіслати
Поділитися на інших сайтах

Створіть аккаунт або увійдіть для коментування

Ви повинні бути користувачем, щоб залишити коментар

Створити обліковий запис

Зареєструйтеся для отримання облікового запису. Це просто!

Зареєструвати аккаунт

Вхід

Уже зареєстровані? Увійдіть тут.

Вхід зараз
×
×
  • Створити...

Important Information

На нашому сайті використовуються файли cookie і відбувається обробка деяких персональних даних користувачів, щоб поліпшити користувальницький інтерфейс. Щоб дізнатися для чого і які персональні дані ми обробляємо перейдіть за посиланням . Якщо Ви натиснете «Я даю згоду», це означає, що Ви розумієте і приймаєте всі умови, зазначені в цьому Повідомленні про конфіденційність.