/** * Create a sort url for the field named $title * and identified by $key which consists of * alias and field. $options holds all link * parameters like "alt, class" and so on. * * $key example: "article.title" * * @param SlidingPagination $pagination * @param string $title * @param string $key * @param array $options * @param array $params * * @return array */ public function sortable(SlidingPagination $pagination, $title, $key, $options = array(), $params = array()) { $options = array_merge(array('absolute' => defined('Symfony\\Component\\Routing\\Generator\\UrlGeneratorInterface::ABSOLUTE_PATH') ? UrlGeneratorInterface::ABSOLUTE_PATH : false, 'translationParameters' => array(), 'translationDomain' => null, 'translationCount' => null), $options); $params = array_merge($pagination->getParams(), $params); $direction = isset($options[$pagination->getPaginatorOption('sortDirectionParameterName')]) ? $options[$pagination->getPaginatorOption('sortDirectionParameterName')] : (isset($options['defaultDirection']) ? $options['defaultDirection'] : 'asc'); $sorted = $pagination->isSorted($key, $params); if ($sorted) { $direction = $params[$pagination->getPaginatorOption('sortDirectionParameterName')]; $direction = strtolower($direction) == 'asc' ? 'desc' : 'asc'; $class = $direction == 'asc' ? 'desc' : 'asc'; } else { $class = 'sortable'; } if (isset($options['class'])) { $options['class'] .= ' ' . $class; } else { $options['class'] = $class; } if (is_array($title) && array_key_exists($direction, $title)) { $title = $title[$direction]; } $params = array_merge($params, array($pagination->getPaginatorOption('sortFieldParameterName') => $key, $pagination->getPaginatorOption('sortDirectionParameterName') => $direction, $pagination->getPaginatorOption('pageParameterName') => 1)); $options['href'] = $this->router->generate($pagination->getRoute(), $params, $options['absolute']); if (null !== $options['translationDomain']) { if (null !== $options['translationCount']) { $title = $this->translator->transChoice($title, $options['translationCount'], $options['translationParameters'], $options['translationDomain']); } else { $title = $this->translator->trans($title, $options['translationParameters'], $options['translationDomain']); } } if (!isset($options['title'])) { $options['title'] = $title; } unset($options['absolute'], $options['translationDomain'], $options['translationParameters']); return array_merge($pagination->getPaginatorOptions(), $pagination->getCustomParameters(), compact('options', 'title', 'direction', 'sorted', 'key')); }