‘Unsupported Operand Types’ en Drupal 6.x
Tras crear una vista en Views 2 sobre mi instalación Drupal 6.10 me encontré con que no había manera de visualizarla; ni en modo página, ni invocándola como un bloque desde un nodo... nada. El navegador me daba una página en blanco con el siguiente mensaje:
Fatal error: Unsupported operand types in /mysite/includes/common.inc on line 1453
Estuve buscando el error en los "support requests" de Views, pero nada. Hasta que el final dí con una brillante solución, de ésas que me dejan admirado además de ayudarme a seguir trabajando. Está basada en el hecho de que Drupal 6 cambia el modo de tratar las funciones l() y url() desde 5.x; de modo que a quien tenga ese problema le recomiendo colocar estos 2 snippets en drupal/includes/common.inc.
/** * Añade este código bajo la línea que dice: * `function url($path = NULL, $options = array()) {` * (originalmente en la línea 1368) */ // Convert arguments and move on... if (!is_array($options)) { $options = array(); $args = func_get_args(); if (isset($args[1])) $options['query'] = $args[1]; if (isset($args[2])) $options['fragment'] = $args[2]; if (isset($args[3])) $options['absolute'] = $args[3]; }
/** * Añade además este código bajo la línea que dice: * `function l($text, $path, $options = array()) {` * (originalmente en la línea 1541) */ // Convert arguments and move on... if (!is_array($options)) { $options = array(); $args = func_get_args(); if (isset($args[2])) $options['attributes'] = $args[2]; if (isset($args[3])) $options['query'] = $args[3]; if (isset($args[4])) $options['fragment'] = $args[4]; if (isset($args[5])) $options['absolute'] = $args[5]; if (isset($args[6])) $options['html'] = $args[6]; }
¡Genial! Todo el crédito al gran Justin Hileman
La duda que me queda es, ¿por qué da Views 2 este error?...

