Изменить значение поля CCK [РЕШЕНО]
Прислано: maxim adamov
вс, 28/02/2010 - 21:04
Добрый вечер!
Прошу помочь разобраться в следующем вопросе:
Создан тип материала с использованием полей CCK. Нужно, чтобы значение одного из полей данного материла генерировалось бы из значений других полей, т.е., например у материала есть поле1, поле2, поле3,поле4. И мне нужно, чтобы значение поля4=поле1+поле2+поле3. При чем поле4 - обязательное поле, т.е. записать в него значение нужно до валидации формы.
Я понимаю, что такое можно легко реализовать с помощью javascript, но мне бы не хотелось делать это на стороне клиента. Гораздо лучше, если это можно сделать на сервере.
Заранее спасибо за помощь!
- maxim adamov's blog
- Для комментирования войдите или зарегистрируйтесь
А на стороне ТС, всегда желательно пользоваться поиском.
Conditional Fields
- Для комментирования войдите или зарегистрируйтесь
Спасибо, только не Conditional Fields, а Computed Field. Буду с ними разбираться. А все же ради любопытства есть ли возможность сделать это в своем модуле? Или это будет изобретение велосипеда?
- Для комментирования войдите или зарегистрируйтесь
Можно и в модуле, но займёт намного больше времени
- Для комментирования войдите или зарегистрируйтесь
Какая то странная проблема с Computed field. Здесь на форуме нашел похожую (), но там автор ее решил, выключив галочку store in database. Я так делать не хочу, потому что проект большой и это будет означать лишнюю нагрузку на сервер. Ситуация следующая.
Мне нужно автоматически заполнять поле Артикул (которое в ноду добавляет ubercart). Для этого я предпринял следующее:
1. Через hook_form_alter делаю его необязательным, потому что валидация происходит раньше выполненяи кода в computed field
2. В computed field пишу код:
if (!$node->nid) node_save($node); $node->model=нужное мне выражение;
И результат не сохраняется в базу при создании ноды, а только при пересохранении. Если написать
if (!$node->model) node_save($node);
То результат будет сохранятся с первого раза, но тогда выдает ошибку 404.
- Для комментирования войдите или зарегистрируйтесь
Т.е. я правильно понимаю, что никто никогда с подобным не сталкивался и помочь никто не может??? (((
- Для комментирования войдите или зарегистрируйтесь
пока что непонятно, что вы хотите в итоге получить.
если вы знаете слово "до валидации" то в чем проблема в собственном модуле определить собственную форму для ноды данного типа?
- Для комментирования войдите или зарегистрируйтесь
Ситуация такая, что форма уже определена и поля эти не хочется менять и переопределять. У меня есть тип товара, часть полей в котором созданы с помощью CCK,а часть добавлены сторонними модулями (в частности Ubercart). Мне нужно производить манипуляции как раз с полями, созданными Ubercart (Цена и Артикул). Если вы подскажете как это сделать в собственном модуле, то буду благодарен, использование computed fields не является обязательным для меня.
- Для комментирования войдите или зарегистрируйтесь
ну, грязный вариант - в своем модуле через альтер_форм вешать на нужную форму валидатор из своего модуля, и в нем меня данные как угодно. возникают только сомнения 1) ваш валидатор может быть в любом месте списка валидаторов 2) это все таки неправильно, менять данные в валидаторе
- Для комментирования войдите или зарегистрируйтесь
ваш валидатор может быть в любом месте списка валидаторов
Неправда. Свой валидатор можно засунуть каким угодно счёту, играем весом своего модуля, потом в массив валидаторов кидаем свой валидатор на первое место
2) это все таки неправильно, менять данные в валидаторе
С этим согласен
- Для комментирования войдите или зарегистрируйтесь
Неправда. Свой валидатор можно засунуть каким угодно счёту, играем весом своего модуля, потом в массив валидаторов кидаем свой валидатор на первое место
всегда была интересно, чтобы будет, если встретится два модуля, авторы которых им выставили максимальный (одинаковый) вес, будут запускаться в порядке именования модулей?
- Для комментирования войдите или зарегистрируйтесь
Неправда. Свой валидатор можно засунуть каким угодно счёту, играем весом своего модуля, потом в массив валидаторов кидаем свой валидатор на первое место
"orangeudav" написал(а):
2) это все таки неправильно, менять данные в валидаторе
С этим согласен
Если неправильно менять данные в валидаторе, тогда как в данной ситуации правильно поступить?
- Для комментирования войдите или зарегистрируйтесь
всегда была интересно, чтобы будет, если встретится два модуля, авторы которых им выставили максимальный (одинаковый) вес, будут запускаться в порядке именования модулей?
Если одинаковый вес, то по имени тогда.
Если неправильно менять данные в валидаторе, тогда как в данной ситуации правильно поступить?
Вы задачу по нормальному обрисуйте, хотя бы почему вам значение ещё до валидации нужно
- Для комментирования войдите или зарегистрируйтесь
Вы задачу по нормальному обрисуйте, хотя бы почему вам значение ещё до валидации нужно
Сейчас попытаюсь еще раз все изложить!
Задача:
1. Есть товар, часть полей которого созданы с помощью CCK и соответственно часть полей добавлены Ubercart`ом (цена, артикул и т.д.)
2. Мне нужно формировать содержимое полей цена, артикул и еще одного поля cck, исходя из значений других полей.
Получить значение поля до валидации теперь уже для меня не критично, потому, что я через hook_form_alter делаю эти поля необязательными.
Раз уж я все равно использую свой модуль и hook_form_alter, то тогда и действия со значениями, наверное, лучше делать в нем же.
Скажите, есть ли вариант через hook_form_alter на кнопку сохранить повесить свою функцию, которая вначале бы делала все необходимые мне операции с полями, а потом сохраняла бы форму.
Если так сделать можно и это будет нормально, пожалуйста, не ограничивайтесь лаконичным "Да", а хотя бы намекните как это сделать. Заранее благодарен!
- Для комментирования войдите или зарегистрируйтесь
В общем я добился того, что требовалось.
Через hook_form_alter я для кнопки "Сохранить" в начала массива #submit добавил свою функцию
array_unshift($form['buttons']['submit']['#submit'],my_submit1);
В которой уже произвожу все необходимые манипуляции:
function my_submit1($form, &$form_state){ $form_state['values']['model']=...... }
Все вроде работает и теперь мне хотелось бы услышать экспертное мнение на тему того, можно ли вообще так делать и хорошо ли это?
- Для комментирования войдите или зарегистрируйтесь
не сколько сабмитов для одной формы - стандартный прием
- Для комментирования войдите или зарегистрируйтесь
не сколько сабмитов для одной формы - стандартный прием
Ок, жаль, что я не знал этого раньше, но в любом случае всем большое спасибо за помощь!!!
- Для комментирования войдите или зарегистрируйтесь

Комментарии