Чтоб Facebook хорошо понимал Часть2 БЛОГИ

2370
В продолжении...
""
Изображение уменьшено. Щелкните, чтобы увидеть оригинал.
После адаптации статей попросили адаптировать блоги.
Учитывая что первый пункт из предыдущей статьи вы сделали, то нам остается правка в файле:
\components\blogs\frontend.php

Примерно строка 793, а именно там где идет
Код PHP:
  1. if($do=='post'){
Ищем :
Код PHP:
  1. $post['tags'] = cmsTagBar('blogpost', $post['id']);
  2.  
  3. $is_author = ($inUser->id && $inUser->id == $post['user_id']);
после вставляем:
Код PHP:
  1. //facebook og start
  2. preg_match_all("/\[IMG\](.*?)\[\/IMG\]/",$post['content'],$imagefirst); //ищем первую картинку она будет в $imagefirst[1][0]
  3. $inPage->addHead('<meta property="og:type" content="website" />');
  4. $inPage->addHead('<meta property="og:title" content="'.htmlspecialchars($blog['title']).'"/>');
  5. $inPage->addHead('<meta property="og:description" content="'.htmlspecialchars($blog['title']).'"/>');
  6. $inPage->addHead('<meta property="og:url" content="'.HOST.''.$model->getPostURL($blog['seolink'], $post['seolink']).'" />');
  7. $inPage->addHead('<meta property="og:image" content="'.HOST.''.$imagefirst[1][0].'"/>');
  8. //facebok og end
Сохраняем и кормим rss от блогов опять планировщику постов=) Ну и как всегда чикинг на правильность делаем тут:https://developers.facebook.com/tools/debug
Удачи всем!
Чтоб Facebook хорошо понимал, добавляем The Open Graph protocol | Делаем картинки для RSS в блогах
Комментарии (24)
Endroid 3 сентября 2013 в 21:44 0
Работает, но правильнее будет, если og:title и og:description заменить на:

Код PHP:
  1. $inPage->addHead('<meta property="og:title" content="'.htmlspecialchars($post['title']).'"/>');
  2. $inPage->addHead('<meta property="og:description" content="'.htmlspecialchars($post['meta_desc']).'"/>');
Endroid 3 сентября 2013 в 21:52 0
Забыл добавить, что og:description будет работать, если использовать это решение http://instantcms.ru/forum/thread14206-1.html
Ruchechnik 4 сентября 2013 в 16:38 0
большое спасибо, ценно!
Ruchechnik 8 сентября 2013 в 00:41 0
еще раз хотел сказать спасибо , все работает ! хотел поблагодарить и MakArtSoft , ьез его ремарки работать никак не хотело ( т..к. стоит хак seo) Вопросик в другом , стандартный rss генератор ( ПРИ ОБЫЧНОМ ПРОСМОТРЕ RSS БЛОГОВ) инстанта не способен вытягивать картинки из блогов поэтому вытягивается голый текст ( только анонсы). Вопрос - как с этим бороться? p/s/ в статях в RSS все хорошо, если в статью загружена катринка)
kirkr 9 сентября 2013 в 08:57 0
Можно сделать, главное скажите под каким элементом вы хотите выложить изображение.
Ruchechnik 9 сентября 2013 в 13:17 0
наверное под тайтлом ? или что вы имеете ввиду ? может то , чтобы вытягивалась первая картинка из блога, и чтоб стандартныый просмоторщик rss её видел? а то вообще непонятно как работает стандартный rss если даже катинки не берет;(( Было бы круто , если бы сделал ;))
kirkr 9 сентября 2013 в 13:30 0
Вот вам решение:
заменить содержание файла \components\blogs\prss.php

на

Код PHP:
  1. <?php
  2. /******************************************************************************/
  3. // //
  4. // InstantCMS v1.10 //
  5. // http://instantcms.ru/ //
  6. // //
  7. // written by InstantCMS Team, 2007-2012 //
  8. // produced by InstantSoft, (www.instantsoft.ru) //
  9. // //
  10. // LICENSED BY GNU/GPL v2 //
  11. // //
  12. /******************************************************************************/
  13.  
  14. if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }
  15.  
  16. function rss_blogs($item_id, $cfg){
  17.  
  18. $inDB = cmsDatabase::getInstance();
  19.  
  20. global $_LANG;
  21.  
  22. cmsCore::loadModel('blogs');
  23. $model = new cms_model_blogs();
  24.  
  25. if(!$model->config['component_enabled']) { return false; }
  26.  
  27. cmsCore::loadClass('blog');
  28. $inBlog = cmsBlogs::getInstance();
  29. $inBlog->owner = 'user';
  30.  
  31. $channel = array();
  32. $items = array();
  33.  
  34. // Формируем канал
  35. if ($item_id){
  36.  
  37. $blog = $inBlog->getBlog($item_id);
  38. if (!$blog) { return false; }
  39.  
  40. //Если доступа к блогу нет, возвращаемся
  41. if (!cmsUser::checkUserContentAccess($blog['allow_who'], $blog['user_id'])){
  42. return false;
  43. }
  44.  
  45. $inBlog->whereBlogIs($blog['id']);
  46.  
  47. $channel['title'] = $blog['title'];
  48. $channel['description'] = $_LANG['NEW_POSTS_IN_BLOGS'];
  49. $channel['link'] = HOST . $model->getBlogURL($blog['seolink']);
  50.  
  51. } else {
  52.  
  53. $channel['title'] = $_LANG['NEW_POSTS_IN_BLOGS'];
  54. $channel['description'] = $_LANG['NEW_POSTS_IN_BLOGS'];
  55. $channel['link'] = HOST . '/blogs';
  56.  
  57. }
  58.  
  59. // В RSS всегда только публичные посты
  60. $inBlog->whereOnlyPublic();
  61.  
  62. $inDB->orderBy('p.pubdate', 'DESC');
  63.  
  64. $inDB->limit($cfg['maxitems']);
  65.  
  66. $posts = $inBlog->getPosts(false, $model, true);
  67.  
  68. if($posts){
  69. foreach($posts as $post){
  70. // print_r($posts);
  71. preg_match_all("/\[IMG\](.*?)\[\/IMG\]/",$posts[$i]['content'],$imagefirst); //ищем первую картинку она будет в $imagefirst[1][0]
  72. $post['link'] = HOST . $post['url'];
  73. $post['description'] = mb_substr(strip_tags($post['content_html']), 0, 350). '...';
  74. $post['comments'] = $post['link'].'#c';
  75. $post['category'] = $post['blog_title'];
  76.  
  77. $post['size'] = round(filesize(PATH.''.$imagefirst[1][0]));
  78. $post['image'] = HOST . ''.$imagefirst[1][0];
  79. $items[] = $post;
  80. $i++;
  81. }
  82. }
  83.  
  84. return array('channel' => $channel,
  85. 'items' => $items);
  86.  
  87. }
  88.  
  89. ?>

Для тех кого важно могу нарисовать отдельным постом, только надо ли?
Ruchechnik 9 сентября 2013 в 19:48 0
Спасибо !!!! буду прововать, уверен это то что надо !! Сделай лучше отдельный пост , заработаешь кучу плюсов в карму!!! да и людям будет нагляднее, а на топик - старт решение, это никак не повлияет негативно ?
kirkr 9 сентября 2013 в 19:55 0
топик старт решений не понял.

я просто привел к тому виду rss который должен быть, именно rss2.0
Ruchechnik 9 сентября 2013 в 20:26 0
я имелл ввиду когда сказал про решение ,будет ли твиттерфид глотать сейчас доработанную ленту, так же хорошо как и раньше ( после доработки с вверху поста) ?
kirkr 9 сентября 2013 в 22:06 0
ну а куда он денется? он даже картинку должен показать, так как она по всем правилам будет выводиться.
Ruchechnik 9 сентября 2013 в 22:37 0
неа, не работает, допустим здесь при нажатии на rss пытается закачать файл на комп ;)) Windows Live Mail Mail Message (13,2 KB)
вот например joke http://www.sigaretam.net/rss/blogs/52/feed.rss
kirkr 10 сентября 2013 в 05:34 0
И не будет, если у вас неправильно сохранен файл, точно в UTF8 сохранили, а что за отступы в начале файла?
в IE подсветит вам неправильную строку, у вас на объявлении
Код PHP:
  1. <?xml version="1.0" encoding="utf-8" ?>
пробелы, есть подозрение что сохранили неправильно файл.
Ruchechnik 10 сентября 2013 в 12:51 0
нет я все правильно сохранил, просто ошибка при копироваиии отсюда. какието пробелы слева получаются - сделал ручками и все заработало joke Еще такой момент - у меня почему- то попадают в rss только картинки добавленные в блог самим пользователем, а вот если она есть в блоге в rss она не попадает , не могли бы вы подсказать чтоб попадала именно ЛЮБАЯ картинка из блога ? из примера все будет понятно http://www.sigaretam.net/rss/blogs/52/feed.rss заранее спасибо!!
Петр 24 сентября 2013 в 11:04 0
жду для доски объявлений
kirkr 24 сентября 2013 в 11:11 0
Кармы докиньте и будет вам и для доски объявлений, ничего сложного там нету.
Петр 24 сентября 2013 в 11:16 +1
докинул :)
kirkr 24 сентября 2013 в 12:56 0
Запостил ;)
ValeraK 14 июня 2014 в 22:45 0
Как то не пойму, в дебугере фейсбука, показывает картинку поста, а в превью показывает левую картинку на сайте( помогите разобраться. Делал SEO для блогов от oll http://instantcms.ru/blogs/all-instant-cms/seo-bloga-dlja-icms-v-1-10-3.html может в этом проблема
ValeraK 15 июня 2014 в 14:43 0
Пишет что изображение не достаточно большое для отображения
Provided og:image could not be downloaded or is not big enough. Please use an image that's at least 200x200px and is accessible from Facebook. Будет использовано другое изображение вместо маленького. Как же можно увеличить изображение в записи блога оно достаточно большое( http://plumins.com/blogs/s-miru-po-nitke/klubnichnyi-kokteil.html
ValeraK 15 июня 2014 в 15:18 0
увеличил размер маленького изображения до 200px в components/users/photos.php и все заработало.
Для тех кто использует SEO для блогов 1.10.3 от oll нужно заменить строку описания
Код PHP:
  1. $inPage->addHead('<meta property="og:description" content="'.htmlspecialchars($blog['title']).'"/>');
на следующую
Код PHP:
  1. $inPage->addHead('<meta property="og:description" content="'.htmlspecialchars($post['metadesc']).'"/>');
  2.  
Но все равно если в записи блога нет изображений, берется другое с сайта. Как можно исправить?
Helg 25 июня 2014 в 19:45 0
и при этом в исходном коде показывает, что описание не заполнено <meta property="og:description" content=""/>
Helg 25 июня 2014 в 20:17 0
возможно надо вписать как то вот это
Код PHP:
  1. $inPage->setDescription($post['metadesc']);
но я не могу разобраться тут с кодом
Helg 9 августа 2015 в 20:23 0
на 10.6 вот так
Код PHP:
  1. $inPage->addHead('<meta property="og:description" content="'.htmlspecialchars($post['meta_desc'] ? $post['meta_desc'] : crop($post['content_html'])).'" />');