Как отобразить еще несколько полей в кастомном модуле если файл php является контроллером?

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

Аватар пользователя nathan158 nathan158 20 июня 2020 в 11:56

Я получаю данные з одного сайта с помощью API. Это данные о погоде. Сейчас я вывожу только одно поле - температуру:


<?php

namespace Drupal\weather\Controller;        

class 

WeatherPage
{
  public function 
getWeather($city)
  {
    
$response file_get_contents('http://api.openweathermap.org/data/2.5/weather?q='.$city.',uk&appid=32ae008b1c7259324aa50450687fabf5&units=metric');
    
$jsn json_decode($response);
    
    return [
      
'#markup' => $jsn->main->temp,
   ];
      
  }    
}
?>

Но мне нужно отобразить еще такие поля на странице:

$jsn->name
$jsn->main->pressure;
$jsn->main->humidity

Как переделать эту часть чтобы отобразить все нужные поля?:

 return [
      '#markup' => $jsn->main->temp,
 ];

И как поместить $jsn->name в тег h1?

Лучший ответ

Аватар пользователя OldWarrior OldWarrior 20 июня 2020 в 12:49

nathan158 wrote: Как переделать эту часть чтоби отобразить все нужные поля?:

nathan158 wrote: И как поместить $jsn->name в тег h1?

В начало файла:

<?php
namespace Drupal\weather\Controller
use 
Drupal\Core\Render\Markup;
...
?>

и далее

<?php
    
...
    
$jsn json_decode($response);
    
    return [
      
'#markup' => Markup::create(
                                   
'<h1>' $jsn->name '</h1>' 
                                   
'<div>' $jsn->main->temp '</div>' .
                                   
'<div>' $jsn->main->pressure'</div>' .
                                   
'<div>' $jsn->main->humidity'</div>'
                                  
)
    ];
    ...
?>

Комментарии

Аватар пользователя OldWarrior OldWarrior 20 июня 2020 в 12:49

nathan158 wrote: Как переделать эту часть чтоби отобразить все нужные поля?:

nathan158 wrote: И как поместить $jsn->name в тег h1?

В начало файла:

<?php
namespace Drupal\weather\Controller
use 
Drupal\Core\Render\Markup;
...
?>

и далее

<?php
    
...
    
$jsn json_decode($response);
    
    return [
      
'#markup' => Markup::create(
                                   
'<h1>' $jsn->name '</h1>' 
                                   
'<div>' $jsn->main->temp '</div>' .
                                   
'<div>' $jsn->main->pressure'</div>' .
                                   
'<div>' $jsn->main->humidity'</div>'
                                  
)
    ];
    ...
?>
Аватар пользователя OldWarrior OldWarrior 20 июня 2020 в 13:10

PS. И, кстати, неплохо бы проверять, что вообще что-то получили в $response. Ну или хотя бы проверять отсутствие ошибок от json_decode() с помощью json_last_error() и что в конечном массиве есть требуемые ключи.

Аватар пользователя nathan158 nathan158 20 июня 2020 в 13:22

Спасибо большое! А вы можете подсказать как слева от значений написать слова вот так:
Температура: 18
Давление: 1020
Ветер: 59
?

И как сделать чтобы температура отображалась без запятых? А то сейчас отображается темпаратура 18.19 вместо 18, вот так:

Аватар пользователя OldWarrior OldWarrior 20 июня 2020 в 13:44

У меня опять стойкое ощущение, что вы или прикалываетесь или троллите сообщество Smile

Господи, прости меня, грешного:

<?php
               
... Markup::create(
                                   
'<h1>' $jsn->name '</h1>' 
                                   
'<div>Температура: ' round($jsn->main->temp) . '</div>' .
                                   
'<div>Давление: ' $jsn->main->pressure'</div>' .
                                   
'<div>Ветер: ' $jsn->main->humidity'</div>'
                                  
)
    ...
?>

nathan158 wrote:... И как сделать чтобы температура отображалась без запятых?...

round()

Аватар пользователя nathan158 nathan158 20 июня 2020 в 14:37

Спасибо большое! Я не тролю. Я просто PHP практически не знаю. Так как в предедущих проектах разрабатывал на других языках програмированния.

Аватар пользователя marassa marassa 20 июня 2020 в 15:11
1

nathan158 wrote: Я просто PHP практически не знаю

Открою Вам страшную тайну: <div>Температура: </div> - это не PHP. Как можно "являться front-end разработчиком(javascript)" и не знать азов html - выше моего понимания.

Аватар пользователя nathan158 nathan158 20 июня 2020 в 16:37

Хех. Я знаю что такое <div> и для чего оно. Но тот же <div> находиться в Markup::create (). А там уже синтаксис PHP. Который требует некотрых правил написания а значит встраивать тот же html нужно по-особому. Например требует точки . и проблелов между ними. Теперь я уже знаю как нужно встраивать html в Markup::create (). На Front-end есть такая штука как JSX которая позволяет в JS встраивать html код. Смогли бы вы встроить html в JSX без знаний JSX? Так что не судите о моих знаниях в html

Аватар пользователя OldWarrior OldWarrior 20 июня 2020 в 17:23

Извините за прямоту, конечно, но обычно не бывает в жизни так, чтобы человек занимался front-end'ом, JS... etc "на нескольких проектах" и при этом не знал, как найти справочные сведения об элементарных строковых операторах пусть даже ему лично незнакомого, но очень популярного скриптового языка. По крайней мере - мне в это как-то с трудом верится.

И на этом фоне заявления о трудоустройстве "в Drupal-компанию сайтбилдером" звучат, мягко говоря, как-то неубедительно и вызывают либо улыбку, либо раздражение, либо и то и другое. Smile

А в целом, как я уже писал выше, очень смахивает на троллинг.