Ответить Новая тема Новый опрос 
 1,4,4 Schema для Breadcrumb нужна помощь
SDM
Новичок
Сообщений: 30
Регистрация: 11-01-2020


12-01-2021 19:14
Здравствуйте.
Столкнулся с проблемой разметки shema в файле breadcrumb.tpl
первый элемент "главная" разметил, валидатор гугл, все ок.

Для разметки категорий и субкатегорий нужна помощь

Код:
</a><span>{if isset($path) AND $path}<span class="navigation-pipe">{$navigationPipe|escape:html:'UTF-8'}</span>{if !$path|strpos:'span'}<span class="navigation_page">{$path}</span>{else}{$path}{/if}{/if}</div><!-- /Breadcrumb -->


На сколько я понял дальше нужно разметить элемент {$path} но не знаю с какого файла он подтягивается.

Подскажите плиз где и как разметить категорию -> субкатеирию -> страницу
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Алекс


Администратор
Сообщений: 4516
Откуда: Красноярск
Регистрация: 29-05-2009


13-01-2021 14:54
Проще всего это сделать в файле /classes/Tools.php, метод getPath.
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
SDM
Новичок
Сообщений: 30
Регистрация: 11-01-2020


13-01-2021 18:07
код нашел

Код:
public static function getPath($id_category, $path = '', $linkOntheLastItem = false, $categoryType = 'products')
    {
        global $link, $cookie;

        if ($id_category == 1)
            return '<span class="navigation_end">'.$path.'</span>';

        $pipe = Configuration::get('PS_NAVIGATION_PIPE');
        if (empty($pipe))
            $pipe = '>';

        $fullPath = '';

        if ($categoryType === 'products')
        {
            $category = Db::getInstance()->getRow('
            SELECT id_category, level_depth, nleft, nright
            FROM '._DB_PREFIX_.'category
            WHERE id_category = '.(int)$id_category);

            if (isset($category['id_category']))
            {
                $categories = Db::getInstance()->ExecuteS('
                SELECT c.id_category, cl.name, cl.link_rewrite
                FROM '._DB_PREFIX_.'category c
                LEFT JOIN '._DB_PREFIX_.'category_lang cl ON (cl.id_category = c.id_category)
                WHERE c.nleft <= '.(int)$category['nleft'].' AND c.nright >= '.(int)$category['nright'].' AND cl.id_lang = '.(int)($cookie->id_lang).' AND c.id_category != 1
                ORDER BY c.level_depth ASC
                LIMIT '.(int)$category['level_depth']);

                $n = 1;
                $nCategories = (int)sizeof($categories);
                foreach ($categories AS $category)
                {
                    $fullPath .=
                    (($n < $nCategories OR $linkOntheLastItem) ? '<a href="'.self::safeOutput($link->getCategoryLink((int)$category['id_category'], $category['link_rewrite'])).'" title="'.htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').'">' : '').
                    htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').
                    (($n < $nCategories OR $linkOntheLastItem) ? '</a>' : '').
                    (($n++ != $nCategories OR !empty($path)) ? '<span class="navigation-pipe">'.$pipe.'</span>' : '');
                }

                return $fullPath.$path;
            }
        }
        elseif ($categoryType === 'CMS')
        {
            $category = new CMSCategory((int)($id_category), (int)($cookie->id_lang));
            if (!Validate::isLoadedObject($category))
                die(self::displayError());
            $categoryLink = $link->getCMSCategoryLink($category);

            if ($path != $category->name)
                $fullPath .= '<a href="'.self::safeOutput($categoryLink).'">'.htmlentities($category->name, ENT_NOQUOTES, 'UTF-8').'</a><span class="navigation-pipe">'.$pipe.'</span>'.$path;
            else
                $fullPath = ($linkOntheLastItem ? '<a href="'.self::safeOutput($categoryLink).'">' : '').htmlentities($path, ENT_NOQUOTES, 'UTF-8').($linkOntheLastItem ? '</a>' : '');

            return self::getPath((int)($category->id_parent), $fullPath, $linkOntheLastItem, $categoryType);
        }
    }

    /**
    * @param string [optionnal] $type_cat defined what type of categories is used (products or cms)
    */
    public static function getFullPath($id_category, $end, $type_cat = 'products')
    {
        global $cookie;

        $pipe = (Configuration::get('PS_NAVIGATION_PIPE') ? Configuration::get('PS_NAVIGATION_PIPE') : '>');

        if ($type_cat === 'products')
            $category = new Category((int)($id_category), (int)($cookie->id_lang));
        elseif ($type_cat === 'CMS')
            $category = new CMSCategory((int)($id_category), (int)($cookie->id_lang));

        if (!Validate::isLoadedObject($category))
            $id_category = 1;
        if ($id_category == 1)
            return htmlentities($end, ENT_NOQUOTES, 'UTF-8');

        return self::getPath($id_category, $category->name, true, $type_cat).'<span class="navigation-pipe">'.$pipe.'</span> <span class="navigation_product">'.htmlentities($end, ENT_NOQUOTES, 'UTF-8').'</span>';
    }


Но честно говоря за 5 мин он мне не по зубам, а перезаливать и откатывать файлы назад с этой разметкой уже нет сил...
Можете помочь расставить ?


Категория
Код:
<span itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
       <a itemprop="item" title="глубина 2" href="">
          <span itemprop="name">глубина 2</span>
          <meta itemprop="position" content="2">
       </a>
   </span>


Субкатегория
Код:
<span itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
       <a itemprop="item" title="глубина 3" href="">
          <span itemprop="name">глубина 3</span>
          <meta itemprop="position" content="3">
       </a>
   </span>


Продукт
Код:
<span itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem">
       <a itemprop="item" title="продукт" href="">
          <span itemprop="name">продукт</span>
          <meta itemprop="position" content="4">
       </a>
   </span>



Сообщение отредактировал SDM (13-01-2021 19:09)
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
SDM
Новичок
Сообщений: 30
Регистрация: 11-01-2020


16-01-2021 22:43
С кодом разметки ХК немного разобрался

Код:
{
                    $fullPath .=
                    (($n < $nCategories OR $linkOntheLastItem) ? '<span itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem"><a itemprop="item" href="'.self::safeOutput($link->getCategoryLink((int)$category['id_category'], $category['link_rewrite'])).'" title="'.htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').'"><span itemprop="name">' : '').
                    htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').
                    (($n < $nCategories OR $linkOntheLastItem) ? '</span><meta itemprop="position" content="2"></a></span>' : '').
                    (($n++ != $nCategories OR !empty($path)) ? '<span class="navigation-pipe">'.$pipe.'</span>' : '');
                }


но возникли некоторые проблемы.

1 глубина категории и субкатегории идет одной позицией <meta itemprop="position" content="2"> а должно идти 2 и 3 (интуитивно понимаю что это связано с тем что в строке браузера ссылка все равно вырезает категорию, а дает более короткую ссылку, домен/субкатегория/товар, хотя, путь по навигации сайта, домен/категория/субкатегория/товар). как сделать разметку что бы у категории и суб категории по ХК были правильные позиции 2 и 3?

2 что бы я не делал проверка гугл пишет itemListElement
Google не розпізнає ресурс itemListElement для об’єкта типу ListItem.
и в рус. версии itemListElement
Свойство itemListElement недопустимо для объекта типа ListItem.

как устранить эти вещи.?
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Алекс


Администратор
Сообщений: 4516
Откуда: Красноярск
Регистрация: 29-05-2009


17-01-2021 16:53
Цитата:( SDM @ 16-01-2021 23:43 Смотреть сообщение )
1 глубина категории и субкатегории идет одной позицией <meta itemprop="position" content="2"> а должно идти 2 и 3 (интуитивно понимаю что это связано с тем что в строке браузера ссылка все равно вырезает категорию, а дает более короткую ссылку, домен/субкатегория/товар, хотя, путь по навигации сайта, домен/категория/субкатегория/товар). как сделать разметку что бы у категории и суб категории по ХК были правильные позиции 2 и 3?


Можно попробовать ваш код заменить на подобный:
Код:
$fullPath .=
(($n < $nCategories OR $linkOntheLastItem) ? '<span itemscope="" itemprop="itemListElement" itemtype="http://schema.org/ListItem"><a itemprop="item" href="'.self::safeOutput($link->getCategoryLink((int)$category['id_category'], $category['link_rewrite'])).'" title="'. htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').'"><span itemprop="name">' : '').
htmlentities($category['name'], ENT_NOQUOTES, 'UTF-8').(($n < $nCategories OR $linkOntheLastItem) ? '</span><meta itemprop="position" content="'. ($n+1) .'"></a></span>' : '').(($n++ != $nCategories OR !empty($path)) ? '<span class="navigation-pipe">'.$pipe.'</span>' : '');
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
SDM
Новичок
Сообщений: 30
Регистрация: 11-01-2020


21-01-2021 01:03
Спасибо за подсказку, работает.
 
Вне форума
ПМ 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Osvald
Новичок
Сообщений: 24
Регистрация: 06-07-2010


25-04-2021 07:44
гугл прекратил поддержку разметку Breadcrumb

используйте schema.org


Сообщение отредактировал Osvald (25-04-2021 03:45)
 
Вне форума
ПМ Отправить эл.сообщение 
Щелкните, и это сообщение будет добавлено в ваш ответ как цитата Цитировать этот ответ
Ответить Новая тема Новый опрос