ProductMicrodata.php 4.37 KB
<?php
namespace frontend\microdata;

use yii\base\BaseObject;


class ProductMicrodata extends  Microdata
{

    public $type=null;
    public $name=null;
    public $image=null;
    public $brand=null;
    public $aggregateRating=null;
    public $offers=null;
    public $description=null;
    public $npm=null;



    # массив, который составляет из себя реально существующие пары свойство/значение
    # !!! так же тут нету пар с пустым значением
    public $constructArray=[];

    public function __construct(array $config = [])
    {

        # обрезаю входящие свойства, работаем только с реально существующими
        foreach ($config as $key=>$value){
            if(!property_exists(self::class,$key))
            {
                unset($config[$key]);
            }
            elseif($value==null || $value===false || $value=='')
            {
                unset($config[$key]);
            }



        }

        $this->constructArray=$config;

        parent::__construct($config);
    }


    public function createJson()
    {

    }


    public function toJson(): string
    {
        $resultJson=" <script type=\"application/ld+json\">";

        $test=[];
        foreach ($this->constructArray as $key=>$value)
        {
            if($key=='type')$key='@'.$key;
            $test[$key]=$value;
        }

        $resultJson1=json_encode($test,JSON_UNESCAPED_UNICODE);
        $resultJson1=str_replace('\/','/',$resultJson1);
        $resultJson.=$resultJson1;
        $resultJson.='</script>';
        return $resultJson;
    }


    function add($key,$value)
    {
        if ($value!==null)
            $this->constructArray[$key]=$value;

    }


    public function test()
    {


        #Для страниц услуг где представлена только одна цена
        $productArray=[
            'type'=>'Product',
            'name'=> 'Executive Anvil',
            'image'=> [
                'https://example.com/photos/1x1/photo.jpg',
                'https://example.com/photos/4x3/photo.jpg',
                'https://example.com/photos/16x9/photo.jpg'
            ],
            'description'=>'Sleeker than ACME\'s Classic Anvil, the Executive Anvil is perfect for the business traveler looking for something to drop from a height.',
            'mpn'=>'925872',
            'brand'=>[
                'type'=> 'Thing',
                'name'=> 'ACME'
            ],
            'aggregateRating'=>
                [
                    'type'=> 'AggregateRating',
                    'ratingValue'=> '4.4',
                    'reviewCount'=> '89'
                ],
            'offers'=> [
                '@type'=> 'Offer',
                'priceCurrency'=> 'USD',
                'Price'=> '199.99',
                'priceValidUntil'=> '2020-11-05',
                'itemCondition'=> 'http://schema.org/UsedCondition',
                'availability'=> 'http://schema.org/InStock',
                'seller'=> [
                    'type'=> 'Organization',
                    'name'=>'Executive Objects']
            ]
        ];


        #Для страниц услуг где представлены 2 и больше цен
        $layout2=
            [
                '@context'=> 'http://schema.org/',
                '@type'=> 'Product',
                'name'=> 'Executive Anvil',
                'image'=>
                    [
                        'https://example.com/photos/1x1/photo.jpg',
                        'https://example.com/photos/4x3/photo.jpg',
                        'https://example.com/photos/16x9/photo.jpg'
                    ],
                'brand'=>
                    [
                        '@type'=> 'Thing',
                        'name'=> 'ACME'
                    ],
                'aggregateRating'=>
                    [
                        '@type'=> 'AggregateRating',
                        'ratingValue'=> '4.4',
                        'ratingCount'=> '89'
                    ],
                'offers' =>
                    [
                        '@type'=> 'AggregateOffer',
                        'lowPrice'=> '119.99',
                        'highPrice'=> '199.99',
                        'priceCurrency'=> 'USD'
                    ]
            ];


    }









}