Sape View Helper для Zend Framework

Небольшой, но крайне удобый хелпер для тех, кто в своей работе использует замечательный Zend Framework.

Инструкция по эксплуатации

Все очень просто. Где-нибудь в бутстрапе его нужно проинициализировать:
Smapp_View_Helper_Sape::setOptions(array(
    'sape_user'         => '4821421b68_ваш_sape_user6',
    'charset'	        => 'UTF-8',
    'force_show_code'	=> true,
));
Далее, в тех местах view, где вы хотели бы выводить ссылки, необходимо вставить следующий код:

<?php echo $this->sape()?>

это равносильно вызову:

<?php echo $sape->return_links();?>

Все параметры и их значения идентичны параметрам SAPE_client. Соответственно, и все рекомендации по использованию - тоже :)
Почитать о них можно здесь в разделе "Для хостинга с поддержкой PHP";
тоесть в инструкции на sape.ru <? echo $sape->return_links(1); ?> через хелпер выглядит как <? echo $this->sape(1); ?> и так далее.
Разберетесь, в общем :) программисты же :)

Код

<?php
/**
 * SM's code library
 * 
 * @copyright   Copyright (c) 2010 Pavel V Egorov
 * @author      Pavel V Egorov <epavel@gmail.com>
 * @link        http://epavel.ru/sape-view-helper/
 */

class Smapp_View_Helper_Sape extends Zend_View_Helper_Abstract
{
    protected static 
$_options = array(
        
        
/**
         * 48d640_ваш номер_74a70e6
         */
        
'sape_user'            => null,
    
        
/**
         * версия клиента для которой написан хелпер
         */
        
'version'            => '1.0.8',
    
        
'verbose'            => false,
    
        
/**
         * http://www.php.net/manual/en/function.iconv.php
         */
        
'charset'            => '',
    
        
/**
         * Пожалейте наш сервер :о)
         */
        
'cache_lifetime'    => 3600,
    
        
/**
         * Если скачать базу ссылок не удалось, то следующая попытка будет через столько секунд
         */
        
'cache_reloadtime'    => 600,
    
        
/**
         * Если вдруг ваш сайт доступен и по IP - указывать обязательно
         */
        
'host'                => '',
    
        
/**
         * Если несколько сайтов в одной папке - указывать
         */
        
'multi_site'        => false,
    
        
/**
         * Способ подключения к удалённому серверу [file_get_contents|curl|socket]
         */
        
'fetch_remote_type' => '',
    
        
/**
         * Сколько ждать ответа
         */
        
'socket_timeout'     => 6,
    
        
/**
         * Для отладочых целей показывает <-- check code -->
         */
        
'force_show_code'    => false,
    
        
'debug'                => false,
    
        
/**
         * Регистронезависимый режим работы, использовать только на свой страх и риск
         */
        
'ignore_case'        => false,
    
        
/**
         * Путь к файлу с данными
         */
        
'db_file'            => '',
    
        
/**
         * Откуда будем брать uri страницы: $_SERVER['REQUEST_URI'] или getenv('REQUEST_URI')
         */
        
'use_server_array'    => false,
    
        
'force_update_db'    => false,
    );
    
    
/**
     * @var SAPE_client
     */
    
protected static $_client;
    
    
/**
     * 
     */
    
public function __construct()
    {
        if (
null === ($sapeUser $this->getOptions('sape_user'))) {
            throw new 
InvalidArgumentException('Не указан SAPE_USER [48d640_ваш номер_74a70e6]');
        }
        
        if (!
defined('_SAPE_USER')){
            
define('_SAPE_USER'$sapeUser); 
        }
        
        require_once(
$_SERVER['DOCUMENT_ROOT'].'/'._SAPE_USER.'/sape.php');
    }
    
    
    
/**
     * @return SAPE_client
     */
    
public function getClient()
    {
        if (
null === self::$_client) {
            
self::$_client = new SAPE_client($this->getOptions());
        }
        return 
self::$_client;
    }

    
/**
     * @return string
     * @param integer $n
     * @param integer $offset
     */
    
public function sape($n null$offset 0)
    {
        
$html $this->getClient()->return_links($n$offset);
        
        
/**
         * Сбросим флаг, чтобы при каждом вызове 
         * (например, когда выводится линки в разных местах)
         * база заново не высасывалась. Разочка хватит :)
         */
        
if ($this->getOptions('force_update_db')) {
            
$this->setOptions(array(
                
'force_update_db' => false
            
));
        }
        
        return 
$html;
    }
    
    public static function 
setOptions(array $options = array())
    {
        
self::$_options array_merge(self::$_options$options);   
    }
    
    public static function 
getOptions($optionKey null)
    {
        if (
$optionKey === null) {
            return 
self::$_options;
        }

        if (isset(
self::$_options[$optionKey]) === true) {
            return 
self::$_options[$optionKey];
        }

        return 
null;
    }
    
    public function 
direct()
    {
        return 
$this->sape();
    }
}