Роутинг путей к профилю пользователя. Нужна консультация. [Решено 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)
UPD: Проблема №2 Решение:
Наиболее верным (универсальным на мой взгляд)является вариант:
В User.entity.class.php
После:
добавить
И в Router.class.php
После:
добавляем
Если есть иные, более верные идеи по реализации, буду рад их выслушать.
Остался нерешенным первый вопрос.
ps: Я понимаю, что используя хак, я получаю то, что должен был получить и неработоспособность некоторых элементов объективна. И данный хак не самый лучший вариант решения задачи, но ни одного решения, Грамотного, поиск не нашел. Придумать самостоятельно для меня пока-еще сложно и ничего толкового не получается. Поэтому использовал хак. Прошу оказать помощь, проконсультировать как решить проблемы которые у меня возникли… Опять-же знаю, что вопрос глупый, но прошу не ставить бесчисленно кол-во минусов.
Готов сделать донат в разумных пределах тому кто поможет если это нужно. Если Вы готовы помочь исключительно за донат, прошу связаться со мной по ЛС и предложить свои услуги.
Я только изучаю ls и мне очень важны Ваши советы и примеры. На основе их я изучаю структуру. Читал wiki, но без живых примеров по конкретным проблемам, к сожалению, очень тяжело.
С уважением.
Необходима была реализация роутинга путей к профилю пользователя для изменения вида ссылок: 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 комментария
нужно посмотреть файл User.entity.class.php
С User.entity.class.php я уже «ковырялся», но не «доковырял» до конца. А именно функция:
По моему разумению и указывает тот самый profile, который нужно убрать, но встал вопрос как убрать правильно. Мои скудные познания натолкнули меня пока только на одно решение:
но оно заведомо неверно насколько я понимаю… и на выходе дает ссылку site/user//wall (оставляя даблслэш)… Дальнейшие мои рассуждения привели меня лишь к одной мысли, что необходимо убирать один слэш после user тут я и завял. :(