These are chat archives for dru-io/Drupal

16th
Jun 2016
boolboost
@boolboost
Jun 16 2016 09:29
Привет
KarmaBot
@KarmaBot
Jun 16 2016 09:29
@boolboost, привет, как настроение?
boolboost
@boolboost
Jun 16 2016 09:29
Можете помочь понять куда капать
Есть hook_entity_insert
Там я сохраняю у другой сущности entity reference поле
Работает хорошо
Но когда использую views rules
Падает ощибка
EntityMetadataWrapperException: Invalid data value given. Be sure it matches the required data type and format. в функции EntityDrupalWrapper->set()
В rules я данные не меняю
Так что мне не понятно почему на это ругается
Если из rules убрать views rules
Работает нормально
boolboost
@boolboost
Jun 16 2016 09:34
За рание спасибо
KarmaBot
@KarmaBot
Jun 16 2016 09:34
@boolboost, в этом чате принято добавлять имя пользователя, чтобы его поблагодарить.
Alan Bondarchuk
@fortis
Jun 16 2016 13:38
а что делает этот views rules это модуль или правило есть такое?
и когда ошибка падает в какой момент?
boolboost
@boolboost
Jun 16 2016 13:39
Модуль
При создании сущность
Hook Entity insert
Ну и парадает когда emw save делаю
Причём только тогда когда происходит выборка по views (views rules)
Если обно из двух убрать всё работает как надо
))
Alan Bondarchuk
@fortis
Jun 16 2016 14:40
а как выборка по вьюс и создание сущности связаны?
@boolboost внутри хука запускаешь вьюс?
или рулс внутри хука?
скорее всего там еще слишком рано их дергать
не инициализировались к этому моменту рулзы или вьюс
по вьюс такое точно встречал, но мне в принципе не нравится дергать вьюс из кода)
boolboost
@boolboost
Jun 16 2016 15:07
Views rules
Модуль такой
Им и связываю
Ну а как мне иначе получить данные
Для увидомлений
Есть в хуке их нет
В что бы rules о них знал
boolboost
@boolboost
Jun 16 2016 15:18
В хука делаю save данных для другой задачи
В rules лелаю только увидомления
Ну и использую там views rules
Что бы данные для увидомления подтянуть
И каким то образом при это не save сущность
Нз как views может на такое влиять
Причём сохраняю я не ту сущность по которой entity insert идёт
Alan Bondarchuk
@fortis
Jun 16 2016 17:59
@boolboost код показывай)
больше говорим)
boolboost
@boolboost
Jun 16 2016 18:58

/**

  • Implements hook_entity_insert().
    /
    function hook_entity_insert($entity, $type) {
    $bundle = isset($entity->type) ? $entity->type : '
    ';

    // new entity
    if (isset($entity->is_new) && $entity->is_new) {
    if (isset($_GET['id']) && is_numeric($_GET['id']) && isset($_GET['type'])) {
    $target_id = intval($_GET['id']);
    $target_type = $_GET['type'];

    // Add join with parent entity
    switch ("{$type}:{$bundle}") {

     case 'departure:departure':
       $wrapper = entity_metadata_wrapper($target_type, $target_id);
       if (isset($wrapper->field_ref_departures)) {
         $wrapper->field_ref_departures[] = $entity->id;
       }
       $wrapper->save();
       break;

    }
    }
    }

    crm__entity_save($entity, $type);
    }

KarmaBot
@KarmaBot
Jun 16 2016 18:58
@boolboost, у нас тут принято писать кратко и по делу. А если нужно показать длинный код, то можно использовать pastebin-сервис, например gist.github.com или laravel.io/bin.
Gor Martsen
@Gormartsen
Jun 16 2016 19:07
прикольный подкаст вышел
boolboost
@boolboost
Jun 16 2016 19:08
Спс щас гляну
KarmaBot
@KarmaBot
Jun 16 2016 19:08
@boolboost, в этом чате принято добавлять имя пользователя, чтобы его поблагодарить.
Alan Bondarchuk
@fortis
Jun 16 2016 23:01
@boolboost чуть упростил и bundle обычно получают с list, ну и там вложен расчет на то что если бандл не описан в хук энтити инфо то бандлом считается entity_type по умолчанию
@boolboost попробуй так
<?php

/**
 * Implements hook_entity_insert().
 */
function hook_entity_insert($entity, $type) {
  if (!empty($entity->is_new) && isset($_GET['id'], $_GET['type']) && is_numeric($_GET['id'])) {
    list($entity_id, , $bundle) = entity_extract_ids($type, $entity);

    $target_type = $_GET['type'];
    $target_id = (int) $_GET['id'];
    // Add join with parent entity.
    switch ("{$type}:{$bundle}") {
      case 'departure:departure':
        $wrapper = entity_metadata_wrapper($target_type, $target_id);
        if (isset($wrapper->field_ref_departures)) {
          $wrapper->field_ref_departures[] = $entity_id;
          $wrapper->save();
        }
        break;
    }
  }

  crm__entity_save($entity, $type);
}
Alan Bondarchuk
@fortis
Jun 16 2016 23:13
ид и бандл это не всегда ->type и ->id

но вообще первое что надо сделать это посмотреть номер строки где ошибка твоя
EntityMetadataWrapperException: Invalid data value given. Be sure it matches the required data type and format. в функции EntityDrupalWrapper->set()

и поставить там брекпоинт и посмотреть по бектрейсу с чем и откуда оно туда пришло и станет понятно

еще как вариант $wrapper->field_ref_departures[] = array('target_id' => $entity_id);
Alan Bondarchuk
@fortis
Jun 16 2016 23:21
ну и для проверки убрать $_GET а задать жестко и посмотреть, на случай если где то используются такие же параметры для другого функционала