Bezdepbonusu7Программирование: статьи и ответы

Вопрос

Лучший способ сохранить дополнительные данные для пользователя в Drupal 6

Автор вопроса: HortitudeОтветов: 3

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

Я мог видеть, как мы сохраняем данные, используя

  1. модуль профиля контента (уже используется на нашей стороне)
  2. модуль профиля
  3. столбец данных в пользовательской таблице
  4. создание нашей собственной таблицы

Мне кажется, что №1, вероятно, является наиболее логичным местом, однако создание узла в модуле не кажется тривиальным делом.

# 3 выглядит как типичный способ решить эту проблему, но просто наличие кучи сериализованных данных в общем поле - не лучший вариант.

Какие-либо предложения?

  • Для чего вы будете использовать дату на своем сайте? Когда, как часто вы будете его использовать? googletorp 13.12.2009
  • данные будут использоваться при каждом входе в систему для координации с другим сервером. Hortitude 13.12.2009

drupal

Ответы

Ответ 1 · рейтинг 5 · mac

ИМО, у каждого варианта есть свои плюсы и минусы, и вы должны быть тем, кто сделает окончательный выбор, учитывая, что вы единственный, кто знает, о чем ваш проект, каковы критические точки проекта, каковы ожидаемые типичный пользовательский шаблон, какие ресурсы доступны и т. д.

Если бы у меня была полная свобода выбора, моими личными фаворитами были бы варианты №4, №1 и №5 (подождите! №5? Да, см. Ниже!). Мои руководящие принципы при выборе:

  • Держите его чистым
  • Сделайте это простым
  • Сделайте его расширяемым

# 1 - Модуль профиля контента

Это будет чистое решение, так как вы упростите для разработчика поддержку вашего кода, поскольку все изменения для пользователя будут проходить через тот же канал, и это будет будет проще отслеживать проблемы или добавлять новые функции.

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

Что касается расширяемости, это зависит от того, насколько хорошо разработан API модуля профиля контента. Может возникнуть соблазн просто использовать таблицы, созданные указанным модулем, для ваших целей, минуя API, но это подвергает вас возможности того, что в один прекрасный день, когда вы торопитесь, при критическом обновлении безопасности вся система выйдет из строя из-за схема изменилась ...

# 4 - Создание собственной таблицы

Это было бы чистым решением, потому что вы могли бы спроектировать свою таблицу (и свой модуль так, чтобы он делал именно то, что вам нужно), и вы могли бы создать свой собственный API, который будет использоваться другие модули. С другой стороны, вы можете ввести еще один фрагмент кода, изменяющий процесс регистрации, и это может затруднить разработчикам отслеживание проблем и последовательное расширение системы.

Это было бы очень просто для реализации кода. Однако дизайн БД также выиграет: еще одна вещь, которую следует учитывать, - это то, что таблицы будет очень легко проверять и запрашивать. Создать новый обработчик для представлений в большинстве случаев очень просто: в 4 из 5 случаев вы просто используете один из объектов-прототипов, поставляемых вместе с представлениями.

Конечно, это было бы чрезвычайно легко расширить. После того, как вы создали модуль для одного поля, вы можете управлять любым количеством полей, в основном копируя / вставляя код для одного поля в другое (или наследуя от того же предка, если вы перейдете в ООП).

Я понимаю, что вы уже знакомы с drupal, но если вам нужен указатель на то, как это сделать, я дал некоторое направление в этот другой ответ.

# 5 - Создание собственной таблицы и перенос туда уже существующих полей

По сути, это было бы # 4 без недостатка функции рассеивания по различным модулям ... Конечно, если вы уже управляете 200 полями другим способом, это не жизнеспособный вариант, но если вы на ранней стадии своего дизайна, вы можете рассмотреть это .

По моему опыту, почти каждый проект, требующий системной интеграции (что означает: синхронизация данных для одного и того же пользователя в нескольких системах), имеет индивидуальные потребности для регистрации пользователей, и я нашел это решение, которое лучше всего соответствует моим потребностям по двум причинам:

  1. Я обнаружил, что повторно использую много пользовательского кода, который написал от проекта к проекту.
  2. Это наиболее гибкий способ интеграции данных с другой системой (в некоторых случаях я даже разделяю данные для пользователя на две настраиваемые таблицы, управляемые одним и тем же модулем: одна, содержащая настраиваемые поля, используемые только drupal, и одно, которое содержит "невидимые поля", как вы их называете. Я нахожу это очень удобным во многих сценариях, так как позволяет очень легко проверять и управлять данными двух систем по отдельности.

HTH!

Ответ 2 · рейтинг 1 · John Fiala

Если вы уже используете модуль Content Profile, я бы действительно посоветовал продолжить его использовать и прикрепить к нему поле. Вы сохраняете данные при создании учетной записи, и одновременно с этим создать узел для пользователя не так уж и сложно. Действительно.

$node = new stdClass();
$node->title = $user->name; // what I'd use, or you can have node auto title handle the title for you.  Up to you!
$node->field_hidden_field[0]['value'] = '$*#$f82hff';
$node->uid = $user->uid;
node_save($node);

Боб твой дядя!

Ответ 3 · Sri

Я бы выбрал вариант 3. В конце концов, даже другие модули будут хранить данные в базе данных против пользователя. Так что вы могли бы напрямую сохранить его сами, вероятно, более эффективным способом, чем эти модули.

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

Перевод вопроса и ответов сообщества Stack Overflow, лицензия CC BY-SA. Оригинал на Stack Overflow.

Похожие материалы