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

Главные вкладки

Аватар пользователя iNFerNo iNFerNo 23 мая 2013 в 11:00

Значит есть тип материала с числовым полем (для решения задачи нужно видимо др тип поля - вычисляемое).
Есть тип второй тип материала с числовым полем. и с полем стутус (в обработке, проверено)
Типы связаны по entity reference.

Пользователь создает второй тип материала который автоматически привязывается к первому, вводит значение числового поля и сохраняет. Нода автоматически получает статус в обработке. И выводится во вьюсе, который выводится в ноде первого типа материала.

Модератор проверяет созданную ноду второго типа материала и если все ок ствит статус - проверено, сохраняет ноду и после этого должно происходить автоматически следующее...

в поле первого типа материал должно занестись сумму значений всех полей нод второго типа со статус - проверено.

пи.эс. сейчас все тупо считается в уме/калькяторе и заносится в числовое поле. Хочется автоматизировать процесссс...

Комментарии

Аватар пользователя iNFerNo iNFerNo 23 мая 2013 в 11:13

возможно можно заюзать модуль http://drupal.org/project/views_calc и во вьюхе где будет считаться сумма нужных полей, результата который и будет заносится каким то макаром в нужное поле нод типа материала

Аватар пользователя josgir josgir 23 мая 2013 в 13:36

Да агрегация само-то - включаешь в Расширении, и в настройках агрегации для нужного поля выставляешь Сумма, должно суммировать.

Аватар пользователя josgir josgir 23 мая 2013 в 16:00

"iNFerNo" wrote:
в поле первого типа материал должно занестись сумму значений всех полей нод второго типа со статус - проверено.

Всех полей всех нод или всех полей созданной ноды?

Аватар пользователя serega111 serega111 23 мая 2013 в 20:43

Сам спросил, сам ответил. Rules + Rules Views. Несколько последовательных actions отрабатывают при изменении статуса на "проверено"
views aggregation не помогут, так как надо менять именно значение в ноде, а не отображаемое число, как я понял.

Аватар пользователя serega111 serega111 24 мая 2013 в 6:49

1. Создаем вьюху с вторым типом материала, нужна чтобы использовать ее в Rules
2. Создаем правило, которое запускается после обновления ноды.
3. В условии проверяем тип ноды (равен второму типу материалов), статус и существование поля entity reference.
4. В actions сначала загружаем ноды из вьюхи, потом суммируем значения полей нод из вьюхи. Этого action в готовом виде я не нашел, может нете нужно поискать (тут вроде что то есть http://drupal.org/node/1600272), либо самому написать. Последний action должен предоставить переменную для Rules.
5. Из entity reference загружаем ноду, устанавливаем в ней новое значение.

Аватар пользователя iNFerNo iNFerNo 10 ноября 2015 в 11:49

"serega111" wrote:

1. Создаем вьюху с вторым типом материала, нужна чтобы использовать ее в Rules

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

"serega111" wrote:
2. Создаем правило, которое запускается после обновления ноды.

а при сохранение ноды тоже подойдет?

"serega111" wrote:
3. В условии проверяем тип ноды (равен второму типу материалов), статус и существование поля entity reference.

добавлено все кроме существования поля - скорее всего не так добавляю.

скриншот прилагается.

Аватар пользователя serega111 serega111 24 мая 2013 в 13:32

"iNFerNo" wrote:
а при сохранение ноды тоже подойдет?

конечно, там тоже есть такое событие
"iNFerNo" wrote:
добавлено все кроме существования поля - скорее всего не так добавляю.

Entity has field - это то, что надо.
"iNFerNo" wrote:
как загрузить ноды из вьюхи для конкретной ноды

для этого нужно создать по вью отдельный дисплей, неважно какой. Для него задать контекстный фильтр - поле Entity reference. В Rules в качестве аргумента вью передаете id ноды.

Я, наверно уже запутался в связях, которые у вас есть. Но в любом случае контекстный фильтр по Entity reference должен помочь.

Также, чтобы просуммировать значение полей может стоит в Rule создать loop

Аватар пользователя iNFerNo iNFerNo 24 мая 2013 в 13:57

"serega111" wrote:
Entity has field - это то, что надо.

я пробовал
я там выбрал поле (без ... в конце)

и выбрал в области значение - это же поле (название).

Аватар пользователя iNFerNo iNFerNo 24 мая 2013 в 14:00

"serega111" wrote:
для этого нужно создать по вью отдельный дисплей, неважно какой. Для него задать контекстный фильтр - поле Entity reference. В Rules в качестве аргумента вью передаете id ноды.

так у меня и так во вью есть этот контекстный фильтр. он бы бы тогда этот диспей бы не выводился бы в ноде (первый тип материала).

я читал что для выборок из рулесов нужно отедлный дисплей создавать рулес_дисплей.

Аватар пользователя iNFerNo iNFerNo 24 мая 2013 в 14:19

Пока что сделано это

<?php
"rules_sumvalue" : {
    
"LABEL" "\u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439",
    
"PLUGIN" "reaction rule",
    
"REQUIRES" : [ "rules" ],
    
"ON" : [ "node_update" ],
    
"IF" : [
      { 
"node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "funding" "funding" } } } },
      { 
"entity_has_field" : { "entity" : [ "node" ], "field" "field_payment_status" } },
      { 
"entity_has_field" : {
          
"entity" : [ "node:field-entity-ref-funding-link" ],
          
"field" "field_entity_ref_funding_link"
        
}
      }
    ],
    
"DO" : [
      { 
"VIEW LOOP" : {
          
"VIEW" "test",
          
"DISPLAY" "views_rules_1",
          
"USING" : { "nid" : [ "node:field-entity-ref-funding-link:nid" ] },
          
"ROW VARIABLES" : [],
          
"DO" : []
        }
      }
    ]
  }
}
?>
Аватар пользователя iNFerNo iNFerNo 24 мая 2013 в 14:29

или может так правильнее

<?php{ "rules_sumvalue" : {
    "LABEL" : "\u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439",
    "PLUGIN" : "reaction rule",
    "ACTIVE" : false,
    "REQUIRES" : [ "rules" ],
    "ON" : [ "node_update" ],
    "IF" : [
      { "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "funding" : "funding" } } } },
      { "data_is" : { "data" : [ "node:field-payment-status" ], "value" : "received" } },
      { "entity_has_field" : {
          "entity" : [ "node:field-entity-ref-funding-link" ],
          "field" : "field_entity_ref_funding_link"
        }
      }
    ],
    "DO" : [
      { "VIEW LOOP" : {
          "VIEW" : "test",
          "DISPLAY" : "views_rules_1",
          "USING" : { "nid" : [ "node:field-entity-ref-funding-link:field-entity-ref-funding-link:nid" ] },
          "ROW VARIABLES" : [],
          "DO" : []
        }
      }
    ]
  }
}?>
Аватар пользователя iNFerNo iNFerNo 24 мая 2013 в 14:42

Или может так???

3 условия, второй тип нод, имеет поле такое-то:nid
и поле имеет статус значения получено

в экшенах луп по виевс добавил и выбрал там вьюху созданную-дисплей её (рулес виевс)

<?php{ "rules_sumvalue" : {
    "LABEL" : "\u0421\u0443\u043c\u043c\u0438\u0440\u043e\u0432\u0430\u043d\u0438\u0435 \u0437\u043d\u0430\u0447\u0435\u043d\u0438\u0439",
    "PLUGIN" : "reaction rule",
    "ACTIVE" : false,
    "REQUIRES" : [ "rules" ],
    "ON" : [ "node_update" ],
    "IF" : [
      { "node_is_of_type" : { "node" : [ "node" ], "type" : { "value" : { "funding" : "funding" } } } },
      { "entity_has_field" : { "entity" : [ "node" ], "field" : "field_entity_ref_funding_link" } },
      { "data_is" : { "data" : [ "node:field-payment-status" ], "value" : "received" } }
    ],
    "DO" : [
      { "VIEW LOOP" : {
          "VIEW" : "test",
          "DISPLAY" : "views_rules_1",
          "USING" : { "nid" : [ "node:field-entity-ref-funding-link:nid" ] },
          "ROW VARIABLES" : [],
          "DO" : []
        }
      }
    ]
  }
}?>
Аватар пользователя serega111 serega111 24 мая 2013 в 15:14

Дальше наверно перед loop нужно добавить переменную равную 0, затем в loop прибавлять к переменной поле очередной ноды.