Как Получить значение из объекта? Д8

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

Аватар пользователя kompospec kompospec 10 апреля 2021 в 18:22

Есть объект:

Drupal\node\Entity\Node Object
(
[in_preview] =>
[values:protected] => Array
(
[nid] => Array
(
[x-default] => 8
)

[vid] => Array
(
[x-default] => 8
)

[type] => Array
(
[x-default] => mymt
)

[langcode] => Array
(
[x-default] => ru
)

[revision_uid] => Array
(
[x-default] => 1
)

[uid] => Array
(
[x-default] => 1
)

[title] => Array
(
[x-default] => 5
)

[field_vremya] => Array
(
[x-default] => Array
(
[0] => Array
(
[value] => 5
)

)

)

)

Как получить с него значения? В частности - field_vremya
Я скопировал только часть кода объекта.
Спасибо.

Комментарии

Аватар пользователя vlucas vlucas 10 апреля 2021 в 18:30

$node->field_vremya->value

вместо value может быть другое, зависит от типа поля. Например entity_referense это target_id в обычных текстовых/числовых - value

Аватар пользователя kompospec kompospec 10 апреля 2021 в 20:53

Для наглядности - изменил код:

<?php$view = views_get_view_result('myw1');

//$view = \Drupal\views\Views::getView('myw1');

print_r ($view[0]);?>

<p>--------------</p>

<?php
$node 
$view[0];
print 
$node->field_vremya->value;

print 

'++++++';
?>

не выводит

Аватар пользователя kompospec kompospec 12 апреля 2021 в 1:33

В принципе - вы мне помогли, спасибо.
Благодаря вам я зафиксировал ваше предложение в коде и потом уже подстраивался под неё.
Спасибо.
Но изначально ваше предложение не срабатывало.

Аватар пользователя kompospec kompospec 10 апреля 2021 в 19:43

Вот весь код:


<?php
/**
@return
* Contains \Drupal\summ\Controller\FirstPageController.
*/

namespace Drupal\summ\Controller;

/**
* Provides route responses for the DrupalBook module.
*/
class FirstPageController {

/**
* Returns a simple page.
*
@return array
* A simple renderable array.
*/
public function content() {

ob_start();
//$u = views_embed_view ('myw1');

$view views_get_view_result('myw1');

//$view = \Drupal\views\Views::getView('myw1');

print_r ($view[0]);

//print_r($view[0]->_entity->in_preview);

$mytab ob_get_contents();
ob_end_clean();

$element = array(
'#markup' => $mytab,
);
return 
$element;
}

}

?>
Аватар пользователя vlucas vlucas 10 апреля 2021 в 19:48

Обычно свой контроллер наследуется от ControllerBase и поставьте себе для удобства devel + kint, чтобы легче было в этих "простынях" разбираться. Ну и про рендер массивы почитайте, т.к. неизвестно что пихать в '#markup' - это никогда не сработает

Аватар пользователя kompospec kompospec 10 апреля 2021 в 20:29

Ребят. Нужно сложить 5 цифр.
Все пишут что просто и ничего не нужно, а решения нет уже неделю.
Я начинал вопросы задавать с рабочего сайта, там много цифр - вообще ничего не ответили
Упростил задачу как мог - тоже ответа нет.
Если я получу это значение из объекта - задача решена.

Аватар пользователя ivnish ivnish 10 апреля 2021 в 20:24

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

Аватар пользователя OldWarrior OldWarrior 10 апреля 2021 в 20:30

Немного не по сабжу, но вот этот весь код:

<?php
...
public function 
content() {

ob_start();
//$u = views_embed_view ('myw1');

$view views_get_view_result('myw1');

//$view = \Drupal\views\Views::getView('myw1');

print_r ($view[0]);

//print_r($view[0]->_entity->in_preview);

$mytab ob_get_contents();
ob_end_clean();

$element = array(
'#markup' => $mytab,
);
return 
$element;

...
?>

успешно заменяется на:

<?php
...
public function 
content() {
  
$view views_get_view_result('myw1');
  
$element = array(
    
'#markup' => var_export($view[0], TRUE),
  );
  return 
$element;

...
?>

А при наличии devel и того проще - <?php dpm($view[0]); ?>

Аватар пользователя OldWarrior OldWarrior 10 апреля 2021 в 20:51

Мой друг, это именно код (это так и называется). Причём ваш и представленный вами общественности. Я вам подсказываю, как можно сделать проще - раз уж вы заморачиваетесь с такими "заготовками и шаблонами" и тем более - тянете их на форум.

Аватар пользователя OldWarrior OldWarrior 10 апреля 2021 в 21:12

Простите меня, грешного. Люблю глаголить прописные истины. Ниже по теме написал.

И всё же позвольте вопрос: почему тогда не используете пресловутые прописные истины?

Аватар пользователя kompospec kompospec 10 апреля 2021 в 22:49

можете ту оптимизировать код?:

<?php
public function content() {

$view views_get_view_result('myw1');

foreach (

$view as $v){
  
$sum += $v->_entity->field_vremya->value;
  }

$element = array(
'#markup' => $sum,
);
return 
$element;
}
?>
Аватар пользователя kompospec kompospec 10 апреля 2021 в 20:42

В идеале желательно чтоб это всё было бы прям в представлении. Но, как видите, представление не хочет кушать формат php

Аватар пользователя OldWarrior OldWarrior 10 апреля 2021 в 20:46

А если по сабжу и прям всё надо считать кодом, то (при условии, что вывод view - это таблица) будет как-то так:

<?php
/**
 * @file mymodule.module
 */
...
/**
 *  Implements hook_preprocess_views_view_table()
 */
function mymodule_preprocess_views_view_table(&$variables) {
  
// Altering view table output.
  
$view $variables['view'];
  if (
$view->id() == 'ID_of_my_view') {
    
// Walk through fields...
    
foreach ($variables['result'] as $num => $row) {
      
// ... calculation here ...
    
}
  }
}
...
?>
Аватар пользователя OldWarrior OldWarrior 10 апреля 2021 в 21:14

Под неё, родимую.
Внутри тела цикла исследуйте $row (например, с помощью той же var_export() ) и найдите необходимые поля.

Аватар пользователя kompospec kompospec 10 апреля 2021 в 22:01

Я вывел:

<?php
$view 
views_get_view_result('myw1');

//$view = \Drupal\views\Views::getView('myw1');

print_r ($view[0]->_entity);

//print_r ($view[0]::$_entity);

?>

<p>--------------</p>

<?php
$node 
$view[0]->_entity;
print 
$node->field_vremya->value;

print 

'++++++';
?>