lunes, 19 de mayo de 2008

Código estándar en PHP

El siguiente post que encontré nos muestra algunas reglas para escribir código estándar en php según los estándares que propone PEAR. Pueden ver esta información http://dotpress.wordpress.com/2007/03/29/pear-estandares-de-desarrollo-para-php/

Saludos ...

viernes, 9 de mayo de 2008

Función en Drupal 5.x para setear mensaje

Para setear un mensaje general la api de drupal nos ofrece una función. Esta función es drupal_set_message. Puede ser utilizada dentro de nuestros módulos para efectuar un mensaje al sistema.

Sintáxis
array drupal_set_message($message = null, $type = 'status', $repeat = true)

Parámetros
  • $message: mensaje que vamos a mandar para que la función lo coloque.
  • $type: es el tipo de mensaje. Tiene las siguientes opciones:
    • 'status'
    • 'warning'
    • 'error' --> normalmente color rojo
  • $repeat: si es false el mensaje no se repetirá.
Código

1.    
2.
function drupal_set_message($message = NULL, $type = 'status', $repeat = TRUE) {
3. if ($message) {
4. if (!isset($_SESSION['messages'])) {
5. $_SESSION['messages'] = array();
6. }
7.
8.
if (!isset($_SESSION['messages'][$type])) {
9. $_SESSION['messages'][$type] = array();
10. }
11.
12.
if ($repeat || !in_array($message, $_SESSION['messages'][$type])) {
13. $_SESSION['messages'][$type][] = $message;
14. }
15. }
16.
17.
// messages not set when DB connection fails
18. return isset($_SESSION['messages']) ? $_SESSION['messages'] : NULL;
19. }
20. ?>


Fuente: http://api.drupal.org/api/function/drupal_set_message

Saludos ...

jueves, 8 de mayo de 2008

Función hook_access Drupal 5.x

El hook access dentro del api drupal 5.x para el desarrollo de módulos nos ayuda a definir los permisos de acceso (por ejemplo para crear un tipo de nodo). La cuenta administrativa (con id #1 en la tabla) no tendrá problema para pasar por los permisos de acceso de cualquier módulo. Si no se define este hook para un módulo que defina un tipo de dato, todos los controles de acceso fallarán y sólo el administrador o los usuarios que tengan el permiso "administrar nodos" podrán verlos.

Parámetros:
$op: es la operación a realizar. Por ejemplo:
  • create
  • delete
  • update
  • delete
  • view
Valor de return
Se retorna true si la acción se puede realizar, de lo contrario, se retorna false.

Ej.
1.    
2.
function hook_access($op, $node) {
3. global $user;
4.
5.
if ($op == 'create') {
6. return user_access('create stories');
7. }
8.
9.
if ($op == 'update' || $op == 'delete') {
10. if (user_access('edit own stories') && ($user->uid == $node->uid)) {
11. return TRUE;
12. }
13. }
14. }
15. ?>
Fuente: http://drupa.org/api/function/hook_access/5

Saludos ...

Presentación sobre Programación Orientada a Objetos - Conceptos y su uso en php

Aquí les dejo una presentación que realizé para mi curso de php. Más adelante agrego los ejemplos.



Saludos ...

Custom URL's en Drupal 5.x

Para cambiar el estilo las url's de nuestro sitio en drupal (por ejemplo www.example.com/node/14 a www.example.com/articulo/14) tenemos una función que nos puede ayudar.

Esta función es custom_url_rewrite. A continuación les dejo un ejemplo de modificar la url con node por articulo.


1.
2.
function custom_url_rewrite($op, $result, $path) {
3. if ($op == 'alias') {
4. if (preg_match('|^node/(.*)|', $path, $matches)) {
5. return 'articulo/'. $matches[1];
6. }
7.
8.
}
9. if ($op == 'source') {
10. if (preg_match('|^articulo(/.*)|', $path, $matches)) {
11. return 'node'. $matches[1];
12. }
13.
14.
}
15. return $result;
16. }
17. ?>

Donde si el parámetro $op es 'source' quiere decir que hay que traducirla para el código y si es 'alias' se hace la traducción para la url.

Esta función se guarda en el archivo settings.php de nuestro sitio (por ejemplo ejemplo/sites/default/settings.php)

Saludos ...

viernes, 25 de abril de 2008

Presentación sobre SQL - Conceptos

Aquí les dejo con una presentación que hice para un Curso de PHP que estoy impartiendo. El fin es explicar los principales conceptos del lenguajes SQL.


SlideShare | View | Upload your own


Saludos...

martes, 22 de abril de 2008

mysql_num_rows vs. SQl - SELECT COUNT(*)

Haciendo una paginación para un proyecto me dió la curiosidad de verificar cuál método es más efectivo para contar el total de registros. Bueno a pesar de ser obvio que con sql count(*) sería más rápido, me propuse hacer las pruebas y estos fueron los resultados:

  • Prueba con SELECT COUNT(*) FROM tabla
    Fecha: 22/04/2008 11:35:17 am

    Test con count(*) - registros = 44069
    Tiempo 0.00441598892212 segundos
  • Prueba mysql_num_rows
    Fecha: 22/04/2008 11:35:21 am
    Test con mysql_affected_rows - registros = 44069
    Tiempo 59.3658621311 segundos
Código fuente de la prueba:
1.    
2.
require('../benchmark.php');
3. $caso = 'mysql';
4. $file = '../var/bench_databasecount.txt';
5. try{
6. Benchmark::startBenchmark($file);
7. $conn = mysql_connect('localhost', 'root', 'pannet1');
8. mysql_select_db('test', $conn);
9. switch($caso){
10. case 'count':
11. $sql = "SELECT COUNT(*) as contador FROM tabla";
12. $rs = mysql_query($sql, $conn);
13. $count = mysql_fetch_array($rs);
14. Benchmark::pushLog('Test con count - registros = '.$count['contador']."\n", $file);
15. break;
16. case 'mysql':
17. $sql = "SELECT * FROM tabla";
18. $rs = mysql_query($sql, $conn);
19. $count = mysql_num_rows($rs);
20. Benchmark::pushLog('Test con mysql_affected_rows - registros = '.$count ."\n", $file);
21. break;
22.
23.
}
24. Benchmark::endBenchmark($file);
25. echo 'Termino';
26. }catch(Exception $e){
27. echo $e->getMessage();
28. }
29. ?>
30.
31.

Conclusión

A las personas que todavía realizan las paginaciones con mysql_num_rows, preferiblemente usen sql (función COUNT(*)).

Saludos ...