Русскоязычный форум, посвященный фреймворку Kohana

Все о фреймворке Kohana. Обсуждение уроков, документации.
Текущее время: 19 мар 2024, 14:58

Часовой пояс: UTC + 4 часа [ Летнее время ]




Начать новую тему Ответить на тему  [ 1 сообщение ] 
Автор Сообщение
СообщениеДобавлено: 12 июн 2013, 19:45 
Не в сети
Бывалый
Аватара пользователя

Зарегистрирован: 02 апр 2013, 16:26
Сообщения: 474
Откуда: Сергиев Посад
Использовать жестко заданные ссылки не очень верно т.к. роуты могут изменить URL, соответственно придется везде вылавливать и менять ссылки, строить же ссылки непосредственно с помощью Route::url() неудобно, да и выглядит не читабельно(длинно). Поэтому я сделал вот такой метод-хэлпер, которой еще и кеширует результаты:
Код:
/**
 * Create a cache tag(id) using the attributes methods.
 *
 * @return  string
 */
public static function tag()
{
   return serialize(func_get_args());
}

/**
 * Create URL based on route. This is a shortcut for: Route::url. URL cached.
 *
 *     CMS::url('route:default'); // Home page
 *     CMS::url(''); // Current URL
 *     CMS::url('route:current,action:delete,id:2'); // Based on current route
 *     CMS::url('controller:article,action:list,page:2'); // Based on default route
 *     CMS::url('route:articles,controller:article,action:list,page:2');
 *
 * @param   string   $params       String with route params
 * @param   boolean  $escape_html  Convert url special characters to HTML entities?
 * @param   boolean  $lower_case   Convert url to lower case?
 * @param   mixed    $protocol     Protocol string or boolean, adds protocol and domain
 * @return  string
 * @uses    Request, Route, HTML, Text, UTF8
 * @uses    CMS::tag
 * @throws  CMS_Exception
 */
public static function url($params_str, $escape_html = TRUE, $lower_case = TRUE, $protocol = NULL)
{
   if (empty($params_str))
   {
      // Get current page URL
      $url = Request::initial()->url($protocol);
   }
   else
   {
      // Try load URL from cache
      if (Kohana::$caching)
      {
         $tag = CMS::tag('url', $params_str, $escape_html, $lower_case, $protocol);
         
         if ($url = Kohana::cache($tag))
         {
            return (string) $url;
         }
      }
      
      // Modify URL string in JSON and convert in array
      $url = str_replace(array(',', ':'), array('","', '":"'), $params_str);
      if ($params = json_decode('{"'.$url.'"}', TRUE, 2))
      {
         $route = isset($params['route']) ? $params['route'] : 'default';
         unset($params['route']);
         
         if ($route == 'current')
         {
            $request = Request::current();
            
            $params = array_merge($request->param(), $params);
            $params += array(
               'directory'  => $request->directory(),
               'controller' => $request->controller(),
               'action'     => $request->action(),
            );
            
            $route = Route::name($request->route());
         }
         
         $url = Route::url($route, $params, $protocol);
      }
      else
      {
         // Use links in format: 'option:value,option2:value2'
         throw new CMS_Exception('Wrong url format: :url', array(':url' => $params_str));
      }
   }
   
   // Use URL modificators
   $url  = ($escape_html ? HTML::chars($url) : $url);
   $url  = ($lower_case ? UTF8::strtolower($url) : $url);
   $url  = str_replace('\\', '/', $url).'/';
   $url  = Text::reduce_slashes($url);
   
   // Save result URL in cache
   if ( ! empty($params_str) AND Kohana::$caching)
   {
      Kohana::cache($tag, $url, Date::DAY);
   }
   
   return $url;
}

_________________
Майкл Джордан играет в баскетбол. Чарльз Мэнсон убивает людей. Я пишу код. У каждого свой талант.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ 1 сообщение ] 

Часовой пояс: UTC + 4 часа [ Летнее время ]


Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 3


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  
cron
Все о фреймворке Kohana  | 
Powered by phpBB® Forum Software © phpBB Group