Open Graph - компонент - Description

InstantCMS 2.X
#1 26 апреля 2019 в 21:16
На 2.12.1 вместо og:description отображается title. У кого также, как решили проблему?
#2 26 апреля 2019 в 22:32


На 2.12.1 вместо og:description отображается title.

Dmitry
Тоже самое. Присоединяюсь к вопросу.
#3 26 апреля 2019 в 22:39
Я не силён в php, но что-то не так здесь:
Файл: /system/controllers/opengraph/hooks/content_before_item
Код:
  1. 'description'=>($item['seo_desc'] ? $item['seo_desc'] : $item['title']),
#4 26 апреля 2019 в 22:58

/system/controllers/opengraph/hooks/content_before_item

Pawell
Я там рылся уже, пробовал менять всяко — не получается.
#5 26 апреля 2019 в 22:58
Нашёл только одно решение:
удалить строку
  1. 'description'=>($item['seo_desc'] ? $item['seo_desc'] : $item['title']),
из файла /system/controllers/opengraph/hooks/content_before_item
и в типах контента создать, в настройках этого компонента дополнительное поле разметки og:description и указать поле, выводящее description.
#6 26 апреля 2019 в 23:01

указать поле, выводящее description

Pawell
А обрезать как? Там такие простыни получаются. ) Еще и с тегами <p>.
Пробовал {content|string_get_meta_description} писать, не работает.
#7 26 апреля 2019 в 23:11

А обрезать как?...

Вам не подойдёт.
У меня описания в новостях редко бывают длинными и тэг p не использую, так как отображается при наведении на картинку с главной.
#8 27 апреля 2019 в 14:02
Dmitry, надо заполнять сео-описание (тогда будет выводится оно (сео-паттерны не попадут)).
Временно можете так попробовать (замените весь в /system/controllers/opengraph/hooks/content_before_item):

  1.  
  2. <?php
  3. /******************************************************************************/
  4. // //
  5. // InstantMedia 2015 //
  6. // http://www.instantvideo.ru/, support@instantvideo.ru //
  7. // written by Fuze //
  8. // //
  9. /******************************************************************************/
  10. class onOpengraphContentBeforeItem extends cmsAction {
  11.  
  12. public function run($data){
  13.  
  14. list($ctype, $item, $fields) = $data;
  15.  
  16. if(empty($this->options['enabled_ctypes'])){
  17. return $data;
  18. }
  19.  
  20. if(!in_array($ctype['name'], $this->options['enabled_ctypes'])){
  21. return $data;
  22. }
  23.  
  24. if(empty($ctype['options']['og_type'])){
  25. return $data;
  26. }
  27.  
  28. // формируем изображения
  29. $image_urls = array();
  30. if(!empty($ctype['options']['image_fields'])){
  31. foreach ($ctype['options']['image_fields'] as $key=>$image_field) {
  32. if(empty($item[$image_field])){
  33. continue;
  34. }
  35. $preset = isset($ctype['options']['image_preset'][$key]) ? $ctype['options']['image_preset'][$key] : 'small';
  36. $images = cmsModel::yamlToArray($item[$image_field]);
  37. // берем первое поле
  38. $image = reset($images);
  39. if(is_array($image)){
  40. foreach ($images as $image) {
  41. $image_urls[] = $image[$preset];
  42. }
  43. } else {
  44. $image_urls[] = $images[$preset];
  45. }
  46. }
  47. }
  48.  
  49. // пробелы и переносы нам не нужны
  50. $item['seo_desc'] = preg_replace('!\s+!', ' ', $item['seo_desc']);
  51.  
  52. if(!empty($item['seo_desc'])) {
  53. $og_description = $item['seo_desc'];
  54. } elseif(!empty($item['teaser'])) {
  55. $og_description_st = strip_tags($item['teaser']);
  56. $og_description_pr = preg_replace('!\s+!', ' ', $og_description_st);
  57. $og_description_sts = string_short($og_description_pr, 150);//к сожалению, наша функция обрезает строку и после первой точки
  58. $og_description = $og_description_sts;
  59. } else {
  60. $og_description = $item['title'];
  61. }
  62.  
  63. $template = $this->setBasicOpenGraph(array(
  64. 'title'=>$item['title'],
  65. 'description'=>($og_description),
  66. 'type'=>$ctype['options']['og_type'],
  67. 'url'=>href_to($ctype['name'], $item['slug'].'.html'),
  68. 'image_urls'=>$image_urls
  69. ));
  70.  
  71. // дополнительные поля
  72. if(!empty($ctype['options']['other_field'])){
  73.  
  74. foreach ($ctype['options']['other_field'] as $key=>$other_field) {
  75.  
  76. if(!empty($ctype['options']['const_field'][$key])){
  77. $fcontent = string_replace_keys_values($ctype['options']['const_field'][$key], $item);
  78. if(strpos($fcontent, '{host}') !== false){
  79. $fcontent = str_replace('{host}', $this->protocol.$_SERVER['HTTP_HOST'].cmsConfig::get('root'), $fcontent);
  80. }
  81. } else {
  82.  
  83. $fcontent = $item[$ctype['options']['other_field_name'][$key]];
  84. if(strpos($ctype['options']['other_field_name'][$key], 'date_') !== false){
  85. $fcontent = date('c', strtotime($item['date_pub']));
  86. }
  87. if(!empty($ctype['options']['other_field_func'][$key]) && function_exists($ctype['options']['other_field_func'][$key])){
  88. $fcontent = $ctype['options']['other_field_func'][$key]($fcontent);
  89. }
  90.  
  91. }
  92.  
  93. $template->addHead('<meta property="'.htmlspecialchars($other_field).'" content="'.htmlspecialchars($fcontent).'"/>');
  94.  
  95. }
  96.  
  97. }
  98.  
  99. if($ctype['options']['og_type'] == 'article'){
  100. $template->addHead('<meta property="article:published_time" content="'.date('c', strtotime($item['date_pub'])).'"/>');
  101. $template->addHead('<meta property="article:modified_time" content="'.date('c', strtotime($item['date_last_modified'])).'"/>');
  102. if(!empty($item['date_pub_end'])){
  103. $template->addHead('<meta property="article:expiration_time" content="'.date('c', strtotime($item['date_pub_end'])).'"/>');
  104. }
  105. if(!empty($item['category']['title'])){
  106. $template->addHead('<meta property="article:section" content="'.htmlspecialchars($item['category']['title']).'"/>');
  107. }
  108. if(!empty($item['tags'])){
  109. $template->addHead('<meta property="article:tag" content="'.htmlspecialchars(is_array($item['tags']) ? implode(', ', $item['tags']) : $item['tags']).'"/>');
  110. }
  111. }
  112.  
  113. return array($ctype, $item, $fields);
  114.  
  115. }
  116.  
  117. }
  118.  
  119.  
$item['teaser'] замените на $item[системное_имя_поля_которое_нужно_подставить_при_пустом_мета_описании']
Работать будет, но явно не то, чего бы хотелось (а хотелось бы, чтобы паттерн выводился, есои нет "ручного" описания, и только уж потом — заголовок).
Имейте ввиду: делал любитель (никаких гарантий!).
Думаю, разработчик поправит.
#9 27 апреля 2019 в 14:33


… надо заполнять сео-описание (тогда будет выводится оно (сео-паттерны не попадут)).

Олег Васильевич я
Спасибо. Это решение работает.
Подскажите пожалуйста, а есть ли возможность применить обрезку и переносы с пробелами в настройках типа контента в "Шаблоне генерации META-описаний"? Там можно выбрать поле (например teaser), из которого будет браться описание, а как к этому полю "прикрутить" preg_replace('!\s+!', и string_short? В документации есть примеры, как можно выводить разную информацию, но по этому поводу ничего нет.
#10 27 апреля 2019 в 17:56
Спасибо. Так работает.
Но только с уведомлением
Notice: Undefined index: type in /system/controllers/opengraph/frontend.php on line 40
#11 28 апреля 2019 в 11:57

Но только с уведомлением

Dmitry
После строки:
  1.  
  2. 'description'=>($og_description),
  3.  
Добавьте:
  1.  
  2. 'type'=>$ctype['options']['og_type'],
  3.  
#12 28 апреля 2019 в 13:11
Еще раз спасибо. Теперь работает как новенький )
#13 7 июля 2019 в 22:27
Обновил компонент.
#14 8 июля 2019 в 10:26


Обновил компонент.

Fuze

Подскажите пожалуйста, как то с помощью компонента можно опенграф разметку вывести для главной страницы?
#15 8 июля 2019 в 11:32
Настроил во все соц сети работают отображаются фото хорошо, Типы контента новости, а в twitter не работает как было так и осталось, делал обновление компонента, у кого такая же проблема? можно скан как правильно настроить чтоб в twitter заработало.?
Валидатор микроразметки webmaster.yandex

Ответ такой это же ошибка вроде подскажите кто знает

rdfanode
resource = www.sait.ru
www.w3.org/1999/xhtml/vocab#search = www.sait.ru/search/opensearch
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.