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

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

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

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

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

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

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


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


Ответы (3)


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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

HTH!

person mac    schedule 16.12.2009

Если вы уже используете модуль 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);

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

person John Fiala    schedule 15.12.2009

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

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

person Sri    schedule 12.12.2009
comment
Недостатком столбца данных является то, что он просто хранит сериализованный массив, который нельзя напрямую запросить, используя что-то вроде представлений. Для приведенного выше варианта использования это может быть нормально, но о нем стоит упомянуть. Методы 1 и 2 будут работать с представлениями, метод 4 может работать с представлениями, но потребует дополнительного шага, чтобы сообщить представлениям о новой таблице. - person jhedstrom; 15.12.2009