it-swarm-es.com

El preprocesamiento de un bloque de página frontal causa errores en otras páginas: ¿Por qué?

Actualmente estoy trabajando a través de tareas autoestimadas para aprender vistas y pre-procesamiento en Drupal 7. He creado una vista sin formato que crea una lista de imágenes (que están vinculadas a un contenido -Tipo, pero parece que si reemplace los campos en la vista con el nodo: escribo, entonces recibo un enlace a la página del nodo, que no es lo que estoy después) para colocarlos en un bloque. He colocado el bloqueo en el punto culminante Región y han escrito un archivo vistas-vista - Image.tPl.php File para emitir la lista en varios formatos de lista desordenados que luego se transforman por JCarousel o los complementos de JQuery FeatureList.

Además, he creado un archivo front.tpl.php para restaurar la página principal y parece funcionar en que el CSS, JS y HTML funcionan correctamente y el carrusel y las listas aparecen y funcionan en el Bloque definido.

Sin embargo, cuando salgo de la página frontal a otra página donde no debe aparecer la vista, obtengo el siguiente error:

Aviso: propiedad indefinida: STDClass :: $ _ field_data en iaintest_preprocess_views_view_fields () (línea 10 de /applications/xampp/xamppfiles/htdocs/drupal/sites/all/themes/iaintest/template.php).

Para pre-procesar la lista que la vista sale, he escrito el siguiente código de pre-proceso:

function iaintest_preprocess_views_view_fields (&$variables) {
  if (!$variables['view']->result[0]->_field_data) {
    // Line 10 where the error occurs.
  }
  else {
    drupal_add_css(path_to_theme() . '/jcarousel/skins/tango/skin.css');
    drupal_add_css(path_to_theme() . '/featureList.css');
    $js = "
      jQuery.noConflict();
      jQuery(document).ready(function(){
      jQuery('#mycarousel').jcarousel();

      jQuery.featureList(
        jQuery('#tabs li a'),
        jQuery('#output li'), {
          start_item: 1
        }
      );
    });";

    drupal_add_js($js, 'inline');
    $items = array();

    foreach ($variables['view']->result as $key => $vars) {
      foreach ($variables['view']->result[0]->_field_data['nid']['entity']->field_images['und'] as $k => $v) {
        $variables['carousel'][] = array(
          'uri' => $v['uri'],
          'alt' => $v['alt'], 
          'title' => $v['title']
        );
      }
    }
  }
}

He intentado usar drupal_is_front_page() o $variable['is_front'] === TRUE Para limitar esta parte del preprocesamiento a la página principal, que es el único lugar donde aparece la vista original.

¿Es esto posible en absoluto, o he entendido mal algo?

2
ipe

Intentar:

<?php
if (isset($variables['view']->result[0]->_field_data)) {
// 
?>

En lugar de su extraño si/el otro constructo. No estoy realmente seguro de lo que está tratando de lograr con ese código, por lo que puede haber una mejor manera de verificar si desea ejecutarlo o no.

1
Berdir

Para hacer un resumen de lo que está experimentando:

  • Se invoca su función de preproceso para una plantilla de vista, que se usa solo en la portada.
  • Cuando visite la página principal, no obtiene ningún error de mensaje, pero ve un mensaje de error en la página que visita justo después.
  • Se está preguntando por qué el mensaje de error no aparece en la portada, pero se muestra en las otras páginas.

Lo que sucede es que:

  • Drupal intercepta la PHP ADVERTENCIA y, si se establece para mostrar los mensajes de error/advertencia, llamadas drupal_set_message () para mostrarlo.
  • drupal_set_message() Guardar el mensaje de error en una variable de sesión.
  • A medida que la página ya ha sido emitida, no se muestran los mensajes de error; Se muestran cuando se representa la siguiente página.

En otras palabras, el error es causado por la función que se invoca para la página frontal, pero se muestra el mensaje de error en la página siguiente de salida.

Para explicar en detalle qué sucede cuando PHP eleva un error, Drupal_Bootstrap () , la función que se invoca para iniciar Drupal, las llamadas _ Drupal_bootstrap_configuration () , que se establece _ drupal_error_handler () como PHP Manipulador de errores. _drupal_error_handler() Llamadas _ Drupal_Error_handler_real () , que luego Llamadas _ drupal_log_error () , la función que luego llama drupal_set_message().

1
kiamlaluno