Как сделать LastModifier через YT - kulichkov-roman/prk GitHub Wiki

  • В init.php
AddEventHandler('main', 'OnEpilog', array('LastModifierHandler', 'CheckIfModifiedSince'));
  • В /local/php_interface/classes/Handler/ создаём файл LastModifierHandler.php в нем пишем
/**
 * Class LastModifierHandler
 */
class LastModifierHandler
{
    public function CheckIfModifiedSince()
    {
        $CLastModifierHelper = KSK\Helper\LastModifierHelper::getInstance();

        if ($strLastModifier = $CLastModifierHelper->getLastModifier())
        {
            header('Last-Modified: '.gmdate('D, d M Y H:i:s', $strLastModifier).' GMT');
            $arr = apache_request_headers();
            foreach ($arr as $header => $value)
            {
                if ($header == 'If-Modified-Since')
                {
                    $ifModifiedSince = strtotime($value);
                    if ($ifModifiedSince > $strLastModifier)
                    {
                        $GLOBALS['APPLICATION']->RestartBuffer();
                        CHTTP::SetStatus('304 Not Modified');
                    }
                }
            }
        }
    }
}
  • В /local/php_interface/classes/Helper/ создаём файл LastModifierHelper.php в нем пишим
<?
// KSK нужно заменить на нужный
namespace KSK\Helper;

/**
 * Class LastModifierHelper
 */
class LastModifierHelper
{
    /**
     * @var LastModifierHelper
     */
    protected static $instance = null;

    /**
     * @var $strLastModifier
     */
    private $strLastModifier;

    /**
     * @return LastModifierHelper
     */
    public static function getInstance()
    {
        if (is_null(self::$instance)) {
            self::$instance = new self();
        }
        return self::$instance;
    }

    protected function __construct()
    {}

    private function __clone()
    {}

    /**
     * Сохранить $strLastModifier
     */
    public function setLastModifier($lastModifier)
    {
        $this->strLastModifier = $lastModifier;
    }

    /**
     * Сохранить $strLastModifier
     */
    public function getLastModifier()
    {
        return $this->strLastModifier;
    }
}
?>
  • В карточка товара, новости или др. в result_modifier.php пишем
/*
 * Передать TIMESTAMP_X в кеш для установки в LastModifier
 * */
$cp = $this->__component;
if (is_object($cp))
{
    $cp->SetResultCacheKeys(array('TIMESTAMP_X'));
}
  • В карточке товара, новости или др. в component_epilog.php пишем
$CLastModifierHelper = KSK\Helper\LastModifierHelper::getInstance();

/*
 * Передать TIMESTAMP_X в кеш для установки в LastModifier
 * */
$CLastModifierHelper->setLastModifier(MakeTimeStamp($arResult['TIMESTAMP_X']));