Ver Mensaje Individual
  #1 (permalink)  
Antiguo 23/07/2017, 03:59
Avatar de el_javi
el_javi
 
Fecha de Ingreso: marzo-2005
Ubicación: MAdrid
Mensajes: 844
Antigüedad: 19 años, 8 meses
Puntos: 10
Drupal 8 - Problema con caché

Hola a todos.

Tengo el siguiente problema.

Tengo una entidad en mi Drupal (oficinas)

En dichas oficinas he hecho un sistema en el que sobre un mapa, seleccionas dónde está esa oficina (guardado de coordenadas X e Y en 2 campos de la entidad).

Todo funciona perfectamente.

Mi problema es que:
- Entro en el Front y veo el mapa con portugal (u otra oficina) colocada en su lugar.
- Entro en el Admin, y cambio Portugal (u otra 0ficina) a otro punto del mundo
- Recargo el Front y portugal sigue en su sitio.
---- Limpio la caché de drupal, y recargo el front, y Portugal (u otra oficina) pasa a colocarse en el nuevo lugar que he establecido.

Los datos para pintar estos puntos los preproceso en mi archivo THEME.module
He probado a preprocesarlo en varios lugares, con el mismo resultado, el mismo cacheo de la información:
En THEME_preprocess, en THEME_preprocess_node

Esta es la forma en la que obtengo los datos y los guardo en una variable:
THEME.module

Código PHP:
function gap_preprocess(array &$variables) {
    
$node Drupal::routeMatch()->getParameter('node');
    
$variables['gap_node'] = $node;

    
$variables['gap_node_type'] = $variables['gap_node']->getType();

    switch(
$variables['gap_node_type']) {
        case 
"encuentranos_home":
            
$variables["gap_findUs"]["continents"] = GAP_findUs_getContinents();
            
$variables["gap_findUs"]["countries"] = GAP_findUs_getCountries();
        break;
    }
}


function 
GAP_findUs_getContinents () {
    
$ids Drupal::entityQuery('node')
      ->
condition('type''oficinas_continentes')
      ->
sort('title')
      ->
execute();
    
    
$allElements entity_load_multiple('node'$ids);
    
    
$allElements_array = array();
    
    foreach (
$allElements as $element_key=>$element_value) {
        
$alias Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$element_value->nid->value);
        
$alias explode("/"$alias);
        
$alias array_pop($alias);
        
        
$tempElement = array (
            
"id" =>  $element_value->nid->value,
            
"name" => $element_value->title->value,
            
"alias" => $alias,
            
"mapPosition_X" => $element_value->field__officecontinent_point_x->value,
            
"mapPosition_Y" => $element_value->field__officecontinent_point_y->value,
        );
        
        
array_push($allElements_array$tempElement);
    }
    
    return 
$allElements_array;
}

function 
GAP_findUs_getCountries () {
    
$ids Drupal::entityQuery('node')
      ->
condition('type''oficinas_paises')
      ->
sort('title')
      ->
execute();
    
    
$allElements entity_load_multiple('node'$ids);
    
    
$allElements_array = array();
    
    foreach (
$allElements as $element_key=>$element_value) {
        
$alias Drupal::service('path.alias_manager')->getAliasByPath('/node/'.$element_value->nid->value);
        
$alias explode("/"$alias);
        
$alias array_pop($alias);
        
        
$tempElement = array (
            
"id" =>  $element_value->nid->value,
            
"name" => $element_value->title->value,
            
"alias" => $alias,
            
"type" => $element_value->field_officecountry_type->value,
            
"mapPosition_X" => $element_value->field__officecontinent_point_x->value,
            
"mapPosition_Y" => $element_value->field__officecontinent_point_y->value,
        );
        
        
array_push($allElements_array$tempElement);
    }
    
    return 
$allElements_array;

Así lo pinto en mi tema:
Código HTML:
<div class="findUs_map_container">

    {% for continent in gap_findUs.continents %}
        <a href="javascript:void(null)" title="{{ continent.name }}" class="findUs_map_poi findUs_map_poi_continent" style="left:{{ continent.mapPosition_X }}%; top:{{ continent.mapPosition_Y }}%;">
            <span>{{ continent.name }}</span>
        </a>
    {% endfor %}


    {% for country in gap_findUs.countries %}
        {% if country.type != "" %}
            <a href="javascript:void(null)" title="{{ country.name }}" class="findUs_map_poi findUs_map_poi_{{ country.type }}" style="left:{{ country.mapPosition_X }}%; top:{{ country.mapPosition_Y }}%;">
                <span>{{ country.name }}</span>
            </a>
        {% endif %}
    {% endfor %}
</div> 

Espero que podáis ayudarme.

Gracias y un saludo.