Переписать "blog" -> "community" и "personal_blog" -> "blog"

Приветствую. Только изучаю LS. Пытаюсь сделать, казалось бы, тривиальную вещь — пути «blog» переписать на «community» а «personal_blog» на «blog».(те коллективные все становятся «community», а персональные «blog»).
$config['router']['rewrite']

тут не поможет… Как сделать? Куда смотреть?

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

avatar
Было бы круто…
avatar
1) Задать требуемые значения этих 2 строк в конфигурации:
$config['router']['page']['blog']          = 'ActionBlog';
$config['router']['page']['personal_blog'] = 'ActionPersonalBlog';

2) В файлах «ActionBlog.php», «ActionPersonalBlog.php», «ActionIndex.php» (это наиболее важные файлы) и менять формирование путей (как минимум вызовы Router::GetPath). Потенциально может потребоваться замена и в других файлах, в том числе плагинах и шаблонах.
3) Запустить сайт, попробовать работать, обнаружить ошибки, исправить их, отписаться о результатах в эту тему, чтобы люди, которым потребуется аналогичное решение, смогли решить вопрос быстрее.
avatar
Это печально, не хотелось бы терять совместимость и возможность обновления…
avatar
тогда не используйте существующий адрес т.е. «personal_blog» на «blog», используйте, например, «myblog»
avatar
ну это решение очевидно — по нему-то вопросов нет…
avatar
кроме того что это очевидно, это ещё и работает и без багов.
avatar
Подскажите пожалуйста, как переименовать personal_blog, например, в просто personal. Или может подскажите решение следующей проблемы. В главное меню добавил ссылку на Персональные блоги (personal_blog). Проблема в том, что когда переходишь по этой ссылке, в меню подсвечивается ссылка Топики, а нужно что бы подсвечивалась Персональные блоги.
avatar
Подскажите пожалуйста, как переименовать personal_blog, например, в просто personal.
$config['router']['rewrite'] = array('personal_blog' => 'personal');
avatar
Исправляем урлы топикам
\classes\modules\topic\entity\Topic.entity.class.php
public function getUrl() {
	if ($this->getBlog()->getType()=='personal') {
		return Router::GetPath('blog').$this->getId().'.html';
	} else {
		return Router::GetPath('community').$this->getBlog()->getUrl().'/'.$this->getId().'.html';
	}
}

Исправляем урлы блогам
\classes\modules\blog\entity\Blog.entity.class.php
public function getUrlFull() {
	if ($this->getType()=='personal') {
		return $this->getOwner()->getUserWebPath().'created/topics/';
	} else {
		return Router::GetPath('community').$this->getUrl().'/';
	}
}

Добавляем реврайты
$config['router']['uri'] = array(
	// короткий вызов топиков из личных блогов
	'~^(\d+)\.html~i' => "blog/\\1.html",
	'~^community/(\w+)/(\d+)\.html~i' => "blog/\\1/\\2.html",
	'~^community/(\w+)~i' => "blog/\\1",
);


теперь блог виден как http__://site.ru/community/blog_url/, топик в нем http__://site.ru/community/blog_url/1.html, а топики из личных так и остаются как http__://site.ru/blog/2.html

зы: пользуйтесь на свой страх и риск, понятия не имею к чему данная конструкция приведет, но задачу выше решает
avatar
Спасибо. Буду экспериментировать и отпишусь (я примерно таким же путем прошел — юзеры потеряли возможность подписываться на блоги). Вообще как-то странно, вроде мощный проект, а пути жестко зашиты в коде. Я бы сделал вроде magicstring_blog и magicstring_personalblog, а потом через
$config['router']['rewrite'] = Array('magicstring_blog'=>'blog', 'magicstring_personalblog' => 'personal_blog');

и народ менял бы как хотел… хотя я может чего-то не понимаю ) я в пхп не силен.
avatar
первый трабл — /blog/ выводит список коллективных блогов, а не персональных.
Соответственно хочется видеть по /community/ список коллективных. EventTopics в ActionBlog переписывать?
avatar
вообщем
class ActionCommunity extends ActionBlog 

там переписал
EventTopics

и
$config['router']['page']['community'] = 'ActionCommunity';

это все на что меня хватило )
avatar
Отписываюсь. Все сделал по рекомендации AlikMis . Но /blog/ выводил список коллективных. Заменил в EventTopics из ActionBlog Topic_GetTopicsCollective на Topic_GetTopicsPersonal. Стало лучше. Далее разбираемся с /community/ Пришлось создать свой экшн

$config['router']['page']['community'] = 'ActionCommunity';


создать класс

class ActionCommunity extends ActionBlog


внутри только одна функция EventTopics, код скопирован из ActionBlog только теперь с Topic_GetTopicsCollective. Подправил Настройки вывода блоков в config.php для community… вроде пока все живет.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.