Виджиты yii2 для карточки товара и микроразметка

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Виджиты yii2 для карточки товара и микроразметка

Сообщение svil »

Делаю SEO оптимизацию,
надо "посадить" вид товара на виджетах yii2 на микроразметку https://soltyk.ru/shkola-seo/vnutrennya ... hki-tovara
Как подружить виджеты yii2 datailview, carousel c карточкой товара?
Можно ли использовать скрытые поля и не менять первоначальный вид?

Вид с карточкой товара

Код: Выделить всё

<?php
$dataProvider = new ArrayDataProvider(['allModels' => $offer->product->getImages()->all()]);
echo Carousel::widget(['dataProvider' => $dataProvider]);
?>

<?php

//echo $offer->product->name;
//echo "<br/>";
//echo $offer->product->description;
//echo "<br/>";

//echo $offer->product->price;
echo "<br/>";
//echo $offer->getPrices()->joinWith(['type'])->search()->performance;
?>

<?php
echo DetailView::widget([
'model' => $offer->product,
'attributes' => [
'name',

],
]);
?>
<?php
echo DetailView::widget([
    'model' => $offer->product,
    'attributes' => [
        'description',
        'article',

    ],
]);
?>

<?php
echo GridView::widget([
    'dataProvider' => $offer->getPrices()->joinWith(['type'])->search(),
    'columns' => [

        'performance',

        [
            'attribute' => 'value',
            'value' => function ($price) {
                return Yii::$app->formatter->asCurrency($price->value, 'RUB');
            }
        ]
    ]
]);
Микроразметка

Код: Выделить всё

<!-- Указывается схема Product.--> 
<div itemscope itemtype="http://schema.org/Product">
<!-- В поле name указывается наименование товара.-->
<h1 itemprop="name">Название товара </h1>
<!-- В поле image указывается ссылка на картинку товара.-->
<a itemprop="image" href="/schema/Product.jpeg" title="Описание картинки " ><img src="/schema/Product.jpeg" alt="альтернативный текст картинки"></a>
<!-- В поле description дается описание товара.-->
<div itemprop="description">Описание товара или услуги</div>
<!-- рейтинг товара -->
 <div itemprop="aggregateRating" itemscope itemtype="http://schema.org/AggregateRating"> 
 Рейтинг: <span itemprop="ratingValue">4.3</span> (<span itemprop="reviewCount">13</span> отзывов) 
 <!-- или можно указать в скрытом варианте: -->
 <!-- минимальное значение рейтинга: -->
 <meta itemprop="worstRating" content="1"/>
 <!-- само значение рейтинга: -->
 <meta itemprop="ratingValue" content="4,8"/>
 <!-- максимальное значение рейтинга: -->
 <meta itemprop="bestRating" content="5"/>
 <!-- количество голосов по рейтингу: -->
 <meta itemprop="ratingCount" content="38914"/>
 </div> 
<!-- Указывается схема Offer - цена товара-->
 <div itemprop="offers" itemscope itemtype="http://schema.org/Offer"> 
 <!-- В поле price указывается цена товара.-->
 Цена: <span itemprop="price" content="9490.00">9490 руб.</span>
 <!-- В поле priceCurrency указывается валюта данные выводим мета информацией так как на странице она не где не присутствует.-->
 <meta itemprop="priceCurrency" content="RUB">
 <!-- Указывается свойство InStock, которое свидетельствует о том, что товар в наличии, данные выводим также метаинформацией -->
 <!-- указываем наличие: -->
 <meta itemprop="availability" href="http://schema.org/InStock" content="В наличии"> 
 <!-- или: -->
 <span itemprop="availability">Уже в продаже!</span>
 <!-- или указываем отсутствие: -->
 <meta itemprop="availability" href="http://schema.org/OutOfStock" content="Отсутствует">
 <!-- если под заказ, то указываем: -->
 <meta itemprop="availability" href="http://schema.org/PreOrder" content="Под заказ">
 </div>
<!-- Указывается схема Review - отзыв о товаре -->
 <div itemprop="review" itemscope itemtype="http://schema.org/Review">
 <span itemprop="name">Отзыв о продукте</span>
 <!-- В поле date указывается дата публикации отзыва.-->
 <meta itemprop="datePublished" content="2017-06-20">20 июня 2017 года
 <!-- Указывается схема Rating - рейтинг отзыва -->
 <span itemprop="reviewRating" itemscope itemtype="http://schema.org/Rating">
 <!-- В поле worstRating метаинформацией указываем минимально возможный рейтинг.-->
 <meta itemprop="worstRating" content = "1">
 <!-- В поле ratingValue мета информацией указываем текущий рейтинг.-->
 <meta itemprop="ratingValue" content = "3">
 <!-- В поле bestRating метаинформацией указываем максимально возможный рейтинг.-->
 <meta itemprop="bestRating" content = "5"/>
 </span>
 <!-- Указывается схема Person.-->
 <span itemprop="author" itemscope itemtype="http://schema.org/Person">
 <!-- В поле name указываем имя автора.-->
 <span itemprop="name" class="name">Наталья</span>
 </span>
 <!-- В поле reviewBody указываем сам отзыв на товар.-->
 <div itemprop="reviewBody">Текст отзыва</div>
 </div>
</div>
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Виджиты yii2 для карточки товара и микроразметка

Сообщение svil »

Разметка должна быть

Код: Выделить всё

<!-- В поле name указывается наименование товара.-->
<h1 itemprop="name">Название товара </h1>
У меня detail-view

Код: Выделить всё

<?php
echo DetailView::widget([
'model' => $offer->product,
'attributes' => [
'name',

],
    'options' => ['#w1.table.td.th h1',  'itemprop'=>'name'],
]);
?>
Выводится:

Код: Выделить всё

<table id="w1" 0="#w1.table.td.th h1" itemprop="name">
<tr>
<th>Наименование</th>
<td>Инструмент. Кримпер для обжима 8P8C / 6P6C ( HY-668)</td>
</tr></table>
Как настроить options в detail-view, чтобы было

Код: Выделить всё

<table id="w1" 0="#w1.table.td.th h1" itemprop="name">
<tr>
<th>Наименование</th>
<td><h1 itemprop="name">Инструмент. Кримпер для обжима 8P8C / 6P6C ( HY-668)</h1></td> //здесь разметка
</tr></table>
Неужели только JS?
Аватара пользователя
Йож
Сообщения: 574
Зарегистрирован: 2015.08.26, 03:05

Re: Виджиты yii2 для карточки товара и микроразметка

Сообщение Йож »

А почему Вы не хотите просто во вьюшке вписать?

Код: Выделить всё

<h1 itemprop="name"><?= $offer->product->name ?></h1>
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Виджиты yii2 для карточки товара и микроразметка

Сообщение svil »

Код: Выделить всё

<?php
echo DetailView::widget([
'model' => $offer,
'attributes' => [

    [                                                  // name свойство зависимой модели owner
        'label' => 'Наименование',
        'format' => 'raw',
        'value' =>function($offer){
        return
       '<h1 itemprop ="name">'.$offer->product->name.'</h1>';
        },
    ],

],

]);
?>
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Виджиты yii2 для карточки товара и микроразметка

Сообщение svil »

Йож писал(а): 2019.05.10, 21:43 А почему Вы не хотите просто во вьюшке вписать?

Код: Выделить всё

<h1 itemprop="name"><?= $offer->product->name ?></h1>
Потому что настроено все под виджеты, там цена вытаскивается через виджет, если одно написать, то и остальные надо переделывать, стили менять
Аватара пользователя
svil
Сообщения: 563
Зарегистрирован: 2018.02.12, 22:41

Re: Виджиты yii2 для карточки товара и микроразметка

Сообщение svil »

Код: Выделить всё

<div itemscope itemtype="http://schema.org/Product">
<?php

use app\models\Offer;
use yii\helpers\Html;
use yii\widgets\DetailView;
use yii\grid\GridView;
use yii\helpers\ArrayHelper;
use app\widgets\Carousel;
use yii\data\ArrayDataProvider;
/**
 * @var Offer $offer
 */
$dataProvider = new ArrayDataProvider(['allModels' => $offer->product->getImages()->all()]);

echo Carousel::widget(['dataProvider' => $dataProvider, 'name'=>$offer->product->name]);
?>


<?php

echo "<br/>";

?>

<?php
echo DetailView::widget([
'model' => $offer,
'attributes' => [

    [                                                  // name свойство зависимой модели owner
        'label' => 'Наименование',
        'format' => 'raw',
        'value' =>function($offer){
        return
       '<h1 itemprop ="name">'.$offer->product->name.'</h1>';
        },
    ],

],



]);
?>
<?php
echo DetailView::widget([
    'model' => $offer,
    'attributes' => [

        [
            'label' => 'Описание',
            'format' => 'raw',
            'value' =>function($offer){
                return
                    '<div itemprop ="decription">'.$offer->product->description.'</div>';
            },
        ],
        [
            'label' => 'Артикул',
            'format' => 'raw',
            'value' =>function($offer){
                return
                  $offer->product->article;
            },
        ],



    ],

]);
?>
<!-- Указывается схема Offer - цена товара-->
<div itemprop="offers" itemscope itemtype="http://schema.org/Offer">

<?php
echo GridView::widget([
    'dataProvider' => $offer->getPrices()->joinWith(['type'])->search(),
    'columns' => [

        'performance',

        [
            'attribute' => 'value',
            'format' => 'raw',
            'value' => function ($price) {
                return
                    '<span itemprop="price" content="'.$price->value.'">'.$price->value.' руб.'.'</span>';

            }
        ]
    ]
]);


?>
    <meta itemprop="priceCurrency" content="RUB">
    <!-- Указывается свойство InStock, которое свидетельствует о том, что товар в наличии, данные выводим также метаинформацией -->
    <!-- указываем наличие: -->
    <meta itemprop="availability" href="http://schema.org/InStock" content="В наличии">

</div>

</div>
Ответить