Подскажите, пожалуйста, как решить следующую задачу на InstantCms 2.x.
Допустим, создаем сайт, на котором будут регистрироваться пользователи и есть пользовательские группы.
URL-адреса персональных страничек зарегистрированных пользователей сейчас выглядят так:
nazvanie-saita.domen/users/1
nazvanie-saita.domen/users/2
....
URL-адреса пользовательских групп выглядят так:
nazvanie-saita.domen/groups/1
nazvanie-saita.domen/groups/2
....
Нужно получить следующий вид.
URL-адреса персональных страничек зарегистрированных пользователей:
nazvanie-saita.domen/u/nickname-pervogo-polzovatelya
nazvanie-saita.domen/u/nickname-vtorogo-polzovatelya
или
nazvanie-saita.domen/u/chpu-imja-pervogo-polzovatelya
nazvanie-saita.domen/u/chpu-imja-vtorogo-polzovatelya
....
URL-адреса пользовательских групп:
nazvanie-saita.domen/g/nazvanie-pervoj-gruppy
nazvanie-saita.domen/g/nazvanie-vtoroj-gruppy
или
nazvanie-saita.domen/g/chpu-imja-pervoj-gruppy
nazvanie-saita.domen/g/chpu-imja-vtoroj-gruppy
....
Буду благодарен за советы и подсказки, как это можно реализовать.
Есть вот такой мануал:
docs.instantcms.ru/manual/settings/rewriting
Он позволяет решить часть задачи, заменить в URL-адресах "users" на "u", "groups" на "g".
Вторая часть задачи посложнее.
Нужно заменить в URL-адресах ID пользователя и ID группы на ЧПУ-строки (уникальные строки с использованием букв на английском, цифр, без пробелов и других специальных знаков, за исключением, возможно, "-" и "_").
— — — — — -
В моем случае поле "Nickname" будет содержать ФИО участника, допускается использовать кириллические символы.
Поэтому для ЧПУ-строки можно создать отдельное поле "Адрес Вашей странички" (системное имя — например, "chpu-url").
Для этого в админке идем в "Компоненты", выбираем "Профили пользователей", затем "Добавить поле".
Проставляем галочки "Поле должно быть заполнено" и "Только латинские буквы и цифры".
Остается прописать код, который будет для каждого пользователя при формировании URL получать значение поля "chpu-url" и подставлять его вместо ID.
Как это сделать — пока не знаю.
Буду благодарен за подсказки.
— — — — — -
Для пользовательских групп (групп, в которых группируются пользователи, контент, не путайте с группами уровня доступа) сложнее.
В админке управление настройками отдельных групп недоступно, а во фронт-части сайта есть возможность изменить название и описание группы, но нет возможности добавлять новые поля.
В моем случае количество пользовательских групп ограничено, создавать их могут только администраторы сайта.
Поэтому вполне допустимо не создавать специальное настраиваемое поле, а прописать напрямую в коде соответствие:
ID группы -> ЧПУ-адрес (это называется хеш-таблица, если не ошибаюсь).
— — — — — -
Нашел небольшой внешний мануальчик, как прописывать ЧПУ:
www.phpinfo.su/articles/practice/chpu_na_php.html
Доходчиво, возможно, пригодится.
— — — — — -
Бегло глянул в исходники сайта.
Пользователи и группы в движке реализованы как компоненты.
Не силен в PHP-программировании, но интуитивно догадываюсь, что можно подправить код в файлах "/system/controllers/users/action/profile.php" и "/system/controllers/groups/action/groups.php".
Данное решение будет корявым и негибким, поскольку при обновлении движка все прописанные изменения в коде сотрутся.
Более эффективным решением будет вынести, если это возможно, изменения в коде в отдельный компонент.
— — — — — -
Да, можно прописать код, который для адресов
nazvanie-saita.domen/u/chpu-imja-pervogo-polzovatelya
nazvanie-saita.domen/g/chpu-imja-vtoroj-gruppy
будет корректно выдавать информацию.
Но ведь остальная часть движка по-прежнему будет генерировать старые урлы.
Например, компонент "Генератор карты сайта", ...., да просто навигация по сайту!!
Поэтому корректно все запрограммировать — не так-то просто.
Возможно, решение уже есть.
Буду благодарен за наводки.
Владмир, какое решение нашли?
Вроде не гите чпу для группу уже есть. Похоже будет в коробке в следующей версии движка.
CREATE TABLE `cms_aliases` ( `alias` VARCHAR(200) DEFAULT NULL, `controller` VARCHAR(200) DEFAULT NULL, `action` VARCHAR(200) DEFAULT NULL ) ENGINE=InnoDB DEFAULT CHARSET=utf8; INSERT INTO `cms_aliases` (`alias`, `controller`, `action`) VALUES ('adminko', 'users', '1'), ('grupko', 'groups', '1'); ALTER TABLE `cms_aliases` ADD UNIQUE KEY `alias` (`alias`); ALTER TABLE `cms_users` ADD `alias` VARCHAR(200) CHARACTER SET utf8 COLLATE utf8_general_ci NULL DEFAULT NULL AFTER `email`, ADD UNIQUE (`alias`);
$db = cmsDatabase::getInstance(); $row = $db->getRow('aliases',"`alias` = '{$this->uri}'"); $this->uri_controller = $row['controller']; $this->uri_action = $row['action']; }