1. Главная
  2. Форумы
  3. Техподдержка Drupal
  4. Решение проблем

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

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

Я получаю данные з одного сайта с помощью 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()

Аватар пользователя 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

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

Логотип drupal.ru

Содержимое сайта публикуется на условиях CreativeCommons Attribution-ShareAlike 3.0 или более поздней версии. Программные коды в тексте статей — на условиях GNU GPL v2 или более поздней версии.

Документация по совместной работе с репозиторием drupal.ru – https://docs.drupal.ru/code

Drupal – торговая марка Дриса Бёйтарта

12+

AltStyle によって変換されたページ (->オリジナル) /