Приветствую вас!
Профиль пользователя дополнен полями ССK с помощью Content Profile. В нескольких полях (ну например в четырёх) пользователь должен выбрать некоторые значения из единого списка (виджет Select list). Есть словарь таксономии, в котором около сотни термов, этот словарь подключен к каждому из этих четырёх полей CCK с помощью Content Taxonomy, так что список значений для Select list формируется из термов словаря. Как не допустить того, чтобы значения полей повторялись? Если пользователь в одном из полей уже выбрал (использовал) один из термов словаря, как скрыть этот терм из Select List в оставшихся полях? Копал в направлении Conditional fields, Rules, но не могу победить
Комментарии
продолжаю поиск, вот что нарыл.
Когда создаешь поле CCK с типом виджета Select List нужно заполнить в этой форме раздел "Allowed values". Вариантов предлагается два:
1) просто текстовый список возможных значений (Allowed values list)
2) PHP код, который сформирует массив и вернёт список возможных значений (PHP code that returns a keyed array of allowed values. If this field is filled out, the array returned by this code will override the allowed values list above)
Видимо, второй вариант это как раз то, что мне нужно. Кусок кода, как мне представляется, должен сначала обратиться к словарю таксономии (к примеру, имя словаря "features", затем строить на основе его термов массив значений, проверяя для каждого добавляемого в массив терма, не был ли он уже выбран в каком-нибудь поле, и если был - то не добавлять. Имена полей такие: feature_1, feature_2, feature_3, feature_4.
Только вот беда, я не силён в PHP. Помогите плизз!
пока получилось лишь построить массив из термов нужного словаря с помощью функции taxonomy_get_tree. Таким образом смог отказаться от использования модуля Content Taxonomy и тип этих четырёх полей сейчас просто "текст". Не могу найти функцию, с помощью которой можно обратиться к полям профиля (который дополнен этими полями через Content profile), чтобы потом как-нибудь устроить проверку.
Помогите же плизз!
с помощью content_profile_load выдрал значения полей feature_1, feature_2, feature_3, feature_4 из профайла юзера(в виде номеров термов $tid словаря features) и поместил их во второй массив. Какие-то из этих полей юзер уже выбрал, какие-то остались пустые.
Все 4 select lists формируются, но корректно изымаются ранее использованные термы из списка только если после каждого выбора значения поля сохраняешь профайл кнопкой Save. Подскажите пожалуйста, как заставить нажиматься кнопку сохранения каждый раз после выбора терма в раскрывающемся списке select list?
Дальше устроил проверку нужным элементам второго массива: если элемент существует (содержит номер терма, который юзер уже выбрал в каком-то поле), то сделать unset элементу первого массива с ключом, равным номеру терма. Получился "прореженный" первый массив, содержащий термы из словаря features (кроме термов, ранее выбранных в каких-то полях юзером), который и возвращаю в качестве списка возможных значений для select list. И так для каждого поля feature_Х.
В результате это всё заработало, но не так как надо
Представляю, как вас коробит от созерцания подобных мучений с простейшими вещами. Может быть, кто-то знает, как решить эту задачу другим способом, более подходящим, эффективным, изящным в конце-концов...
+ подпишусь
Подскажите пожалуйста, как заставить профайл сохраняться каждый раз после выбора терма в раскрывающемся списке select list?
Это было нужно (заставить профайл сохраняться) потому что намеревался использовать для проверки уникальности комбинации полей Rules. Уже не нужно. Нашёл готовый модуль как раз для моей задачи: http://drupal.org/project/unique_field.