роутинг новостей

Как сделать
Есть блог 'news'
Открывается он как ***.ru/blog/news
Создал новый экшен — который отображает Блог по ссылке ***.ru/news
Но внутренние сслыки Переходят на ***.ru/blog/news/1.html
Оно исходит из {$oTopic->getUrl()}. Как сделать ***.ru/news/1.html?

И как пользоваться внутренними функциями работы с контентом. Нужно получить массив последних 5-и топиков. Сейчас пока делал своими запросами… но явно же есть уже написаные функции.

п.с. нижняя панель не учитывает запросы которые я сам писал.

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

avatar
В файле classes\modules\topic\entity\topic.entity.class.php есть функция:

public function getUrl() {
if ($this->getBlogType()=='personal') {
return DIR_WEB_ROOT.'/blog/'.$this->getId().'.html';
} else {
return DIR_WEB_ROOT.'/blog/'.$this->getBlogUrl().'/'.$this->getId().'.html';
}
}

В вашем случае нужно удалить .'/blog/'. и оставить только.
avatar
только точку :)
avatar
идея ооочень крутая!
было бы очень хдоровр реализовать это, чтобы иметь короткие и более красивые адреса блогов!
avatar
<code>public function getUrl1() {
    	if ($this->getBlogType()=='personal') {
    		return DIR_WEB_ROOT.'/'.$this->getId().'.html';
    	} else {
    		return DIR_WEB_ROOT.'/'.$this->getBlogUrl().'/'.$this->getId().'.html';
    	}</code>

Это же даст нам ссылку на ***.ru/news/1.html
Но ссылка то на самом деле не действительна в системе.
Кто отвечает за реврайт?
avatar
Сам же написал, что «который отображает Блог по ссылке ***.ru/news» и тебе осталось только внутренние ссылки поменять. Если у тебя не отображается, то дело не в ссылках.
avatar
В config.route.php:
<code>define("ROUTE_PAGE_NEWS",'news');</code>

<code>ROUTE_PAGE_NEWS => 'ActionNews',</code>


В ActionNews.class.php стоит немного измененный ActionBlog.class.php
Возможно, в нём как раз нужно было определить эти внутренние ссылки. (хотя я очень сомневаюсь, что это здесь хранится)

Тобишь, сейчас в браузере работает ***.ru/blog/news/1.html, но не работает ***.ru/news/1.html (функция getUrl позволила только поменять шаблонную ссылку)
avatar
> не работает ***.ru/news/1.html

А что пишет? Может это поможет решить проблему?

Думается мне, что вы слишком мало действий произвели :) Там ведь надо в шаблонах actions тоже создавать ActionNews со своим index.tpl, потом надо создавать новые функции для вывода новых, плохих и хороших новостей.

avatar
\www\templates\skin\new\actions\ActionNews
Всё правильно, забыл только написать. Создал в шаблонах я тоже аналог блога.
Там в индексе указал на созданный {include file='topic_list_news_blog.tpl'}
Уже в котором я и использую {$oTopic->getUrl1()}

А на *.ru/news/1.html пишет «Ошибка: 404 К сожалению, такой страницы не существует и т.д...»
avatar
Возможно за основу надо было брать не Action.PersonalBlog.class.php, а Action.Blog.class.php. Так как в нем есть такая строчка интересная тебе:

* Если номер топика правильный но УРЛ блога косяный то корректируем его и перенаправляем на нужный адрес

<code>if ($oTopic->getBlogUrl()!=$sBlogUrl) {
			func_header_location(DIR_WEB_ROOT.'/blog/'.$oTopic->getBlogUrl().'/'.$oTopic->getId().'.html');
		}</code>


Возможно это то, а если нет, то бросай ты эту затею :)
avatar
Я и так брал Action.Blog.class.php (выше написано)
Строчку тоже изменял.
Тут что то на уровне .htaccess но в этой версии я не знаю чем он управляется.
В общем — сейчас пока откажусь от этой затеи. Но в ближайшее время обязательно её сделаю.
Если есть идеи — буду благодарен. Попробую изучить ещё класс PAGE.
avatar
Сейчас покапался.
Дело в этом:
$this->AddEventPreg('/^[\w\-\_]+$/i','/^(\d+)\.html$/i','EventShowTopic');
Тут где то было описано как это работает.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.