Translate to

Buscar

17 de diciembre de 2010

Cómo personalizar la página site-offline

La página site-offline se muestra cuando ponemos el sitio en mantenimiento (admin/settings/site-maintenance), o cuando Drupal no puede conectarse a la base de datos.

Aquí me refiero al segundo caso.

Para probar esta característica, puede apagar el servidor de base de datos.

También puede cambiar temporalmente el archivo sites/default/settings.php poniendo parámetros erroneos de conexión. Por ejemplo:

sites/default/settings.php
...
#$db_url = 'mysqli://mydatabase:clave@localhost/mydatabase';
$db_url = 'mysqli://mydatabase:clave_erronea@localhost/mydatabase';
...

1
En sites/default/settings.php, indicar el nombre del tema que contendrá a maintenance-page-offline.tpl.php, la página personalizada.

Hay unas líneas que se pueden descomentar para eso, pero quizás lo más sencillo sea agregar las que necesitamos al final. Por ejemplo, usaré el tema minnelli, que viene por default con Drupal:

sites/default/settings.php
...
$conf['maintenance_theme'] = 'minnelli';
...

2
En el directorio del tema, crear, si no existe, el archivo maintenance-page-offline.tpl.php.
Esto se puede hacer copiando el archivo page.tpl.php del tema y renombrandolo.
O también, copiando el archivo maintenance-page.tpl.php del tema y renombrándolo.
En este caso, uso la segunda opcion.

3
Personalizar maintenance-page-offline.tpl.php.
Como se recuerda, esta página aparece cuando no hay acceso a la base de datos, así que hay que colocar algunas cosas en hardcode.
Por ejemplo, redefinir el valor de algunas variables y reemplazar el $content:

maintenance-page-offline.tpl.php
...
$site_name = 'My Drupal Site';
$logo = FALSE;
...
<div class="clear-block">
  <!--?php print $content ?-->
  <p>
    En este momento el site no está disponible debido a problemas técnicos.
    Por favor intente de nuevo más tarde.
    Gracias por su comprensión.
  </p>
  <hr />
  <small>
    Si es el administrador de este site, por favor verifique el acceso a la base de datos.
    Para más ayuda, puede revisar el <a href="http://drupal.org/node/258">manual</a>.
  </small>
</div>
...

Referencias

15 de diciembre de 2010

Debug con Xdebug y Aptana (y Notepad++)

Aunque quizás llevo bastante tiempo desarrollando aplicaciones web, no me había preocupado mucho por encontrar un modo de hacer depuración línea por línea (como lo hacía cuando estudiaba Turbo Pascal... cuantos años ya).

No creía que se podría hacer con comodidad. Suponía que el procedimiento era demasiado técnico o se requería de un IDE pesado o costoso.

Por ejemplo, en Java, no llegué a hacerlo. Ni siquiera con las aplicaciones no web. Quizás porque fueron muy pocas o muy pequeñas como para sentir la necesidad.

Con PHP, he sentido muchas veces la necesidad, pero hasta ahora había podido sobrevivir poniendo echo y print_r.

Pero ahora, trabajando con Drupal, aunque el código es relativamente claro, hay varios paradigmas de organización conviviendo y con frecuencia no sé por donde entrar. Hay documentación, pero muchas veces siento que sólo parece aumentar las sombras del bosque. Usar la técnica de echo y print_r es util, como dejar migajas en el camino, pero puede ser algo tedioso para una ruta larga o compleja.

Entonces me animé por encontrar un modo mejor de depurar PHP. Quizás ya era la hora. Encontré que se puede hacer usando Xdebug y Aptana (un IDE derivado de Eclipse). Incluso se puede usar Notepad++ (mi editor de textos favorito).

Base
Una PC con Windows 7, XAMPP 1.7.1 (PHP 5.2).
También lo pude hacer en una PC con Linux Centos 5, Apache 2 y PHP 5.2.

Xdebug
Xdebug es una extensión que hace que Apache genere información para la depuración.
La instalación depende de la plataforma (en Windows, las extensiones de Apache son .dll y, en Linux, son .so, por ejemplo).
Puede ubicar el dll directamente en http://xdebug.org/download.php, o usar el wizard http://xdebug.org/wizard.php (sin embargo ya no soporta PHP compilado con MSVC6). Allí aparece una caja de texto donde se puede pegar la selección copiada (Edit, Paste) de un phpinfo generado por el PHP que se tenga instalado.
Una pagina phpinfo es fácil de hacer. Simplemente guarde en el directorio web un archivo phpinfo.php con el siguiente contenido:
<?php phpinfo(); ?>
y luego acceda a http://localhost/phpinfo.php. Debe aparecer una página larga con muchas tablas pintadas de azul. El find-binary de Xdebug no requiere el código fuente de la página, sino que simplemente la seleccione toda (Edit, Select all, Copy).
Copiado el texto copiado del phpinfo en la caja, luego de pulsar el botón Analyze my phpinfo output() aparecerá un conjunto de instrucciones que hay que seguir para instalar Xdebug. Sígalas.

Por ejemplo, para mi caso en Windows, requerí bajar php_xdebug-2.1.0-5.2-vc6.dll que copié en el directorio php/ext/. Luego modifiqué php/php.ini:

[Zend]
;zend_extension_ts = "C:\bin\dev\xampp_171\php\zendOptimizer\lib\ZendExtensionManager.dll"
;zend_extension_manager.optimizer_ts = "C:\bin\dev\xampp_171\php\zendOptimizer\lib\Optimizer"
;zend_optimizer.enable_loader = 0
;zend_optimizer.optimization_level=15
;zend_optimizer.license_path =
; Local Variables:
; tab-width: 4
; End:

[XDebug]
;; Only Zend OR (!) XDebug
;zend_extension_ts="C:\bin\dev\xampp_171\php\ext\php_xdebug.dll"
zend_extension = "C:\bin\dev\xampp_171\php\ext\php_xdebug-2.1.0-5.2-vc6.dll"
xdebug.remote_enable=true
xdebug.remote_host=127.0.0.1
xdebug.remote_port=9000
xdebug.remote_handler=dbgp
xdebug.profiler_enable=1
xdebug.profiler_output_dir="C:\bin\dev\xampp_171\tmp"

Luego de reiniciar Apache, si se reconoce a la extensión Xdebug, al correr el phpinfo se podrá observar algo como:


Aptana
En Aptana instalé el soporte para PHP (PDT y PHP Debugger).
En Windows, Preferences, PHP, Debug, elegí PHP Debugger: XDebug, Server (localhost), PHP Executable.


Para probar el depurador, en el directorio web creé un archivo test/test.php, con algún contenido simple como:

<?php
$a = 10;
for ($i=0; $i<$a; $i++) {
  echo $i;
}
?>

Luego, cree un nuevo proyecto PHP a partir del directorio test/. Luego seleccioné el archivo test.php e hice click en Debug as PHP Web Page. La depuración se detiene en la primera línea. Luego puede ir haciendo F5 para ir avanzando, o tambié F6. Podrá encontrar más opciones de depuración bajo el menú Run.


Notepad++
Descargué el plugin DBGP de http://sourceforge.net/projects/npp-plugins/files/DBGP%20Plugin/, extraje el dll (dbgpPlugin.dll) y lo coloqué en el directorio plugins.
Al iniciar nuevamente Notepad++, encontré el menú Plugins/DBGp.
Entré a Plugins/DBGp/Config e inquiqué los parámetros para el cliente DBGp.


Luego, en el menú del plugin, inicié el debugger.
Finalmente, entré a la dirección http://localhost/test/test.php?XDEBUG_SESSION_START=test. Noté que el botón de Notepad++ parpadeaba.



Ahora, a aprender a depurar módulos :-) Ojalá esta información le sirva de ayuda.

Referencias

1 de diciembre de 2010

Cómo quitar el historial del perfil del usuario

En el perfil del usuario (el mostrado en el url user) aparece "Historial, Miembro desde...".

A veces se desea que no aparezca esa información.

Ocultarlo
Una forma de hacerlo es ocultarlo. Por ejemplo localizando el elemento y aplicándole CSS para eso:

En algún .css del tema:
.profile h3,
.profile .user-member {
  display: none;
}

Quitarlo
Otra forma de hacerlo es quitarlo, que ni siquiera se genere el HTML.

Con el template
Una forma de quitarlo es copiando al tema el template /modules/user/user-profile-category.tpl.php y agregar una línea que prevenga la presentación. Por ejemplo:

themes/ttt/user-profile-category.tpl.php
<?php if ($title == t('History')) return; ?>
<?php if ($title) : ?>
  <h3><?php print $title; ?></h3>
<?php endif; ?>

<dl<?php print $attributes; ?>>
  <?php print $profile_items; ?>
</dl>

Con una función del template
Otra forma de quitarlo es modificando las variables de template en el archivo template.php del tema. Por ejemplo, para el tema ttt:

themes/ttt/template.php
function ttt_preprocess_user_profile(&$vars) {
  unset($vars['profile']['summary']);
  $vars['user_profile'] = implode($vars['profile']);
}

Con hook_user
Otra forma de quitarlo es usando el hook_user. Por ejemplo, para el módulo mmm:

function mymodule_user($type, &$edit, &$account, $category = NULL) {
  if ($type == 'view') {
    unset($account->content['summary']);
  }
}


Referencias

Más artículos