it-swarm-es.com

¿Cómo puedo usar la lógica condicional para no mostrar un <div> en page.tpl.php basado en la identificación del nodo?

Estoy usando un tema que tiene regiones que no son compatibles con la configuración "Desactivar Drupal blocks/regiones" de los paneles. He intentado eliminar el uso de una instrucción if en PHP, pero my = PHP la sintaxis es incorrecta o no estoy usando las variables correctas Drupal. En este momento la sección se ve así:

<?php
    if ($node->nid != 51) {
        echo '<div id="left">';
            { if ($left) { print $left;}
        echo '</div>';
 ?>

Tengo la sensación de que no estoy anidando la segunda instrucción if correctamente en PHP sin embargo.

3
Jay

Si está intentando ocultar la barra lateral izquierda cuando ve el nodo 51, esta no es la forma correcta de hacerlo. Edite la configuración de visibilidad de bloque para los bloques en la barra lateral izquierda para que estén ocultos cuando la ruta sea 'nodo/51'. Luego, en su plantilla, puede hacer esto:

<?php
  if ($left) {
    print '<div id="left">' . $left . '</div>';
  }
?>

Esto ocultará todo el div # a la izquierda cuando no haya bloques en la barra lateral izquierda.

8
marcvangend

Creo que alterar la configuración de visibilidad para todos los bloques que se muestran en la barra lateral izquierda es la forma correcta de ocultar la barra lateral izquierda.
Si, por alguna razón, necesita ocultar la barra lateral izquierda del código (por ejemplo, porque necesita ocultar la barra lateral izquierda en condiciones específicas que no son la URL de la página que se muestra actualmente), entonces lo que puede hacer es implementar hook_preprocess_page(), que se invoca antes de que se represente la plantilla de página. Ese gancho puede alterar cualquier variable que se pase a la plantilla de página.

function mymodule_preprocess_page(&$variables) {
  if (isset($variables['node']) && $variables['node']->nid == 51) {
    // The left sidebar will not be shown.
    $variables['left'] = '';
    // …
  }
  // …
}

El enlace puede verificar si se verifican condiciones más complejas, incluida la verificación de que algunos campos de nodo tienen valores específicos, lo que no es posible al cambiar la configuración de visibilidad del bloque, si no se escribe el código PHP que luego se pasa eval() desde el módulo de bloque (en tales casos, es mejor poner ese código en un módulo personalizado).

La razón por la que obtiene un error de sintaxis es que el código contiene un corchete que no coincide con un corchete de cierre, y falta un corchete de cierre.

if ($node->nid != 51) {
  echo '<div id="left">';
    /* This bracket is extra. -> */ { if ($left) { print $left;}
  echo '</div>';
} /* <- This bracket is missing in the code you reported. */
3
kiamlaluno