galancev/segmentator

Segmentator component

v2.2 2021-05-19 14:47 UTC

This package is auto-updated.

Last update: 2024-09-19 22:45:32 UTC


README

Для лёгкого создания сегментаторов

Для создания нового сегментатора нужно отнаследовать класс нового сегментатора от класса Segmentator, опционально поправить название куки, время её жизни и домен, на котором она должна работать. А так же обязательно определить методы getNewSegment и isCorrectSegment.

Пример:

<?php

use Galantcev\Components\Segmentator;

/**
 * Новый яростный сегментатор
 */
class NewPerfectSegmentator extends Segmentator
{
    /**
     * Имя куки
     * @var string
     */
    protected $cookieName = 'PerfectSegment';

    /**
     * Домен куки
     * @var string
     */
    protected $cookieDomain = '.google.com';

    const SEGMENT_SHOW_BLOCK = 1;
    const SEGMENT_HIDE_BLOCK = 2;

    /**
     * Генерирует новый сегмент
     * @return int
     */
    protected function getNewSegment()
    {
        $rand = mt_rand(0, 100);

        if ($rand <= 66) {
            $segment = self::SEGMENT_SHOW_BLOCK;
        } else {
            $segment = self::SEGMENT_HIDE_BLOCK;
        }

        return $segment;
    }

    /**
     * Проверяет сегмент на корректность
     * @param int $segment
     * @return bool
     */
    protected function isCorrectSegment($segment)
    {
        return in_array($segment, [
            self::SEGMENT_SHOW_BLOCK,
            self::SEGMENT_HIDE_BLOCK,
        ]);
    }

    /**
     * Если сегмент с отображением блока
     * @return bool
     */
    public function isSegmentShowBlock()
    {
        return $this->isSegment(self::SEGMENT_SHOW_BLOCK);
    }

    /**
     * Если сегмент со скрытием блока
     * @return bool
     */
    public function isSegmentHideBlock()
    {
        return $this->isSegment(self::SEGMENT_HIDE_BLOCK);
    }
}