Подскажите как реализовать данный функционал.
Каждая нода имеет поле (cck) с ценой. На сайте в настройках требуется указывать коэффициент, который будет использоваться в арифметическом действии с числовым значением (ценой) и нужно поле для вывода результата.
Комментарии
computed field
Именно.
Подскажите как правильно создать форму ввода этакого коэффициента для админа? Тоесть это должен быть или блок или отдельная страница где будет поле для смены значения.
Вообще по модулю http://drupal.org/project/computed_field]Computed Field">Computed">http://drupal.org/project/computed_field]Computed Field информация практически отсуствует. Нашел статью в которой автор говорит «тем кто не понимает в PHP ничего - не стоит лезть в этот модуль». Чтож с php буду разбираться сам, а вас очень попрошу просто рассказать как работает данный модуль. Или какие настройки мне нужно задействовать для своей задачи.
Еще раз подробно про то что нужно сделать.
1. При добавлении содержимого в нем будет заполняться поле с числовым значением (цена).
2. Необходимо место (лучше блок) с полем в которое администратор сможет вносить значение (коэффициент).
3. При просмотре записи рядом с ценой должно отображаться поле с результатом вычисления (цена умноженная на коэффициент)
Помогите найти ошибку:
Вначале я создам место в котором будет задаваться коэффициент
1. Создание нового типа материала (kurs)
2. Добавление к типу kurs поля field_koefecient
3. Создание записи типа материала kurs и ввод значения в поле field_koefecient
Затем настраиваю поле Computed Field которое будет перемножать значение из поля field_koefecient со значением из поля field_cena
4. Добавление к типу материалов tovar (с заполненным при создании полем field_cena) поля Computed и настройка:
Computed Code:
$node_field[0]['value'] = $node->field_koefecient[0]['value'] * $node->field_cena[0]['value'];
Display Format:
$display = '' . $node_field_item['value'];
Store using the database settings below: check
Data Type: float
Data Length:
10?Default Value: 0.00
Not NULL: check
Sortable: check
Данный способ не работает.
Очень прошу помочь найти ошибку.
Вроде все правильно.
Что именно не работает?
Computed Code:
$node_field[0]['value'] = $node->field_koefecient[0]['value'] .'*'. $node->field_cena[0]['value'];
Display Format:
$display = $node_field_item['value'];
Пытаюсь пересохранить ноду но выдает ошибку
Parse error: syntax error, unexpected '<' in Z:\home\sitename\www\sites\all\modules\computed_field\computed_field.module(161) : eval()'d code on line 1
Не надо использовать коннектацию строк, иначе выйдет строка, а не число. Вариант из предыдущего коммента был правильный.
Очевидно Вы оборачиваете код в <?php ?>, не помню надо ли это. Попробуйте без этого.
<code>
Результат всегда один - "ноль".
Пробовал воспользоваться советом direqtor - результат тот же.
Может я не правильно поля создавал?
Цена - Integer, Text field
Курс - Integer - Text field
Хотя это моя вторая попытка первый раз с Decimal пробовал и c float было все тоже самое.
При попытке внести изменения в существующий материал получаю:
Parse error: syntax error, unexpected '<' in Z:\home\site\www\sites\all\modules\computed_field\computed_field.module(161) : eval()'d code on line 1
При обновлении страницы:
Содержимое было изменено другим пользователем, изменения не удается сохранить.
Может ли это быть связано с установленным FCKeditor которое оказывает влияние на поле Computed Code:?
Поле Display Format: имеет описание: This code should assign a string to the $display variable, which will be printed as the value of the field. The stored value of the field is in $node_field_item['value']. Note: this code has no effect if you use the "Computed Value" formatter option. Alternately, this code can be supplied by your own custom function named computed_field_field_kurs_rezultat_display().
Тут в конце что то интересное но не совсем понятное.
Еще возможно вот это подскажет - при попытке сгенерировать содержимое при помощи Devel получаю:
Возникла ошибка. \n/batch?id=10&op=do\n
Parse error: syntax error, unexpected '<' in Z:\home\site\www\sites\all\modules\computed_field\computed_field.module(161) : eval()'d code on line 1
Parse error: syntax error, unexpected '<' in Z:\home\site\www\sites\all\modules\computed_field\computed_field.module(161) : eval()'d code on line 1
{ "status": true, "percentage": 36, "message": "Осталось 14 из 22.\x3cbr/\x3e\x26nbsp" }
А у вас в поле computed field случайно FCKeditor не стоит?
Как видите да это поле (а именно поле настроек "Computed Code" если я вас правильно понял) обрабатывается FCKeditor`ом. Но где отключить эту обработку? Я экспериментировал с отключением некоторых фильтров в "Форматы ввода" но так ничего и не добился. Хотя тогда торопился и мог что то пропустить.
Так же стоит отметить что для этого поля (Computed Code) нельзя выбрать формат ввода так как к примеру при создании нод.
А на кой чёрт там выбирать формат ввода? Там должен быть голый текст.
Отключите fuckeditor как угодно, ссылкой под ним, в настройках самого редактора, или модуль напрочь.
Чтобы выбрать формат который не будет преобразовывать мой код ни во что кроме как в голый текст.
Как его для данного поля отключить? В настройках самого редактора это в Edit FCKeditor Global profile? Visibility settings добавлением Fields to exclude/include?
Там уже голый текст стоит и форматы не предусмотрены. А вот то что какой-то редактор суёт себя во все поля админки - это сугубо проблемы админа.
По умолчанию FCK Editor суёт себя во все текстовые поля. Но внизу появляется инфа об адресе страницы и ID формы. Настройте в Global Profile редактора исключение для ID этой формы.
Лоханулся. Там должен быть ID textarea...
Добавил в настройках FCKeditor: FCKeditor Global Profile - Visibility settings - Fields to exclude/include: строку admin/content/node-type/название-типа-материала/fields/field_kurs_rezultat.edit-code
Поле Computed Code теперь не форматируется. Ошибок после изменения материала нет. Но результат все ровно "0", то есть то что я указал в Default Value.
Может нужно как то иначе построить Display Format? Там ниже поля существует подсказка:
This code should assign a string to the $display variable, which will be printed as the value of the field. The stored value of the field is in $node_field_item['value']. Note: this code has no effect if you use the "Computed Value" formatter option. Alternately, this code can be supplied by your own custom function named computed_field_field_kurs_rezultat_display().
Возможно я глупость спрошу так как с php не знаком но все же ... Может быть переменную в которой я пытаюсь задать коэффициент нужно определить как глобальную?
Делайте по частям.
1. Сначала отображение поля:
$display = 123;
Должно отобразить 123.2. Потом передачу из значения в отображение:
$node_field[0]['value'] = 123;
$display = $node_field_item['value'];
3. Окончательный код.
PS: Я надеюсь ноду вы пересохраняете для расчёта значения?
Первые два шага работают. Третий, когда вставляю код - нет, вернее опять ноль выдает.
Ноду пересохраняю.
$node_field[0]['value'] = 1+1; тоже считает правильно, а с переменными не хочет
Поля цены и коэффициента - Decimal
Пробовал на голом Drupal без всяких визивиг и проч модулей, только CCK и Computed field
А модуль PHP filter включён?
Модуль PHP filter включал, разрешения устанавливал, в настройках роли задавал, ноду и настройки полей пересохранял - ноль
Нашёл небольшой совет в разделе проекта на drupal.org (http://drupal.org/node/149225):
If you have a computed field that depends on another, then give it a higher weight. Otherwise you will get an older value of the field, or none at all.
Короче говоря, советуют назначить вес полю больше. Так что можно еще с весом поля поэскперементировать
Пример [#54313]Computed Field - математика с полями[/#]
Народ, доброго времени!
А кто нибудь решил проблему? у меня такая же шляпа.НО, если отключить Content translation и Locale то все работает как часы.
Вот мой код:
$start = strtotime($entity->field_begin_policy_date[LANGUAGE_NONE][0]['value']);
$end = strtotime($entity->field_begin_policy_date[LANGUAGE_NONE][0]['value2']);
$difference = ($end - $start);
$entity_field[0]['value'] = $difference/(86400)+1;
------
$display_output = $entity_field_item['value'] . " дн.";
---
вот можно почитать [##149228]Computed Field Code Snippets[/##]
что то тоже лыжи не едут
Computed Code (PHP)
$entity_field[0]['value'] = $entity->field_ch[0]['value'];
Display Code (PHP)
$display_output = $entity_field_item['value'];
проблема с этим полем $entity->field_ch[0]['value'], если его заменить на число то все работает. я так полагаю я неправильно обращаюсь к переменной.
Drupal 7 правильно ли что пишу $entity а не $node?
Ставьте devel и http://shaman.asiadata.ru/node/366
2TS,
Я использую друпал 7. думаю различия если буду то небольшие.
1)создаем тип материала "курс". добавляем в него десятичное поле "field_usd" тип для поля--десятичное.
2)добавляем материал, заполняем поля к примеру ставим для field_usd значение 100500.
3)запоминаем айди только что добавленной ноды(к примеру 40000000)
4)устанавливаем https://drupal.org/project/computed_field
5)создаем новый тим материала "товар"
6)создаем поле price_usd тип поля десятичный
7)создаем поле price_rub тип поля computed_field, когда сохраняем у нас появляются Display Code (PHP)--оставляем без изменения и Computed Code (PHP) и вот в него вставляем следующий код
<?php$nd=node_load(40000000);
$entity_field[0]['value'] = round($nd->field_usd['und'][0]['value']*$entity->price_usd['und'][0]['value'],2) ;?>
а теперь по пунктам--в переменную $nd мы загружаем нашу ноду. берем её значение $nd->field_usd['und'][0]['value'] и умножаем на значение $entity->price_usd['und'][0] . ну и округляем до двух знаков после запятой.
ВСЁ)
да и самое главное убираем галочку с "Store value in the database". и у нас значение этого поля будет генерироваться динамически. стоит только изменять курс и зафлашить кеш.
ну и
Спасибо, zhen4ek - все работает!
Как вывести номер ноды?
Это: $entity_field[0]['value'] = $nid; не работает.
как вообще переменные выводить?