Уже есть модуль, который позволяет делать то, что вы пытаетесь сделать, но, поскольку вы хотите избежать установки модуля, вы можете создать модуль, который содержит следующий код:
function mymodule_url_outbound_alter(&$path, &$options, $original_path) {
if (preg_match('|^user/([0-9]+)(/.*)?|', $path, $matches)) {
if ($user = user_load($matches[1])) {
$path = 'user/' . $user->name . $matches[2];
}
}
}
function mymodule_url_inbound_alter(&$path, $original_path, $path_language) {
if (preg_match('|^user/([^/]+)(/.*)?|', $path, $matches)) {
$uid = db_query("SELECT uid FROM {users} WHERE name = :name", array(':name' => $matches[1]))->fetchField();
if ($uid) {
$path = "user/$uid" . $matches[2];
}
}
}
Этот код работает, если имена пользователей уникальны на вашем сайте. Это то, что обычно происходит на сайтах Drupal, где имя пользователя должно быть уникальным; если пользователь попытался создать учетную запись, используя уже существующее имя пользователя, он получит сообщение об ошибке.
Первый хук переписывает пути, такие как «user / 100» в «user / username», а другой хук выполняет обратную операцию. Это необходимо, поскольку Drupal ожидает пути пользователя в формате «user / userid» и не сможет обработать путь пользователя, содержащий имя пользователя (кроме случаев, когда вы используете псевдоним пути).
Как вы сказали, вам не нравится, что люди могут знать, сколько пользователей на вашем сайте, есть более простой способ избежать этого. Люди знают, что 123 является действительным идентификатором пользователя, но это не значит, что они знают, сколько пользователей зарегистрировано на вашем сайте: у вас может быть 1000 пользователей, 140 000 пользователей. Они просто знают, что у вас может быть 123 пользователя, но если вы заблокировали пользователей на своем сайте, то некоторые идентификаторы пользователей не будут использоваться.
- Создайте учетную запись пользователя, которая никогда не будет использоваться для входа в систему, и создавайте контент на вашем сайте.
- Редактирование таблицы базы данных «users» увеличивает ID пользователя созданной вами учетной записи. Предположим, что его идентификатор пользователя равен 146, увеличьте это число до 100.
- Теперь следующий пользователь, который зарегистрируется на вашем сайте, будет иметь идентификатор пользователя, равный 247.
- Увеличьте идентификатор пользователя фиктивной учетной записи, которую вы создали, увеличивая более высокий идентификатор пользователя.
Таким образом, если кто-то заметит, что существует учетная запись пользователя с идентификатором, равным 247, он ошибочно предположит, что у вас 247 пользователей.