Skip to content

Instantly share code, notes, and snippets.

@AlekVolsk
Last active April 6, 2022 10:10
Show Gist options
  • Star 5 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save AlekVolsk/1fe1d2add48c40118752f8b5043f19c0 to your computer and use it in GitHub Desktop.
Save AlekVolsk/1fe1d2add48c40118752f8b5043f19c0 to your computer and use it in GitHub Desktop.
Correct markup for breadcrumbs
<ul itemscope itemtype="http://schema.org/BreadcrumbList">
<li itemscope itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<a title="Наименование сайта" itemprop="item" content="https://site.ru/" href="/">
<span itemprop="name">Главная</span>
</a>
<meta itemprop="position" content="1">
</li>
<li itemscope itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<a title="Наименование раздела" itemprop="item" content="https://site.ru/category" href="/category">
<span itemprop="name">Раздел</span>
</a>
<meta itemprop="position" content="2">
</li>
<li itemscope itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<span title="Текущая страница" itemprop="item" content="https://site.ru/category/currentpage">
<span itemprop="name">Текущая страница</span>
</span>
<meta itemprop="position" content="3">
</li>
</ul>
<?php
use Joomla\CMS\Uri\Uri;
defined('_JEXEC') or die;
echo '<ul itemscope itemtype="http://schema.org/BreadcrumbList">';
if (!$params->get('showLast', 1)) {
array_pop($list);
}
$count = count($list);
$linkCurrent = Uri::current();
$linkRoot = substr(Uri::root(), 0, -1);
for ($i = 0; $i < $count; $i++) {
if ($i == 1 && !empty($list[$i]->link) && !empty($list[$i - 1]->link) && $list[$i]->link == $list[$i - 1]->link) {
continue;
}
if ($pos = strpos($list[$i]->name, '||')) {
$name = trim(substr($list[$i]->name, 0, $pos));
} else {
$name = $list[$i]->name;
}
$meta = '<meta itemprop="position" content="' . ($i + 1) . '">';
if ($i < $count - 1) {
if (!empty($list[$i]->link)) {
$link = explode('?', $list[$i]->link)[0];
echo '<li itemscope itemprop="itemListElement" itemtype="http://schema.org/ListItem"><a itemprop="item" content="' . $linkRoot . $link . '" href="' . $link . '"><span itemprop="name">' . $name . '</span></a>' . $meta . '</li>';
} else {
echo '<li itemscope itemprop="itemListElement" itemtype="http://schema.org/ListItem"><span itemprop="item" content="' . $linkRoot . $link . '"><span itemprop="name">' . $name . '</span></span>' . $meta . '</li>';
}
} else {
echo '<li itemscope itemprop="itemListElement" itemtype="http://schema.org/ListItem"><span itemprop="item" content="' . $linkCurrent . '"><span itemprop="name">' . $name . '</span></span>' . $meta . '</li>';
}
}
echo '</ul>';
{'pdoCrumbs' | snippet : [
'showHome' => 1,
'outputSeparator' => '',
'tplWrapper' => '@INLINE <ul itemscope itemtype="http://schema.org/BreadcrumbList">{$output}</ul>',
'tplHome' => '@INLINE
<li itemscope itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<a title="{$_modx->config.site_name}" itemprop="item" content="{$_modx->config.site_url}" href="{$link}">
<span itemprop="name">{$menutitle}</span>
</a>
<meta itemprop="position" content="{$idx}">
</li>',
'tpl' => '@INLINE
<li itemscope itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<a title="{$menutitle}" itemprop="item" content="{$_modx->config.site_url}{$link}" href="{$link}">
<span itemprop="name">{$menutitle}</span>
</a>
<meta itemprop="position" content="{$idx}">
</li>',
'tplCurrent' => '@INLINE
<li itemscope itemprop="itemListElement" itemtype="http://schema.org/ListItem">
<span title="{$menutitle}" itemprop="item" content="{$_modx->config.site_url}{$link}">
<span itemprop="name">{$menutitle}</span>
</span>
<meta itemprop="position" content="{$idx}">
</li>'
]}
@AlekVolsk
Copy link
Author

AlekVolsk commented May 27, 2019

Screenshot_1

@kernusr
Copy link

kernusr commented Jul 23, 2019

@AlekVolsk, тут в чатике говорят, что есть косяк по разметке.

itemprop="position" не относится к itemprop="item", а относится к itemprop="itemListElement"
гугл даже показывает правильно вложенность на скрине
короче, нужно вынести за пределы <a

@dmitrystas
Copy link

image

@dmitrystas
Copy link

image

@AlekVolsk
Copy link
Author

Откорректировал.
Кстати, в J-версии изначально всё правильно было :)

@ivansorlov
Copy link

ivansorlov commented Sep 30, 2019

Спасибо за лайв хак ) Но я не понял как у вас заработало через Uri::current(); ?
Я в php не силен, но у меня из-за этого сайт не отображало, потом я нашел на стоковерфлоу - JUri::current();
Т.е. не Uri , а JUri ... и у меня всё заработало, без прописывания - use Joomla\CMS\Uri\Uri;

Это вы ошиблись в коде или я что то не то говорю?

@kernusr
Copy link

kernusr commented Sep 30, 2019

Так вы use прописывали?
И какая джумла установлена?

@ivansorlov
Copy link

Вначале прописал, потом закомментировал и без неё работает.
Версия Joomla! 3.6.2 Stable

@kernusr
Copy link

kernusr commented Sep 30, 2019

В 3.6.2 нет нэймспейсов, поэтому и не работало. Код написан для версии 3.8+
Так что вы все правильно поправили у себя, переписав на JUri

@ivansorlov
Copy link

Понял, в принципе, я так и думал что-то с версией связано

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment