0 Пользователей и 1 Гость просматривают эту тему.
  • 21 Ответов
  • 7522 Просмотров
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Не знаю, в какой раздел лучше, если что перенесите.
Итак, мое решение проблем с полями Publisher, Image, Даты публикаций/модификаций и непонятного mainEntityOfPage.
На основе шаблона Protostar
Редактируем файл шаблона /html/com_content/article/default.php
В область php где-то после defined('_JEXEC') or die; и перед ?> вставляем код обработки изображений. Внимание! Изображения у меня находятся в самой статье, если у вас не так, то стоит модифицировать в этом направлении.
Сам код:
Код
$myimage=$this->item->introtext;
preg_match_all('/<img[^>]+>/i', $myimage, $result);
preg_match_all('/(src)=("[^"]*")/i',$result[0][0], $img);
$timag=$img[2][0];
if(!empty($timag)){
 $timage=str_replace("\"","",$timag);}
 else
{
  $timage= 'images/logo.png';
}
$timage=JURI::base().$timage;
$size = getimagesize($timage);
Здесь же можно добавить OpenGraph разметку для соцсетей:
Код
$doc = JFactory::getDocument();
$doc->addCustomTag( '
<meta property="og:locale" content="ru_RU">
<meta property="og:type" content="article">
<meta property="og:title" content="'.$this->escape($this->item->title).'">
<meta property="og:site_name" content="Защита сайтов ProtectYourSite">
<meta name="twitter:card" content="summary_large_image">
<meta name="twitter:site" content="@Protect_Site">
<meta name="twitter:creator" content="@Protect_Site">
<meta property="og:url" content="'.JURI::current().'">
<meta property="og:description" content="'.$doc->getDescription().'">
<meta property="og:image" content="'.$timage.'">
');
Необходимые поля надо заменить на свои значения.
Дальше ищем, где у нас объявлен блок микроразметки  itemtype="http://schema.org/Article"
Я вставлял после
Код
	<meta itemprop="inLanguage" content="<?php echo ($this->item->language === '*')? JFactory::getConfig()->get('language') : $this->item->language; ?>" />
И вставляем после следующие блоки
Код
	<meta itemscope itemprop="mainEntityOfPage"  itemtype="https://schema.org/WebPage" itemid="<?php echo JURI::current(); ?>"/>
<meta itemprop="dateModified" content="<?php echo $this->item->modified; ?>">
              <meta itemprop="datePublished" content="<?php echo $this->item->publish_up; ?>">
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="<?php echo $timage;?>">
<meta itemprop="image" content="<?php echo $timage;?>">
<meta itemprop="width" content="<?php echo $size[0];?>">
<meta itemprop="height" content="<?php echo $size[1];?>">
</span>
<span itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="name" content="Защита сайтов ProtectYourSite">
    <span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">
        <img itemprop="url" src="https://protectyoursite.ru/images/logo.png" style="display:none;"/>
        <meta itemprop="image" content="https://protectyoursite.ru/images/logo.png">
        <meta itemprop="width" content="141">
        <meta itemprop="height" content="160">
    </span>
</span>
Аналогично заменяя на свои значения в нужных местах. После этого сохраняем, очищаем кеш и смотрим полученный результат. Если всё правильно, то мы должны успешно проходить валидацию микроразметки

Стал проверять микроразметку по блогу, в итоге вылезло:
Необходимо указать значение для поля headline.
Необходимо указать значение для поля image.
Необходимо указать значение для поля publisher.

Рекомендуется заполнять поле mainEntityOfPage. Укажите значение, если оно известно.

Решил я это всё на основании того же стандартного шаблона и последней Joomla так:
Создаем в папке шаблона файл /html/layouts/joomla/content/blog_style_default_item_title.php и вставляем туда следующий код:

Код
<?php
/**
 * @package     Joomla.Site
 * @subpackage  Layout
 *
 * [member=126442]copyright[/member]   Copyright (C) 2005 - 2016 Open Source Matters, Inc. All rights reserved.
 * @license     GNU General Public License version 2 or later; see LICENSE.txt
 */

defined('JPATH_BASE') or die;

// Create a shortcut for params.
$params = $displayData->params;
$canEdit = $displayData->params->get('access-edit');
JHtml::addIncludePath(JPATH_COMPONENT.'/helpers/html');
$myimage=$displayData->introtext;
preg_match_all('/<img[^>]+>/i', $myimage, $result);
preg_match_all('/(alt|title|src)=("[^"]*")/i',$result[0][0], $img);
$timag=$img[2][1];
if(!empty($timag)){
 $timage=str_replace("\"","",$timag);}
 else
{
  $timage= 'images/logo.png';
}
$timage=JURI::base().$timage;
$size = getimagesize($timage);
?>

<?php if ($params->get('show_title') || $displayData->state == 0 || ($params->get('show_author') && !empty($displayData->author ))) : ?>
<div class="page-header">
<meta itemscope itemprop="mainEntityOfPage"  itemtype="https://schema.org/WebPage" itemid="<?php echo JRoute::_(
ContentHelperRoute::getArticleRoute($displayData->slug, $displayData->catid, $displayData->language)
); ?>"/>
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="<?php echo $timage;?>">
<meta itemprop="image" content="<?php echo $timage;?>">
<meta itemprop="width" content="<?php echo $size[0];?>">
<meta itemprop="height" content="<?php echo $size[1];?>">
</span>
<span itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="name" content="Защита сайтов ProtectYourSite">
    <span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">
        <img itemprop="url" src="https://protectyoursite.ru/images/logo.png" style="display:none;"/>
        <meta itemprop="image" content="https://protectyoursite.ru/images/logo.png">
        <meta itemprop="width" content="141">
        <meta itemprop="height" content="160">
    </span>
</span>
<?php if ($params->get('show_title')) : ?>
<h2 itemprop="headline">
<?php if ($params->get('link_titles') && ($params->get('access-view') || $params->get('show_noauth', '0') == '1')) : ?>
<a href="<?php echo JRoute::_(
ContentHelperRoute::getArticleRoute($displayData->slug, $displayData->catid, $displayData->language)
); ?>" itemprop="url">
<?php echo $this->escape($displayData->title); ?>
</a>
<?php else : ?>
<?php echo $this->escape($displayData->title); ?>
<?php endif; ?>
</h2>
<?php endif; ?>

<?php if ($displayData->state == 0) : ?>
<span class="label label-warning"><?php echo JText::_('JUNPUBLISHED'); ?></span>
<?php endif; ?>

<?php if (strtotime($displayData->publish_up) > strtotime(JFactory::getDate())) : ?>
<span class="label label-warning"><?php echo JText::_('JNOTPUBLISHEDYET'); ?></span>
<?php endif; ?>

<?php if ((strtotime($displayData->publish_down) < strtotime(JFactory::getDate()))
&& $displayData->publish_down != JFactory::getDbo()->getNullDate()) : ?>
<span class="label label-warning"><?php echo JText::_('JEXPIRED'); ?></span>
<?php endif; ?>
</div>
<?php endif; ?>

Заменив логотип на своё значение.
После этих манипуляций блог стал проходить проверку микроразметки

Если есть комментарии по разметке, пишите)
« Последнее редактирование: 05.08.2018, 21:58:01 от ProtectYourSite »
*

Филипп Сорокин

  • Завсегдатай
  • 1918
  • 160 / 4
  • разработчик.москва
Это чё за комбаин? Фреймворком у продвинутых мастеров ныне пользоваться не в моде?
*

ChaosHead

  • Гуру
  • 5241
  • 451 / 13
Спасибо, полезно на самом деле, т.к. у Joomla уже неправильная разметка, после того как Google ввёл новые изменения.
Кстати говоря больше всего бесит, что картинки теперь требуется размечать так:

Цитировать
<span style=display:none; itemprop=image itemscope itemtype=https://schema.org/ImageObject>
<img itemprop=url src=https://yoursite.ru/images/news/Google_recaptcha_exploit.jpg>
<meta itemprop=image content=https://yoursite.ru/images/news/Google_recaptcha_exploit.jpg>

я не понимаю кому это нужно...

Кстати аккуратнее с display:none в разметке, можно схлопотать санкции - она перестанет отображаться для сайта и таких примеров не мало.
*

Missile

  • Завсегдатай
  • 1098
  • 90 / 1
Я после тщетных попыток угодить и Яндексу, и Гуглю просто забила на это дело.
Мне кажется. вебмастерам пора устраивать акции сопротивления, потому что веб идёт куда-то не туда. Если бы, к примеру, все разом отказались от микроразметки, то в мозгу у поисковиков (точнее, у тех, кто за ними стоит) наверняка бы что-то щёлкнуло.
*

Septdir

  • Живу я здесь
  • 3370
  • 168 / 4
Ну я немного попарился и сделал и для Яндекс и для Google.  
Насчёт дисплей ноне.  Я просто сделал класс со стилем.
Display block
Width 0
Height 0
Font-size 0
Line-height 0
Overflow hidden
Да и все.
Не можете справиться с задачей сами пишите, решу ее за вас, не бесплатно*.
*Интересная задача, Деньги или Бартер. Натурой не беру!
CodersRank | Контакты | Мой GitHub | Workshop
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
А если шаблон используется beez-3. В этом шаблоне нет папки content. Куда в этом случае сбрасывать blog_style_default_item_title.php?

Я уже и в корень папки Joomla ложил, и создавал отдельную папку content - ничего не меняется
*

draff

  • Гуру
  • 5803
  • 434 / 7
  • ищу работу
Создаем в папке шаблона файл /html/layouts/joomla/content/blog_style_default_item_title.php
Папка HTML есть в шаблоне, если нет- создайте
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
В шаблоне по указанному пути есть: /html/layouts/joomla/system/message.php

Я ж говорю сбрасывал и в папку Joomla и в ней создавал папку content никаких изменений
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
автора выставлено показывать в настройках материалов?
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Да, автор есть.

Еще интересный момент, добавляю в /html/com_content/article/default.php код:
 
Цитировать
$myimage=$this->item->introtext;
preg_match_all('/<img[^>]+>/i', $myimage, $result);
preg_match_all('/(alt|title|src)=("[^"]*")/i',$result[0][0], $img);
$timag=$img[2][1];
if(!empty($timag)){
 $timage=str_replace("\"","",$timag);}
 else
{
  $timage= 'images/logo.png';
}
$timage=JURI::base().$timage;
$size = getimagesize($timage);

Вылазит ошибка
Warning: getimagesize(http://moy-sayt/kak vyrastit arbuz na balkone): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found in /templates/beez3/html/com_content/article/default.php on line 24

в строке 24 такой код:
$size = getimagesize($timage);




Причем на хостинге все изображения проименовыны через дефиз, т.е. kak-vyrastit-arbuz-na-balkone.jpg

В исходном коде страницы такая же ерунда
Цитировать
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="http://moy-sayt/kak vyrastit arbuz na balkone">
<meta itemprop="image" content="http://moy-sayt/kak vyrastit arbuz na balkone">
<meta itemprop="width" content="">
<meta itemprop="height" content="">
</span>
« Последнее редактирование: 31.07.2018, 21:14:25 от Vasiliy111 »
*

Mehanick

  • Давно я тут
  • 840
  • 5 / 0
в к2 уже включена вся разметка
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Если установить данный код под строкой <meta itemprop="inLanguage" content=

Код
<meta itemscope itemprop="mainEntityOfPage"  itemtype="https://schema.org/WebPage" itemid="<?php echo JURI::current(); ?>"/>
<meta itemprop="dateModified" content="<?php echo $this->item->modified; ?>">
              <meta itemprop="datePublished" content="<?php echo $this->item->publish_up; ?>">
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="<?php echo $timage;?>">
<meta itemprop="image" content="<?php echo $timage;?>">
<meta itemprop="width" content="<?php echo $size[0];?>">
<meta itemprop="height" content="<?php echo $size[1];?>">
</span>
<span itemprop="publisher" itemscope itemtype="https://schema.org/Organization">
<meta itemprop="name" content="Защита сайтов ProtectYourSite">
    <span itemprop="logo" itemscope itemtype="https://schema.org/ImageObject">
        <img itemprop="url" src="https://protectyoursite.ru/images/logo.png" style="display:none;"/>
        <meta itemprop="image" content="https://protectyoursite.ru/images/logo.png">
        <meta itemprop="width" content="141">
        <meta itemprop="height" content="160">
    </span>
</span>

Валидатор микроразметки не ругается (ошибок нет) но считаю что в моем случае это условие не совсем правильно:

Код
<img itemprop="url" src="<?php echo $timage;?>">
<meta itemprop="image" content="<?php echo $timage;?>">
<meta itemprop="width" content="<?php echo $size[0];?>">
<meta itemprop="height" content="<?php echo $size[1];?>">

Так как в исходном коде в строках:

<img itemprop="url" - "отображается ссылка на главную страницу"
<meta itemprop="image" - пусто
<meta itemprop="width" - пусто
<meta itemprop="height" - пусто

Помогите решить проблему. Думаю решение уже совсем близко.
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
А картинки есть в материале ? Они в тексте материала прописаны ? И лучше привести полный код файла.
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Да картинки в материале (статье) есть и не одна. Выводятся обычным способом <img src="" alt="" " title="" />

А какой именно код файла нужен default.php?
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Где вставляли микроразметку
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Правил шаблон/html/com_content/article/default.php

Спойлер
[свернуть]

С данным кодом в исходном файле страницы имею:

Код
<span style="display:none;" itemprop="image" itemscope itemtype="https://schema.org/ImageObject">
<img itemprop="url" src="/">
<meta itemprop="image" content="">
<meta itemprop="width" content="">
<meta itemprop="height" content="">
</span>
*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Так надо допиливать блок с изображением, которое у вас выдавало ошибку. Пробуйте после:
Код
preg_match_all('/<img[^>]+>/i', $myimage, $result); 
preg_match_all('/(alt|title|src)=("[^"]*")/i',$result[0][0], $img);
добавить
Код
var_dump($result);var_dump($img);die();
и смотреть, что приходит
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Нееее, так вообще белый экран и отблик изображения

Код
array(1) { [0]=> array(1) { [0]=> string(295) "


*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
Спасибо ProtectYourSite за помощь с микроразметкой. Всем у кого будут проблемы обращайтесь к нему.
*

kern.USR

  • Давно я тут
  • 827
  • 68 / 1
Всем у кого будут проблемы обращайтесь к нему.
Звучит, как проклятие  :dry:
*

Vasiliy111

  • Захожу иногда
  • 248
  • 5 / 0
А что у Google изменились какие то требования? Обнаружил что появилось две ошибки (раньше не было). На сайте изменений ни каких не происходило.

1.BreadcrumbList (хлебные крошки) - item   Необходимо указать значение для поля item.

2. Article - Атрибут logo.height имеет недопустимое значение.



*

ProtectYourSite

  • Живу я здесь
  • 2356
  • 135 / 4
  • Безопасность вебсайтов
Та же фигня, баг зафиксировали и обещали исправить.
Чтобы оставить сообщение,
Вам необходимо Войти или Зарегистрироваться
 

Архив статей – в чём суть?

Автор Gerostrat

Ответов: 3
Просмотров: 214
Последний ответ 14.03.2024, 21:03:48
от sivers
Перестал работать просмотр блога категории

Автор selmax

Ответов: 1
Просмотров: 371
Последний ответ 01.12.2022, 21:41:07
от NewUsers
Массовый импорт статей из Excel в Joomla

Автор koskanalya

Ответов: 1
Просмотров: 454
Последний ответ 05.11.2022, 14:15:34
от antony2606
Как получить ссылку на материал для использования в макете блога?

Автор Chigolberi

Ответов: 19
Просмотров: 4587
Последний ответ 10.06.2022, 00:27:40
от Леон
Навигация внутри &quot;Блога категории&quot;

Автор RomanA

Ответов: 8
Просмотров: 433
Последний ответ 12.04.2022, 15:46:01
от marksetter