Роутинг путей к профилю пользователя. Нужна консультация. [Решено 100%]

Добрый день! Субботы всем!
Необходима была реализация роутинга путей к профилю пользователя для изменения вида ссылок: site/profile/koptev/ на site/koptev/
Пользуясь поиском, и открыв 6 тем по данному вопросу, которые удалось найти, я реализовал все грубым хаком основываясь на топиках livestreet.ru/blog/9685.html и livestreet.ru/blog/7549.html и в целом, с задачей своей хак справляется, но не до конца. Сразу оговорюсь, что эксперименты я проделываю на шаблоне developer — new.livestreet.ru/ и 1.0 dev версии ls… Проблемы:



Проблема №1:
После хака site/koptev/ открывается, все работает. Ссылки вида site/blog — тоже работают. Страницы вида site/koptev/что-то, например site/koptev/wall, которая ранее открывалась site/profile/koptev/wall открываются, но на них отсутствует сайдбар и вместо контента wall (стена и форма ввода) — идет отображение профиля пользователя. Так для всех ссылок после имени пользователя… user/wall, user/favorites и т.п. Вопрос: как организовать работоспособность внутренних страниц профиля которые идут после /user/*тут?

Проблема №2:
В сайдбаре профиля есть меню. Ссылки в меню вызываются следующим образом (например ссылка к site/profile/koptev/wall)
<a href="{$oUserProfile->getUserWebPath()}wall/">
Соответственно после хака которым мы убрали /profile/ перед /user/ нам нужны ссылки в меню без /profile/. Вопрос: Как и где можно отредактировать getUserWebPath таким образом, чтобы она брала только имя пользователя, без /profile/

UPD: Проблема №2 Решение:

Наиболее верным (универсальным на мой взгляд)является вариант:

В User.entity.class.php

После:
public function getUserWebPath() {
		return Router::GetPath('profile').$this->getLogin().'/';
	}


добавить

public function getUserWebPath() {
		return Router::GetProfilePath('').$this->getLogin().'/';
	}


И в Router.class.php
После:
static public function GetPath($action) {
		// Если пользователь запросил action по умолчанию
		$sPage = ($action == 'default') 
			? self::getInstance()->aConfigRoute['config']['action_default']
			: $action;
		
		// Смотрим, есть ли правило rewrite
		$sPage = self::getInstance()->Rewrite($sPage);
		return rtrim(Config::Get('path.root.web'),'/')."/$sPage/";
	}

добавляем

static public function GetProfilePath($action) {
		// Если пользователь запросил action по умолчанию
		$sPage = ($action == 'default') 
			? self::getInstance()->aConfigRoute['config']['action_default']
			: $action;
		
		// Смотрим, есть ли правило rewrite
		$sPage = self::getInstance()->Rewrite($sPage);
		return rtrim(Config::Get('path.root.web'),'/')."/$sPage";
	}


Если есть иные, более верные идеи по реализации, буду рад их выслушать.

Остался нерешенным первый вопрос.

ps: Я понимаю, что используя хак, я получаю то, что должен был получить и неработоспособность некоторых элементов объективна. И данный хак не самый лучший вариант решения задачи, но ни одного решения, Грамотного, поиск не нашел. Придумать самостоятельно для меня пока-еще сложно и ничего толкового не получается. Поэтому использовал хак. Прошу оказать помощь, проконсультировать как решить проблемы которые у меня возникли… Опять-же знаю, что вопрос глупый, но прошу не ставить бесчисленно кол-во минусов.

Готов сделать донат в разумных пределах тому кто поможет если это нужно. Если Вы готовы помочь исключительно за донат, прошу связаться со мной по ЛС и предложить свои услуги.

Я только изучаю ls и мне очень важны Ваши советы и примеры. На основе их я изучаю структуру. Читал wiki, но без живых примеров по конкретным проблемам, к сожалению, очень тяжело.

С уважением.

4 комментария

avatar
Пользуясь поиском, и открыв 6 тем по данному вопросу, которые удалось найти, я реализовал все грубым хаком
как именно?

Как и где можно отредактировать getUserWebPath таким образом, чтобы она брала только имя пользователя, без /profile/
нужно посмотреть файл User.entity.class.php
  • ort
  • +1
avatar
А именно тем, что Вы, уважаемый ort, не одобрили… простите, но к сожалению иного выходя я не смог придумать. Этим хаком: livestreet.ru/blog/9685.html реализовано.

С User.entity.class.php я уже «ковырялся», но не «доковырял» до конца. А именно функция:
public function getUserWebPath() {
return Router::GetPath('profile').$this->getLogin().'/';


По моему разумению
GetPath('profile')
и указывает тот самый profile, который нужно убрать, но встал вопрос как убрать правильно. Мои скудные познания натолкнули меня пока только на одно решение:
public function getUserWebPath() {
return Router::GetPath('').$this->getLogin().'/';

но оно заведомо неверно насколько я понимаю… и на выходе дает ссылку site/user//wall (оставляя даблслэш)… Дальнейшие мои рассуждения привели меня лишь к одной мысли, что необходимо убирать один слэш после user тут я и завял. :(
avatar
  • ort
  • +1
avatar
Максим… Вам цены нет! Спасибо огромное.
Только зарегистрированные и авторизованные пользователи могут оставлять комментарии.