Изменить URL "изменить аккаунт" в Drupal - PullRequest
0 голосов
/ 05 ноября 2011

При переходе на редактирование аккаунта или редактирование профиля в Drupal 7, URL выглядит примерно так: http://localhost/user/123/edit, где 123 - идентификатор пользователя. Из-за этого каждый может видеть, сколько пользователей на сайте, а я этого не хочу. Есть ли способ, которым я могу изменить его на что-то вроде http://localhost/user/edit или что-то без ID?

Я попытался настроить пункт меню в моем модуле, который действует как страница редактирования учетной записи / профиля, но безуспешно.

Кроме того, я не хочу устанавливать новый модуль для этого, я бы просто написал свой код.

Ответы [ 3 ]

1 голос
/ 06 ноября 2011

Уже есть модуль, который позволяет делать то, что вы пытаетесь сделать, но, поскольку вы хотите избежать установки модуля, вы можете создать модуль, который содержит следующий код:

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 пользователей.

1 голос
/ 06 ноября 2011

Теоретически вы можете объединить модуль Pathauto (широко используемый модуль, используемый на более чем 250 000 сайтах D6 и D7, который предоставляет псевдонимы URL для обычных узловых и пользовательских путей и т. Д.) С *Модуль 1003 * Sub-pathauto (новый модуль D7, в настоящее время используется только на нескольких сотнях сайтов).Модуль Sub-pathauto является единственным модулем Drupal 7, о котором я знаю, который позволит вам псевдоним части user / uid пути user / uid / edit -type.

С другой стороны, еслиВаша цель состоит в том, чтобы просто создать иллюзию, что у вас может быть больше, чем несколько пользователей, при запуске нового сайта Drupal вы можете просто увеличить индекс UID, добавив (затем удалив) группу автоматически сгенерированных пользователей (с * 1007).* Devel generate), или так как это индекс с автоинкрементом, вы, вероятно, могли бы вручную создать пользовательскую запись в базе данных с индексом 1507 или около того, а затем любая запись, созданная Drupal после этого, начиналась бы с 1508даже после того, как вы удалили фиктивную запись из таблицы.(Предостережение: я никогда не делал этого, но в теории это должно работать.)

Надеюсь, это поможет.: -)

0 голосов
/ 15 ноября 2012

В конце концов я создал hook_user_insert и добавил 2 псевдонима URL в таблицу urlalias:

user/$user->uid/edit -> user/$user->name/edit

и

user/$user->uid/edit/profile -> user/$user->name/edit/profile

Надеюсь, это кому-нибудь поможет.

...