es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Cómo mostrar los datos desplegados en la página en el bloque que se ubicará en la región del encabezado?

Hice un módulo personalizado que hace esto:

Cuando un usuario escribe en la url la ciudad de Londres:
http://drupalsite/web/weather/London
El sitio web api.openweathermap.org proporciona datos utilizando una API y el usuario obtiene los datos del clima de Londres en la página:

enter image description here

Pero quiero que los datos del clima también se muestren en la región del encabezado en un bloque.

¿Cómo puedo implementarlo?

Tags:  ,

Answer

  1. Avatar for davy.ai

    Para implementar esta función, siga los siguientes pasos:

    1. Cree un bloque personalizado en su sitio de Drupal.
    2. Agregue una llamada a la misma API utilizada en el módulo personalizado para recuperar los datos meteorológicos de Londres.

    3. Utilice los datos meteorológicos obtenidos para mostrar la información en la región del encabezado del bloque.

    4. Establezca una caché para el bloque, de modo que no tenga que hacer llamadas a la API cada vez que se muestre.

    Aquí hay una posible implementación del bloque personalizado:

    /**
     * @file
     * Implementa un bloque personalizado para mostrar el clima en Londres.
     */
    
    use Drupal\Core\Block\BlockBase;
    
    class LondonWeatherBlock extends BlockBase {
    
      /**
       * {@inheritdoc}
       */
      public function build() {
        $weather_data = $this->getWeatherData();
    
        $build = [
          '#theme' => 'london_weather_block',
          '#weather_data' => $weather_data,
          '#cache' => [
            'keys' => ['london_weather_block'],
            'tags' => ['weather'],
            'max-age' => 3600 * 4, // Caché durante 4 horas.
          ],
        ];
    
        return $build;
      }
    
      /**
       * Recupera los datos meteorológicos de Londres de la API de Openweathermap.
       *
       * @return array|null
       *   Un arreglo con los datos meteorológicos o null si la API no está funcionando.
       */
      private function getWeatherData() {
        $api_key = 'TU_CLAVE_DE_API';
    
        $url = "https://api.openweathermap.org/data/2.5/weather?q=Londres&appid=$api_key";
        $response = file_get_contents($url);
    
        if (!$response) {
          return null;
        }
    
        $data = json_decode($response, TRUE);
        $weather = $data['weather'][0]['description'];
        $temperature = $data['main']['temp'] - 273.15;
    
        return [
          'weather' => $weather,
          'temperature' => round($temperature),
        ];
      }
    
    }
    

    Este código define un bloque personalizado llamado LondonWeatherBlock. El método build recupera los datos meteorológicos para Londres utilizando el método getWeatherData y luego devuelve un arreglo de renderizado que contiene el tema london_weather_block, que mostrará la información climática.

    El método getWeatherData utiliza la API de Openweathermap para recuperar los datos meteorológicos de Londres. Verifica si la llamada a la API devolvió algún dato y devuelve null si no lo hizo. Luego extrae la información del clima y la temperatura de la respuesta de la API y la devuelve en un arreglo.

    Para agregar este bloque a la región del encabezado, puede ir a la página de diseño de bloques (/admin/structure/block), hacer clic en el botón “Colocar bloque” en la región “Encabezado” y seleccionar el bloque “Clima de Londres”. El bloque ahora se mostrará en el encabezado, mostrando el clima y la temperatura en Londres.

Comments are closed.