вторник, 30 июля 2013 г.

XCN: CleanURL для новой сущности

Итак - если у нас есть некая новая сущность, для которой надо прикрутить clean URL (например - некие сообщения, messages), то нам надо:

1. Добавить конвертацию из clean URL в target + page arguments (например - /Book.html -> ?target=product&id=10)

1.1. Перекрываем \XLite\Core\Converter::getCleanURLBook так, чтобы он возвращал новую пару - target => modelClass. Например:
protected static function getCleanURLBook($url, $last = '', $rest = '', $ext = '')
{
    $list = parent::getCleanURLBook($url, $last, $rest, $ext);
    $list['message'] = '\XLite\Model\Message';

    return $list;
}

1.2. Перекрываем репозиторий нужной модели и добавляем метод findOneByCleanUrl, примерно так:
public function findOneByCleanURL($url)
{
    return $this->createQueryBuilder('p')
        ->andWhere('p.cleanURL = :url')
        ->setParameter('url', $url)
        ->setMaxResults(1)
        ->getSingleResult();
}

2. Добавить билдер, строящий из target и его аргументов clean URL

2.1. Перекрываем \XLite\Core\Converter::buildCleanURLHook и пишем там примерно следующий код:
protected static function buildCleanURLHook($target, $action, array $params, array &$urlParams)
{
    parent::buildCleanURLHook($target, $action, $params, $urlParams);

    if ('message' == $target && !empty($params['id'])) {
        $model = \XLite\Core\Database::getRepo('\XLite\Model\Message')->find($params['id']);
    }
}





Комментариев нет:

Отправить комментарий