Как получить короткую ссылку?

Всем привет! ))

Многим известно, что страницы топиков на базе движка LS можно открыть как по обычной ссылке site.ru/blog/0011.html, так и по короткой ссылке site.ru/0011.html

И здесь как раз таки назревает вопрос: Каким образом можно получить эту короткую ссылку так, чтобы ее можно было вывести в шаблоне?
То есть я так понимаю, что можно взять полную ссылку и добавить регулярные выражения для того, чтобы удалить все лишнее от нее, но, к сожалению, не владею регулярками, а все поиски решения не увенчались успехом. Или же есть более простое и элегантное решение этого вопроса? :) Хотя если нет, то как это можно решить с рег. вырами!?

Заранее признателен за ответы ))

UPD1: на данный момент вопрос решен 2-мя вариантами. Оба они, конечно не являются конечными и… эм… элегантными )) Но как варианты, возможны. Один из них просто в самом шаблоне прописать {cfg name='path.root.web'}/{$oTopic->getId()}.html
Второй вариант — livestreet.ru/blog/5077.html#comment75637

UPD2: В процессе возникла мысль вообще отказаться от длинных ссылок и сделать все ссылки на топики — короткими. В идеале, конечно, сделать это как это решено в любых сервисах, укорачивающих ссылки, то есть сделать все как предлагал Covax — livestreet.ru/YhsHGd (http://livestreet.ru/blog/wishlist/4552.html) С одной лишь разницей, что все ссылки будут именно такими, а не только укорачивание ссылки, которая будет просто вести на полную ссылку статьи.

Подскажите, пожалуйста, каким образом возможно реализовать это?

5 комментариев

avatar
покопайтесь тут
\classes\modules\topic\entity\Topic.entity.class.php
Как пример добавьте туда
public function getCutUrl() {
    	if ($this->getBlog()->getType()=='personal') {
    		return Router::$this->getId().'.html';
    	} else {
    		return Router::$this->getBlog()->getUrl().'/'.$this->getId().'.html';
    	}
    }

и в templates\skin\new\topic_list.tpl в 15 строке замените {$oTopic->getUrl()} на {$oTopic->getCutUrl()}
Получите вместо _http://livestreet.ru/blog/5077.html следующее _http://livestreet.ru/5077.html
avatar
Спасибо большое! =))
Сейчас попробую этот вариант.
А что касаемо постов в общих блогах? Каким образом там можно выдернуть ссылку короткую? Ведь там идет полная ссылка уже как site.ru/blog/nameofblog/123.html
avatar
public function getCutUrl() {
        if ($this->getBlog()->getType()=='personal') {
                return Router::$this->getId().'.html'; //  выводит site.ru/123.html
        } else {
                return Router::$this->getBlog()->getUrl().'/'.$this->getId().'.html';  выводит site.ru/nameofblog/123.html
        }
    }

Если сравнить getUrl() и getCutUrl() то можно заметить что собственно в getCutUrl() просто вырезана GetPath('blog') которая собственно и есть /blog/ в ссылке
avatar
В принципе работает. Только вместо _http://livestreet.ru/5077.html выводит просто 5077.html
Что нужно подкрутить так, чтобы выводило ссылку полностью вместе с доменом?
avatar
Сколько ни бился с тем, чтобы подставить к ссылке нужное значение, так ничего и не выходит.
Безусловно все можно сделать вкривь и вкось, через простое изменение шаблона, простым написанием такой вещи:
{cfg name='path.root.web'}/{$oTopic->getId()}.html
То есть все работает, но как то это не совсем правильно… хотя, как вариант имеет место быть :)

Пока думал как сделать это все более правильно, подумал над тем, а зачем вообще нужно дополнение .html в ссылках? Не только в коротких, но и вообще. То есть возможно ли на уровне движка вообще сделать ссылки автоматически короткими. То есть чтобы статьи по умолчанию открывались как site.ru/123
То есть без названий блогов и всего прочего в ссылках. Укоротить ссылки по максимуму на уровне движка.

Не знаете ли вы каким образом можно совершить подобное?
Нашел только вот такой вот пост по теме livestreet.ru/blog/questions/2689.html
Но так и не сумел добиться результата (((
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.