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

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

Примерно строка 793, а именно там где идет
  1. if($do=='post'){
Ищем:
  1. $post['tags'] = cmsTagBar('blogpost', $post['id']);
  2.  
  3. $is_author = ($inUser->id && $inUser->id == $post['user_id']);
после вставляем:
  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
Удачи всем!
0
Endroid Endroid 8 лет назад #
Работает, но правильнее будет, если 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']).'"/>');
0
Endroid Endroid 8 лет назад #
Забыл добавить, что og:description будет работать, если использовать это решение http://instantcms.ru/forum/thread14206-1.html
0
Ruchechnik Ruchechnik 8 лет назад #
большое спасибо, ценно!
0
Ruchechnik Ruchechnik 8 лет назад #
еще раз хотел сказать спасибо , все работает ! хотел поблагодарить и MakArtSoft , ьез его ремарки работать никак не хотело ( т..к. стоит хак seo) Вопросик в другом , стандартный rss генератор ( ПРИ ОБЫЧНОМ ПРОСМОТРЕ RSS БЛОГОВ) инстанта не способен вытягивать картинки из блогов поэтому вытягивается голый текст ( только анонсы). Вопрос - как с этим бороться? p/s/ в статях в RSS все хорошо, если в статью загружена катринка)
0
kirkr kirkr 8 лет назад #
Можно сделать, главное скажите под каким элементом вы хотите выложить изображение.
0
Ruchechnik Ruchechnik 8 лет назад #
наверное под тайтлом ? или что вы имеете ввиду ? может то , чтобы вытягивалась первая картинка из блога, и чтоб стандартныый просмоторщик rss её видел? а то вообще непонятно как работает стандартный rss если даже катинки не берет;(( Было бы круто , если бы сделал ;))
0
kirkr kirkr 8 лет назад #
Вот вам решение:
заменить содержание файла \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. if(!defined('VALID_CMS')) { die('ACCESS DENIED'); }
  14. function rss_blogs($item_id, $cfg){
  15. $inDB = cmsDatabase::getInstance();
  16. global $_LANG;
  17. cmsCore::loadModel('blogs');
  18. $model = new cms_model_blogs();
  19. if(!$model->config['component_enabled']) { return false; }
  20. cmsCore::loadClass('blog');
  21. $inBlog = cmsBlogs::getInstance();
  22. $inBlog->owner = 'user';
  23. $channel = array();
  24. $items = array();
  25. // Формируем канал
  26. if ($item_id){
  27. $blog = $inBlog->getBlog($item_id);
  28. if (!$blog) { return false; }
  29. //Если доступа к блогу нет, возвращаемся
  30. if (!cmsUser::checkUserContentAccess($blog['allow_who'], $blog['user_id'])){
  31. return false;
  32. }
  33. $inBlog->whereBlogIs($blog['id']);
  34. $channel['title'] = $blog['title'];
  35. $channel['description'] = $_LANG['NEW_POSTS_IN_BLOGS'];
  36. $channel['link'] = HOST . $model->getBlogURL($blog['seolink']);
  37. } else {
  38. $channel['title'] = $_LANG['NEW_POSTS_IN_BLOGS'];
  39. $channel['description'] = $_LANG['NEW_POSTS_IN_BLOGS'];
  40. $channel['link'] = HOST . '/blogs';
  41. }
  42. // В RSS всегда только публичные посты
  43. $inBlog->whereOnlyPublic();
  44. $inDB->orderBy('p.pubdate', 'DESC');
  45. $inDB->limit($cfg['maxitems']);
  46. $posts = $inBlog->getPosts(false, $model, true);
  47. if($posts){
  48. foreach($posts as $post){
  49. // print_r($posts);
  50. preg_match_all("/\[IMG\](.*?)\[\/IMG\]/",$posts[$i]['content'],$imagefirst); //ищем первую картинку она будет в $imagefirst[1][0]
  51. $post['link'] = HOST . $post['url'];
  52. $post['description'] = mb_substr(strip_tags($post['content_html']), 0, 350). '...';
  53. $post['comments'] = $post['link'].'#c';
  54. $post['category'] = $post['blog_title'];
  55. $post['size'] = round(filesize(PATH.''.$imagefirst[1][0]));
  56. $post['image'] = HOST . ''.$imagefirst[1][0];
  57. $items[] = $post;
  58. $i++;
  59. }
  60. }
  61. return array('channel' => $channel,
  62. 'items' => $items);
  63. }
  64. ?>

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

я просто привел к тому виду rss который должен быть, именно rss2.0
0
Ruchechnik Ruchechnik 8 лет назад #
я имелл ввиду когда сказал про решение ,будет ли твиттерфид глотать сейчас доработанную ленту, так же хорошо как и раньше ( после доработки с вверху поста) ?
0
kirkr kirkr 8 лет назад #
ну а куда он денется? он даже картинку должен показать, так как она по всем правилам будет выводиться.
0
Ruchechnik Ruchechnik 8 лет назад #
неа, не работает, допустим здесь при нажатии на rss пытается закачать файл на комп ;)) Windows Live Mail Mail Message (13,2 KB)
вот например joke http://www.sigaretam.net/rss/blogs/52/feed.rss
0
kirkr kirkr 8 лет назад #
И не будет, если у вас неправильно сохранен файл, точно в UTF8 сохранили, а что за отступы в начале файла?
в IE подсветит вам неправильную строку, у вас на объявлении
Код PHP:
  1. <?xml version="1.0" encoding="utf-8" ?>
пробелы, есть подозрение что сохранили неправильно файл.
0
Ruchechnik Ruchechnik 8 лет назад #
нет я все правильно сохранил, просто ошибка при копироваиии отсюда. какието пробелы слева получаются - сделал ручками и все заработало joke Еще такой момент - у меня почему- то попадают в rss только картинки добавленные в блог самим пользователем, а вот если она есть в блоге в rss она не попадает , не могли бы вы подсказать чтоб попадала именно ЛЮБАЯ картинка из блога ? из примера все будет понятно http://www.sigaretam.net/rss/blogs/52/feed.rss заранее спасибо!!
0
Петр Петр 8 лет назад #
жду для доски объявлений
0
kirkr kirkr 8 лет назад #
Кармы докиньте и будет вам и для доски объявлений, ничего сложного там нету.
+1
Петр Петр 8 лет назад #
докинул :)
0
kirkr kirkr 8 лет назад #
Запостил ;)
0
ValeraK ValeraK 7 лет назад #
Как то не пойму, в дебугере фейсбука, показывает картинку поста, а в превью показывает левую картинку на сайте( помогите разобраться. Делал SEO для блогов от oll http://instantcms.ru/blogs/all-instant-cms/seo-bloga-dlja-icms-v-1-10-3.html может в этом проблема
0
ValeraK ValeraK 7 лет назад #
Пишет что изображение не достаточно большое для отображения
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
0
ValeraK ValeraK 7 лет назад #
увеличил размер маленького изображения до 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']).'"/>');
Но все равно если в записи блога нет изображений, берется другое с сайта. Как можно исправить?
0
Helg Helg 7 лет назад #
и при этом в исходном коде показывает, что описание не заполнено <meta property="og:description" content=""/>
0
Helg Helg 7 лет назад #
возможно надо вписать как то вот это
Код PHP:
  1. $inPage->setDescription($post['metadesc']);
но я не могу разобраться тут с кодом
0
Helg Helg 6 лет назад #
на 10.6 вот так
Код PHP:
  1. $inPage->addHead('<meta property="og:description" content="'.htmlspecialchars($post['meta_desc'] ? $post['meta_desc'] : crop($post['content_html'])).'" />');

Еще от автора

Политика безопасности и соглашение
Много споров было что в текст публиковать.
Google & Yandex баннеры в компоненты Banners
Добрый день! Была поставлена задача добавить возможность выводить через позиции {Баннер=номер позиции} баннеры гугла и яндекса.
Готовим сервер VDS Nginx + php7.0-fpm +MySQL для Inst2
Добрый день! Данная записка более чем напоминание о том, что не забыть при установке и настройке VDS Nginx + php7.0-fpm +MySQL для Inst2.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.