Paragraphs: найти сущность-родителя


48

Имея в своем распоряжении сущность 'paragraphs_item' (модуль Paragraphs) понадобилось узнать сущность родителя. Готового варианта не нашел, пришлось придумать свой...

Update 26.07.2018: Нашел решение:

$paragraphs_item->hostEntityType();
$paragraphs_item->hostEntity();
function _paragraph_parent($paragraph_id, $entity = FALSE) {
  $f_name = db_select('paragraphs_item', 'p')
    ->fields('p', array('field_name'))
    ->condition('p.item_id', $paragraph_id)
    ->execute()
    ->fetchField();
  if ($f_name) {
    $parent = db_select('field_data_' . $f_name, 'fp')
      ->fields('fp', array('entity_id', 'entity_type'))
      ->condition('fp.' . $f_name . '_value', $paragraph_id)
      ->range(0, 1)
      ->execute()
      ->fetchObject();
    //dpm($parent);
  }
  if ($parent) {
    if ($entity) {
      $parents = entity_load($parent->entity_type, array($parent->entity_id));
      return count($parents) ? array_shift($parents) : FALSE;
    }
    return $parent;
  }
  return FALSE;
}
Применение: 
$parent = _paragraph_parent($paragraphs_item->item_id);
$parent = _paragraph_parent($paragraphs_item->item_id, TRUE);

Первый вариант вернет объект:

{
'entity_type' = ENTITY_TYPE,
'entity_id' = ENTITY_ID,
}

Второй вариант вернет полностью загруженную сущность. 
В случае неудачи получаем FALSE.

Добавить комментарий
Может быть интересно

Порядок действий для установки Solr на сервере с Centos 7

4
Модуль Migrate это фреймворк для миграции (импорта) данных в Drupal из любых источников.
1

В данной статье будет теория про механизм, который использует модуль migrate при импорте материалов в Друпал из различных источников.

2
Снова возвращаемся к migrate. Довольно удобный фреймворк для импорта данных в Друпал. Один из распространенных форматов источника для импорта - CSV. Поддерживается migrate из коробки. Описание и примеры работы с классом MigrateSourceCSV можно найти на drupal.org.
2
Те, кто использует модуль Double field могли заметить, что в текстовой области отсутствует редактор. Бывают случаи, когда для удобства наполнения он просто необходим.
1