Ответы пользователя по тегу Drupal
  • Ошибка на друпале 9. Only variables should be passed by reference с чем может быть связана?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Такое сообщение, как правило, возникает, когда код, написанный во времена PHP5
    запускают на PHP7.
    Связано оно с тем, что функция (в данном случае - hrutka_preprocess_page) ожидает получить ссылку на переменную, а получает константу. Скорее всего, это второй параметр со значением 'page'.
    Для исправления нужно разобраться, действительно ли требуется передача по ссылке и либо исправить заголовок функции, либо предварительно записывать константу в переменную, которую уже использовать в вызове функции.
    В PHP8 такая ситуация из предупреждения стала критической ошибкой.
    Ответ написан
    Комментировать
  • Как исправить json плагина REST для терминов таксономии?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    Всё элементарно. В PHP любой массив - ассоциативный, что соответствует объекту JSON.
    Но, если индекс массива начинается с нуля и содержит только строго последовательные номера (0, 1, 2, 3 и т.д.), то для простоты он представляется как классический массив, в том числе и в JSON.
    print json_encode(['a', 'b']); // ["a","b"]
    print json_encode([0 => 'a', 1 => 'b']); // ["a","b"]
    print json_encode([1 => 'a', 2 => 'b']); // {"1":"a","2":"b"}
    У вас массив заполняется по индексам $term->tid, которые не образуют классической последовательности, поэтому и представляются объектом.
    Ваш код можно переписать так:
    $vid = 'digest';
    $termDataAll = array_map(
        fn($term) => [
            'tid' => $term->tid,
            'name' => $term->name,
            'weight' => $term->weight,
            'childs' => array_map(
                fn($child) => [
                    'tid' => $child->tid,
                    'name' => $child->name,
                    'weight' => $child->weight
                ],
                \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, $term->tid, 1)
            )
        ],
        \Drupal::entityTypeManager()->getStorage('taxonomy_term')->loadTree($vid, 0, 1)
    );

    В результате должен получиться такой JSON
    [
      [
        "tid": "11",
        "name": "parent-1",
        "weight": "7",
        "childs": [
          ["tid": "14", "name": "child-1", "weight": "0"],
          ["tid": "19", "name": "child-2", "weight": "1"],
        ],
      ], [
        "tid": "12",
        "name": "parent-2",
        "weight": "6",
        "childs": [
          ["tid": "17", "name": "child-1", "weight": "0"],
          ["tid": "18", "name": "child-2", "weight": "1"]
        ]
      ]
    ]
    Ответ написан
    1 комментарий